Chat bot integration now fully functional.

This commit is contained in:
lotodore
2009-08-17 09:45:06 +00:00
parent f7885f9116
commit 836ec60e6d
18 changed files with 180 additions and 37 deletions
+3 -1
View File
@@ -25,13 +25,14 @@
#include <boost/enable_shared_from_this.hpp>
#include <string>
#include <net/internalchatcleanerpacket.h>
#include <net/chatcleanercallback.h>
class EncodedPacket;
class ChatCleanerManager : public boost::enable_shared_from_this<ChatCleanerManager>
{
public:
ChatCleanerManager(boost::shared_ptr<boost::asio::io_service> ioService);
ChatCleanerManager(ChatCleanerCallback &cb, boost::shared_ptr<boost::asio::io_service> ioService);
virtual ~ChatCleanerManager();
void Init(const std::string &serverAddr, int port, bool ipv6,
@@ -51,6 +52,7 @@ protected:
private:
ChatCleanerCallback &m_callback;
boost::shared_ptr<boost::asio::io_service> m_ioService;
boost::shared_ptr<boost::asio::ip::tcp::resolver> m_resolver;
boost::shared_ptr<boost::asio::ip::tcp::socket> m_socket;
+26 -16
View File
@@ -29,8 +29,8 @@ using namespace std;
using boost::asio::ip::tcp;
ChatCleanerManager::ChatCleanerManager(boost::shared_ptr<boost::asio::io_service> ioService)
: m_ioService(ioService), m_connected(false), m_curRequestId(0), m_recvBufUsed(0)
ChatCleanerManager::ChatCleanerManager(ChatCleanerCallback &cb, boost::shared_ptr<boost::asio::io_service> ioService)
: m_callback(cb), m_ioService(ioService), m_connected(false), m_curRequestId(0), m_recvBufUsed(0)
{
m_resolver.reset(
new boost::asio::ip::tcp::resolver(*m_ioService));
@@ -125,21 +125,22 @@ ChatCleanerManager::HandleConnect(const boost::system::error_code& ec,
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
}
else if (endpoint_iterator != boost::asio::ip::tcp::resolver::iterator())
{
// Try next resolve entry.
m_socket->close();
boost::asio::ip::tcp::endpoint endpoint = *endpoint_iterator;
m_socket->async_connect(
endpoint,
boost::bind(&ChatCleanerManager::HandleConnect,
shared_from_this(),
boost::asio::placeholders::error,
++endpoint_iterator));
}
else if (ec != boost::asio::error::operation_aborted)
{
LOG_ERROR("Could not connect to chat cleaner server.");
if (endpoint_iterator != boost::asio::ip::tcp::resolver::iterator())
{
// Try next resolve entry.
m_socket->close();
boost::asio::ip::tcp::endpoint endpoint = *endpoint_iterator;
m_socket->async_connect(
endpoint,
boost::bind(&ChatCleanerManager::HandleConnect,
shared_from_this(),
boost::asio::placeholders::error,
++endpoint_iterator));
}
else
LOG_ERROR("Could not connect to chat cleaner server.");
}
}
@@ -179,7 +180,10 @@ ChatCleanerManager::HandleRead(const boost::system::error_code &ec, size_t bytes
else
m_recvBufUsed = 0;
error = HandleMessage(recvMsg);
if (asn_check_constraints(&asn_DEF_ChatCleanerMessage, recvMsg.GetMsg(), NULL, NULL) == 0)
error = HandleMessage(recvMsg);
else
LOG_ERROR("Received invalid chat cleaner packet.");
}
} while (!error && retVal.code == RC_OK);
@@ -226,6 +230,12 @@ ChatCleanerManager::HandleMessage(InternalChatCleanerPacket &msg)
if (!m_connected)
LOG_ERROR("Chat cleaner handshake failed.");
}
else if (msg.GetMsg()->present == ChatCleanerMessage_PR_cleanerChatReplyMessage)
{
CleanerChatReplyMessage_t *netReply = &msg.GetMsg()->choice.cleanerChatReplyMessage;
m_callback.SignalChatBotMessage(string((const char *)netReply->cleanerText->buf, netReply->cleanerText->size));
error = false;
}
return error;
}
+4
View File
@@ -813,6 +813,10 @@ AbstractClientStateReceiving::HandlePacket(boost::shared_ptr<ClientThread> clien
client->GetCallback().SignalNetClientGameChatMsg("(global notice)", STL_STRING_FROM_OCTET_STRING(netMessage->chatText));
client->GetCallback().SignalNetClientLobbyChatMsg("(global notice)", STL_STRING_FROM_OCTET_STRING(netMessage->chatText));
}
else if (netMessage->chatType.present == chatType_PR_chatTypeBot)
{
client->GetCallback().SignalNetClientLobbyChatMsg("(chat bot)", STL_STRING_FROM_OCTET_STRING(netMessage->chatText));
}
else if (netMessage->chatType.present == chatType_PR_chatTypeGame)
{
unsigned playerId = netMessage->chatType.choice.chatTypeGame.playerId;
+23 -2
View File
@@ -68,7 +68,7 @@ using namespace std;
using boost::asio::ip::tcp;
class ServerSenderCallback : public SenderCallback, public SessionDataCallback
class ServerSenderCallback : public SenderCallback, public SessionDataCallback, public ChatCleanerCallback
{
public:
ServerSenderCallback(ServerLobbyThread &server) : m_server(server) {}
@@ -84,6 +84,10 @@ public:
{
m_server.GetSender().SignalSessionTerminated(session);
}
virtual void SignalChatBotMessage(const string &msg)
{
m_server.SendChatBotMsg(msg);
}
private:
ServerLobbyThread &m_server;
@@ -103,7 +107,7 @@ ServerLobbyThread::ServerLobbyThread(GuiInterface &gui, ConfigFile *playerConfig
m_sender.reset(new SenderHelper(*m_senderCallback, m_ioService));
m_receiver.reset(new ReceiverHelper);
m_banManager.reset(new ServerBanManager(m_ioService));
m_chatCleanerManager.reset(new ChatCleanerManager(m_ioService));
m_chatCleanerManager.reset(new ChatCleanerManager(*m_senderCallback, m_ioService));
}
ServerLobbyThread::~ServerLobbyThread()
@@ -445,9 +449,26 @@ ServerLobbyThread::SendGlobalMsgBox(const string &message)
&netDialog->notificationText,
message.c_str(),
message.length());
m_sessionManager.SendToAllSessions(GetSender(), packet, SessionData::Established);
m_gameSessionManager.SendToAllSessions(GetSender(), packet, SessionData::Game);
}
void
ServerLobbyThread::SendChatBotMsg(const std::string &message)
{
boost::shared_ptr<NetPacket> packet(new NetPacket(NetPacket::Alloc));
packet->GetMsg()->present = PokerTHMessage_PR_chatMessage;
ChatMessage_t *netChat = &packet->GetMsg()->choice.chatMessage;
netChat->chatType.present = chatType_PR_chatTypeBot;
OCTET_STRING_fromBuf(
&netChat->chatText,
message.c_str(),
message.length());
m_sessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Established);
m_gameSessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Game);
}
void
ServerLobbyThread::AddComputerPlayer(boost::shared_ptr<PlayerData> player)
{
+1
View File
@@ -80,6 +80,7 @@ public:
void SendGlobalChat(const std::string &message);
void SendGlobalMsgBox(const std::string &message);
void SendChatBotMsg(const std::string &message);
void AddComputerPlayer(boost::shared_ptr<PlayerData> player);
void RemoveComputerPlayer(boost::shared_ptr<PlayerData> player);