Adding server function to reconnect to the chat server.

This commit is contained in:
lotodore
2009-08-17 11:26:03 +00:00
parent 6eb25757bc
commit b796b0cbe7
5 changed files with 31 additions and 3 deletions
+4
View File
@@ -37,6 +37,7 @@ public:
void Init(const std::string &serverAddr, int port, bool ipv6, void Init(const std::string &serverAddr, int port, bool ipv6,
const std::string &clientSecret, const std::string &serverSecret); const std::string &clientSecret, const std::string &serverSecret);
void ReInit();
void HandleChatText(unsigned playerId, const std::string &name, const std::string &text); void HandleChatText(unsigned playerId, const std::string &name, const std::string &text);
protected: protected:
@@ -59,6 +60,9 @@ private:
bool m_connected; bool m_connected;
unsigned m_curRequestId; unsigned m_curRequestId;
std::string m_serverAddr;
int m_serverPort;
bool m_useIpv6;
std::string m_clientSecret; std::string m_clientSecret;
std::string m_serverSecret; std::string m_serverSecret;
unsigned char m_recvBuf[2*MAX_CLEANER_PACKET_SIZE]; unsigned char m_recvBuf[2*MAX_CLEANER_PACKET_SIZE];
+15 -3
View File
@@ -44,16 +44,25 @@ void
ChatCleanerManager::Init(const string &serverAddr, int port, bool ipv6, ChatCleanerManager::Init(const string &serverAddr, int port, bool ipv6,
const string &clientSecret, const string &serverSecret) const string &clientSecret, const string &serverSecret)
{ {
m_serverAddr = serverAddr;
m_serverPort = port;
m_useIpv6 = ipv6;
m_clientSecret = clientSecret; m_clientSecret = clientSecret;
m_serverSecret = serverSecret; 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())); m_socket.reset(new boost::asio::ip::tcp::socket(*m_ioService, tcp::v6()));
else else
m_socket.reset(new boost::asio::ip::tcp::socket(*m_ioService, tcp::v4())); m_socket.reset(new boost::asio::ip::tcp::socket(*m_ioService, tcp::v4()));
ostringstream portStr; ostringstream portStr;
portStr << port; portStr << m_serverPort;
boost::asio::ip::tcp::resolver::query q(serverAddr, portStr.str()); boost::asio::ip::tcp::resolver::query q(m_serverAddr, portStr.str());
m_resolver->async_resolve( m_resolver->async_resolve(
q, q,
@@ -209,9 +218,12 @@ ChatCleanerManager::HandleRead(const boost::system::error_code &ec, size_t bytes
else if (ec != boost::asio::error::operation_aborted) else if (ec != boost::asio::error::operation_aborted)
{ {
LOG_ERROR("Error receiving data from chat cleaner."); LOG_ERROR("Error receiving data from chat cleaner.");
bool wasConnected = m_connected;
boost::system::error_code ec; boost::system::error_code ec;
m_socket->close(ec); m_socket->close(ec);
m_connected = false; m_connected = false;
if (wasConnected)
ReInit(); // Try to reconnect once if disconnected.
} }
} }
+6
View File
@@ -469,6 +469,12 @@ ServerLobbyThread::SendChatBotMsg(const std::string &message)
m_gameSessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Game); m_gameSessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Game);
} }
void
ServerLobbyThread::ReconnectChatBot()
{
m_chatCleanerManager->ReInit();
}
void void
ServerLobbyThread::AddComputerPlayer(boost::shared_ptr<PlayerData> player) ServerLobbyThread::AddComputerPlayer(boost::shared_ptr<PlayerData> player)
{ {
+5
View File
@@ -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."); 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") else if (command == "showip")
{ {
while (msgStream.peek() == ' ') while (msgStream.peek() == ' ')
+1
View File
@@ -81,6 +81,7 @@ public:
void SendGlobalChat(const std::string &message); void SendGlobalChat(const std::string &message);
void SendGlobalMsgBox(const std::string &message); void SendGlobalMsgBox(const std::string &message);
void SendChatBotMsg(const std::string &message); void SendChatBotMsg(const std::string &message);
void ReconnectChatBot();
void AddComputerPlayer(boost::shared_ptr<PlayerData> player); void AddComputerPlayer(boost::shared_ptr<PlayerData> player);
void RemoveComputerPlayer(boost::shared_ptr<PlayerData> player); void RemoveComputerPlayer(boost::shared_ptr<PlayerData> player);