Chat bot integration now fully functional.
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user