Allow disable chat in server side

This commit is contained in:
Benau 2019-04-03 12:38:40 +08:00
parent 05fad217e3
commit e0de1318d2
6 changed files with 51 additions and 22 deletions

View File

@ -97,6 +97,7 @@ ClientLobby::ClientLobby(const TransportAddress& a, std::shared_ptr<Server> s)
m_spectator = false;
m_server_live_joinable = false;
m_server_send_live_load_world = false;
m_server_enabled_chat = true;
} // ClientLobby
//-----------------------------------------------------------------------------
@ -607,6 +608,7 @@ void ClientLobby::connectionAccepted(Event* event)
NetworkConfig::get()->setStateFrequency(state_frequency_in_server);
if (auto_start_timer != std::numeric_limits<float>::max())
NetworkingLobby::getInstance()->setStartingTimerTo(auto_start_timer);
m_server_enabled_chat = data.getUInt8() == 1;
} // connectionAccepted
//-----------------------------------------------------------------------------

View File

@ -103,6 +103,8 @@ private:
bool m_server_send_live_load_world;
bool m_server_enabled_chat;
uint64_t m_auto_back_to_lobby_time;
uint64_t m_start_live_game_time;
@ -162,6 +164,7 @@ public:
void changeSpectateTarget(PlayerAction action, int value,
Input::InputType type) const;
void addSpectateHelperMessage() const;
bool serverEnabledChat() const { return m_server_enabled_chat; }
};
#endif // CLIENT_LOBBY_HPP

View File

@ -317,7 +317,7 @@ bool ServerLobby::notifyEvent(Event* event)
//-----------------------------------------------------------------------------
void ServerLobby::handleChat(Event* event)
{
if (!checkDataSize(event, 1)) return;
if (!checkDataSize(event, 1) || !ServerConfig::m_chat) return;
// Update so that the peer is not kicked
event->getPeer()->updateLastActivity();
@ -2295,7 +2295,8 @@ void ServerLobby::handleUnencryptedConnection(std::shared_ptr<STKPeer> peer,
message_ack->addUInt16(0);
message_ack->addFloat(auto_start_timer)
.addUInt32(ServerConfig::m_state_frequency);
.addUInt32(ServerConfig::m_state_frequency)
.addUInt8(ServerConfig::m_chat ? 1 : 0);
peer->setSpectator(false);
if (game_started)

View File

@ -144,6 +144,10 @@ namespace ServerConfig
"motd", "Message of today shown in lobby, you can enter encoded XML "
"words here or a file.txt and let STK load it."));
SERVER_CFG_PREFIX BoolServerConfigParam m_chat
SERVER_CFG_DEFAULT(BoolServerConfigParam(true, "chat",
"If off this server will ignore chat message from all players."));
SERVER_CFG_PREFIX FloatServerConfigParam m_voting_timeout
SERVER_CFG_DEFAULT(FloatServerConfigParam(30.0f, "voting-timeout",
"Timeout in seconds for voting tracks in server."));

View File

@ -79,6 +79,12 @@ RacePausedDialog::RacePausedDialog(const float percentWidth,
m_text_box->setActive(true);
getWidget("send")->setVisible(true);
m_text_box->addListener(this);
auto cl = LobbyProtocol::get<ClientLobby>();
if (cl && !cl->serverEnabledChat())
{
m_text_box->setActive(false);
getWidget("send")->setActive(false);
}
}
else
{

View File

@ -192,10 +192,10 @@ void NetworkingLobby::init()
m_start_button->setVisible(false);
m_config_button->setVisible(false);
m_state = LS_CONNECTING;
getWidget("chat")->setVisible(false);
getWidget("chat")->setActive(false);
getWidget("send")->setVisible(false);
getWidget("send")->setActive(false);
m_chat_box->setVisible(false);
m_chat_box->setActive(false);
m_send_button->setVisible(false);
m_send_button->setActive(false);
// Connect to server now if we have saved players and not disconnected
if (!LobbyProtocol::get<LobbyProtocol>() &&
@ -213,19 +213,19 @@ void NetworkingLobby::init()
{
m_chat_box->addListener(this);
m_chat_box->setText("");
getWidget("chat")->setVisible(true);
getWidget("chat")->setActive(true);
getWidget("send")->setVisible(true);
getWidget("send")->setActive(true);
m_chat_box->setVisible(true);
m_chat_box->setActive(true);
m_send_button->setVisible(true);
m_send_button->setActive(true);
}
else
{
m_chat_box->setText(
_("Chat is disabled, enable in options menu."));
getWidget("chat")->setVisible(true);
getWidget("chat")->setActive(false);
getWidget("send")->setVisible(true);
getWidget("send")->setActive(false);
m_chat_box->setVisible(true);
m_chat_box->setActive(false);
m_send_button->setVisible(true);
m_send_button->setActive(false);
}
if (auto cl = LobbyProtocol::get<ClientLobby>())
{
@ -298,6 +298,19 @@ void NetworkingLobby::onUpdate(float delta)
m_header->setText(_("Lobby (ping: %dms)", ping), false);
auto cl = LobbyProtocol::get<ClientLobby>();
if (cl && UserConfigParams::m_lobby_chat)
{
if (cl->serverEnabledChat() && !m_send_button->isActivated())
{
m_chat_box->setActive(true);
m_send_button->setActive(true);
}
else if (!cl->serverEnabledChat() && m_send_button->isActivated())
{
m_chat_box->setActive(false);
m_send_button->setActive(false);
}
}
if (cl && cl->isWaitingForGame())
{
m_start_button->setVisible(false);
@ -704,18 +717,18 @@ void NetworkingLobby::finishAddingPlayers()
if (UserConfigParams::m_lobby_chat)
{
m_chat_box->addListener(this);
getWidget("chat")->setVisible(true);
getWidget("chat")->setActive(true);
getWidget("send")->setVisible(true);
getWidget("send")->setActive(true);
m_chat_box->setVisible(true);
m_chat_box->setActive(true);
m_send_button->setVisible(true);
m_send_button->setActive(true);
}
else
{
m_chat_box->setText(_("Chat is disabled, enable in options menu."));
getWidget("chat")->setVisible(true);
getWidget("chat")->setActive(false);
getWidget("send")->setVisible(true);
getWidget("send")->setActive(false);
m_chat_box->setVisible(true);
m_chat_box->setActive(false);
m_send_button->setVisible(true);
m_send_button->setActive(false);
}
} // finishAddingPlayers