Adding server function to reconnect to the chat server.
This commit is contained in:
@@ -37,6 +37,7 @@ public:
|
||||
|
||||
void Init(const std::string &serverAddr, int port, bool ipv6,
|
||||
const std::string &clientSecret, const std::string &serverSecret);
|
||||
void ReInit();
|
||||
void HandleChatText(unsigned playerId, const std::string &name, const std::string &text);
|
||||
|
||||
protected:
|
||||
@@ -59,6 +60,9 @@ private:
|
||||
|
||||
bool m_connected;
|
||||
unsigned m_curRequestId;
|
||||
std::string m_serverAddr;
|
||||
int m_serverPort;
|
||||
bool m_useIpv6;
|
||||
std::string m_clientSecret;
|
||||
std::string m_serverSecret;
|
||||
unsigned char m_recvBuf[2*MAX_CLEANER_PACKET_SIZE];
|
||||
|
||||
@@ -44,16 +44,25 @@ void
|
||||
ChatCleanerManager::Init(const string &serverAddr, int port, bool ipv6,
|
||||
const string &clientSecret, const string &serverSecret)
|
||||
{
|
||||
m_serverAddr = serverAddr;
|
||||
m_serverPort = port;
|
||||
m_useIpv6 = ipv6;
|
||||
m_clientSecret = clientSecret;
|
||||
m_serverSecret = serverSecret;
|
||||
if (ipv6)
|
||||
ReInit();
|
||||
}
|
||||
|
||||
void
|
||||
ChatCleanerManager::ReInit()
|
||||
{
|
||||
if (m_useIpv6)
|
||||
m_socket.reset(new boost::asio::ip::tcp::socket(*m_ioService, tcp::v6()));
|
||||
else
|
||||
m_socket.reset(new boost::asio::ip::tcp::socket(*m_ioService, tcp::v4()));
|
||||
|
||||
ostringstream portStr;
|
||||
portStr << port;
|
||||
boost::asio::ip::tcp::resolver::query q(serverAddr, portStr.str());
|
||||
portStr << m_serverPort;
|
||||
boost::asio::ip::tcp::resolver::query q(m_serverAddr, portStr.str());
|
||||
|
||||
m_resolver->async_resolve(
|
||||
q,
|
||||
@@ -209,9 +218,12 @@ ChatCleanerManager::HandleRead(const boost::system::error_code &ec, size_t bytes
|
||||
else if (ec != boost::asio::error::operation_aborted)
|
||||
{
|
||||
LOG_ERROR("Error receiving data from chat cleaner.");
|
||||
bool wasConnected = m_connected;
|
||||
boost::system::error_code ec;
|
||||
m_socket->close(ec);
|
||||
m_connected = false;
|
||||
if (wasConnected)
|
||||
ReInit(); // Try to reconnect once if disconnected.
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -469,6 +469,12 @@ ServerLobbyThread::SendChatBotMsg(const std::string &message)
|
||||
m_gameSessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Game);
|
||||
}
|
||||
|
||||
void
|
||||
ServerLobbyThread::ReconnectChatBot()
|
||||
{
|
||||
m_chatCleanerManager->ReInit();
|
||||
}
|
||||
|
||||
void
|
||||
ServerLobbyThread::AddComputerPlayer(boost::shared_ptr<PlayerData> player)
|
||||
{
|
||||
|
||||
@@ -112,6 +112,11 @@ ServerManager::SignalIrcChatMsg(const std::string &nickName, const std::string &
|
||||
m_ircThread->SendChatMessage(nickName + ": Player \"" + playerName + "\" was not found on the server.");
|
||||
}
|
||||
}
|
||||
else if (command == "cleaner-reconnect")
|
||||
{
|
||||
GetLobbyThread().ReconnectChatBot();
|
||||
m_ircThread->SendChatMessage(nickName + ": Cleaner bot reconnect initiated.");
|
||||
}
|
||||
else if (command == "showip")
|
||||
{
|
||||
while (msgStream.peek() == ' ')
|
||||
|
||||
@@ -81,6 +81,7 @@ public:
|
||||
void SendGlobalChat(const std::string &message);
|
||||
void SendGlobalMsgBox(const std::string &message);
|
||||
void SendChatBotMsg(const std::string &message);
|
||||
void ReconnectChatBot();
|
||||
|
||||
void AddComputerPlayer(boost::shared_ptr<PlayerData> player);
|
||||
void RemoveComputerPlayer(boost::shared_ptr<PlayerData> player);
|
||||
|
||||
Reference in New Issue
Block a user