Enable sending of a global message box through the irc bot, to inform clients about server reboots.
This commit is contained in:
@@ -1040,6 +1040,22 @@ Server Notification: Chat Text
|
|||||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
|
||||||
|
|
||||||
|
Server Notification: Message Box Text
|
||||||
|
|
||||||
|
0 1 2 3
|
||||||
|
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|
||||||
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
| Message Type = 514 | Message Length |
|
||||||
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
| Text Length | Reserved |
|
||||||
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
| \
|
||||||
|
\ Text (UTF-8) /
|
||||||
|
| +-------------------------------+
|
||||||
|
/ | padding |
|
||||||
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
|
||||||
|
|
||||||
Server Notification: Error
|
Server Notification: Error
|
||||||
|
|
||||||
0 1 2 3
|
0 1 2 3
|
||||||
|
|||||||
@@ -138,6 +138,7 @@ void ServerGuiWrapper::SignalNetClientGameListPlayerJoined(unsigned gameId, unsi
|
|||||||
void ServerGuiWrapper::SignalNetClientGameListPlayerLeft(unsigned gameId, unsigned playerId) { if (myClientcb) myClientcb->SignalNetClientGameListPlayerLeft(gameId, playerId); }
|
void ServerGuiWrapper::SignalNetClientGameListPlayerLeft(unsigned gameId, unsigned playerId) { if (myClientcb) myClientcb->SignalNetClientGameListPlayerLeft(gameId, playerId); }
|
||||||
void ServerGuiWrapper::SignalNetClientGameStart(boost::shared_ptr<Game> game) { if (myClientcb) myClientcb->SignalNetClientGameStart(game); }
|
void ServerGuiWrapper::SignalNetClientGameStart(boost::shared_ptr<Game> game) { if (myClientcb) myClientcb->SignalNetClientGameStart(game); }
|
||||||
void ServerGuiWrapper::SignalNetClientChatMsg(const string &playerName, const string &msg) { if (myClientcb) myClientcb->SignalNetClientChatMsg(playerName, msg); }
|
void ServerGuiWrapper::SignalNetClientChatMsg(const string &playerName, const string &msg) { if (myClientcb) myClientcb->SignalNetClientChatMsg(playerName, msg); }
|
||||||
|
void ServerGuiWrapper::SignalNetClientMsgBox(const string &msg) { if (myClientcb) myClientcb->SignalNetClientMsgBox(msg); }
|
||||||
void ServerGuiWrapper::SignalNetClientWaitDialog() { if (myClientcb) myClientcb->SignalNetClientWaitDialog(); }
|
void ServerGuiWrapper::SignalNetClientWaitDialog() { if (myClientcb) myClientcb->SignalNetClientWaitDialog(); }
|
||||||
|
|
||||||
void ServerGuiWrapper::SignalNetServerSuccess(int actionID) { if (myServercb) myServercb->SignalNetServerSuccess(actionID); }
|
void ServerGuiWrapper::SignalNetServerSuccess(int actionID) { if (myServercb) myServercb->SignalNetServerSuccess(actionID); }
|
||||||
|
|||||||
@@ -137,6 +137,7 @@ public:
|
|||||||
void SignalIrcPlayerKicked(const std::string &nickName, const std::string &byWhom, const std::string &reason);
|
void SignalIrcPlayerKicked(const std::string &nickName, const std::string &byWhom, const std::string &reason);
|
||||||
void SignalIrcPlayerLeft(const std::string &nickName);
|
void SignalIrcPlayerLeft(const std::string &nickName);
|
||||||
void SignalIrcChatMsg(const std::string &nickName, const std::string &msg);
|
void SignalIrcChatMsg(const std::string &nickName, const std::string &msg);
|
||||||
|
void SignalNetClientMsgBox(const std::string &msg);
|
||||||
void SignalIrcError(int errorCode);
|
void SignalIrcError(int errorCode);
|
||||||
void SignalIrcServerError(int errorCode);
|
void SignalIrcServerError(int errorCode);
|
||||||
|
|
||||||
|
|||||||
@@ -160,9 +160,9 @@ void GuiWrapper::SignalNetClientGameListPlayerJoined(unsigned gameId, unsigned p
|
|||||||
void GuiWrapper::SignalNetClientGameListPlayerLeft(unsigned gameId, unsigned playerId) { myStartWindow->signalNetClientGameListPlayerLeft(gameId, playerId); }
|
void GuiWrapper::SignalNetClientGameListPlayerLeft(unsigned gameId, unsigned playerId) { myStartWindow->signalNetClientGameListPlayerLeft(gameId, playerId); }
|
||||||
void GuiWrapper::SignalNetClientGameStart(boost::shared_ptr<Game> game) { myStartWindow->signalNetClientGameStart(game); }
|
void GuiWrapper::SignalNetClientGameStart(boost::shared_ptr<Game> game) { myStartWindow->signalNetClientGameStart(game); }
|
||||||
|
|
||||||
|
|
||||||
void GuiWrapper::SignalNetClientWaitDialog() { myStartWindow->signalShowClientDialog(); }
|
void GuiWrapper::SignalNetClientWaitDialog() { myStartWindow->signalShowClientDialog(); }
|
||||||
void GuiWrapper::SignalNetClientChatMsg(const string &playerName, const string &msg) { myStartWindow->signalNetClientChatMsg(QString::fromUtf8(playerName.c_str()), QString::fromUtf8(msg.c_str())); }
|
void GuiWrapper::SignalNetClientChatMsg(const string &playerName, const string &msg) { myStartWindow->signalNetClientChatMsg(QString::fromUtf8(playerName.c_str()), QString::fromUtf8(msg.c_str())); }
|
||||||
|
void GuiWrapper::SignalNetClientMsgBox(const string &msg) { myStartWindow->signalNetClientMsgBox(QString::fromUtf8(msg.c_str())); }
|
||||||
|
|
||||||
void GuiWrapper::SignalNetServerSuccess(int /*actionID*/) { }
|
void GuiWrapper::SignalNetServerSuccess(int /*actionID*/) { }
|
||||||
void GuiWrapper::SignalNetServerError(int errorID, int osErrorID) { myStartWindow->signalNetServerError(errorID, osErrorID); }
|
void GuiWrapper::SignalNetServerError(int errorID, int osErrorID) { myStartWindow->signalNetServerError(errorID, osErrorID); }
|
||||||
|
|||||||
@@ -125,6 +125,7 @@ public:
|
|||||||
void SignalNetClientPlayerLeft(unsigned playerId, const std::string &playerName, int removeReason);
|
void SignalNetClientPlayerLeft(unsigned playerId, const std::string &playerName, int removeReason);
|
||||||
void SignalNetClientNewGameAdmin(unsigned playerId, const std::string &playerName);
|
void SignalNetClientNewGameAdmin(unsigned playerId, const std::string &playerName);
|
||||||
void SignalNetClientChatMsg(const std::string &playerName, const std::string &msg);
|
void SignalNetClientChatMsg(const std::string &playerName, const std::string &msg);
|
||||||
|
void SignalNetClientMsgBox(const std::string &msg);
|
||||||
void SignalNetClientWaitDialog();
|
void SignalNetClientWaitDialog();
|
||||||
|
|
||||||
void SignalNetClientGameListNew(unsigned gameId);
|
void SignalNetClientGameListNew(unsigned gameId);
|
||||||
|
|||||||
@@ -138,6 +138,7 @@ startWindowImpl::startWindowImpl(ConfigFile *c)
|
|||||||
|
|
||||||
connect(this, SIGNAL(signalNetClientChatMsg(QString, QString)), myStartNetworkGameDialog, SLOT(receiveChatMsg(QString, QString)));
|
connect(this, SIGNAL(signalNetClientChatMsg(QString, QString)), myStartNetworkGameDialog, SLOT(receiveChatMsg(QString, QString)));
|
||||||
connect(this, SIGNAL(signalNetClientChatMsg(QString, QString)), myGuiInterface->getMyW()->getMyChat(), SLOT(receiveMessage(QString, QString)));
|
connect(this, SIGNAL(signalNetClientChatMsg(QString, QString)), myGuiInterface->getMyW()->getMyChat(), SLOT(receiveMessage(QString, QString)));
|
||||||
|
connect(this, SIGNAL(signalNetClientMsgBox(QString)), this, SLOT(networkMessage(QString)));
|
||||||
|
|
||||||
connect(this, SIGNAL(signalNetClientShowTimeoutDialog(int, unsigned)), this, SLOT(showTimeoutDialog(int, unsigned)));
|
connect(this, SIGNAL(signalNetClientShowTimeoutDialog(int, unsigned)), this, SLOT(showTimeoutDialog(int, unsigned)));
|
||||||
|
|
||||||
@@ -869,6 +870,14 @@ void startWindowImpl::networkNotification(int notificationId)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void startWindowImpl::networkMessage(QString msg)
|
||||||
|
{
|
||||||
|
QMessageBox msgBox(QMessageBox::Information, tr("Server Message"),
|
||||||
|
msg, QMessageBox::Close, this);
|
||||||
|
msgBox.setTextFormat(Qt::RichText);
|
||||||
|
msgBox.exec();
|
||||||
|
}
|
||||||
|
|
||||||
void startWindowImpl::networkStart(boost::shared_ptr<Game> game)
|
void startWindowImpl::networkStart(boost::shared_ptr<Game> game)
|
||||||
{
|
{
|
||||||
mySession->startClientGame(game);
|
mySession->startClientGame(game);
|
||||||
|
|||||||
@@ -77,6 +77,7 @@ signals:
|
|||||||
void signalNetClientGameListPlayerLeft(unsigned gameId, unsigned playerId);
|
void signalNetClientGameListPlayerLeft(unsigned gameId, unsigned playerId);
|
||||||
void signalNetClientGameStart(boost::shared_ptr<Game> game);
|
void signalNetClientGameStart(boost::shared_ptr<Game> game);
|
||||||
void signalNetClientChatMsg(QString nickName, QString msg);
|
void signalNetClientChatMsg(QString nickName, QString msg);
|
||||||
|
void signalNetClientMsgBox(QString msg);
|
||||||
|
|
||||||
void signalIrcConnect(QString server);
|
void signalIrcConnect(QString server);
|
||||||
void signalIrcSelfJoined(QString nickName, QString channel);
|
void signalIrcSelfJoined(QString nickName, QString channel);
|
||||||
@@ -109,6 +110,7 @@ public slots:
|
|||||||
|
|
||||||
void networkError(int, int);
|
void networkError(int, int);
|
||||||
void networkNotification(int);
|
void networkNotification(int);
|
||||||
|
void networkMessage(QString);
|
||||||
|
|
||||||
void networkStart(boost::shared_ptr<Game> game);
|
void networkStart(boost::shared_ptr<Game> game);
|
||||||
QStringList getPlayerNicksList();
|
QStringList getPlayerNicksList();
|
||||||
|
|||||||
@@ -57,6 +57,7 @@ public:
|
|||||||
virtual void SignalNetClientNewGameAdmin(unsigned playerId, const std::string &playerName) = 0;
|
virtual void SignalNetClientNewGameAdmin(unsigned playerId, const std::string &playerName) = 0;
|
||||||
|
|
||||||
virtual void SignalNetClientChatMsg(const std::string &playerName, const std::string &msg) = 0;
|
virtual void SignalNetClientChatMsg(const std::string &playerName, const std::string &msg) = 0;
|
||||||
|
virtual void SignalNetClientMsgBox(const std::string &msg) = 0;
|
||||||
virtual void SignalNetClientWaitDialog() = 0;
|
virtual void SignalNetClientWaitDialog() = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -705,6 +705,13 @@ AbstractClientStateReceiving::Process(ClientThread &client)
|
|||||||
if (!playerName.empty())
|
if (!playerName.empty())
|
||||||
client.GetCallback().SignalNetClientChatMsg(playerName, chatData.text);
|
client.GetCallback().SignalNetClientChatMsg(playerName, chatData.text);
|
||||||
}
|
}
|
||||||
|
else if (tmpPacket->ToNetPacketMsgBoxText())
|
||||||
|
{
|
||||||
|
// Message box - display it in the GUI.
|
||||||
|
NetPacketMsgBoxText::Data msgData;
|
||||||
|
tmpPacket->ToNetPacketMsgBoxText()->GetData(msgData);
|
||||||
|
client.GetCallback().SignalNetClientMsgBox(msgData.text);
|
||||||
|
}
|
||||||
else if (tmpPacket->ToNetPacketPlayerLeft())
|
else if (tmpPacket->ToNetPacketPlayerLeft())
|
||||||
{
|
{
|
||||||
// A player left the game.
|
// A player left the game.
|
||||||
|
|||||||
@@ -87,6 +87,7 @@ using namespace std;
|
|||||||
|
|
||||||
#define NET_TYPE_SEND_CHAT_TEXT 0x0200
|
#define NET_TYPE_SEND_CHAT_TEXT 0x0200
|
||||||
#define NET_TYPE_CHAT_TEXT 0x0201
|
#define NET_TYPE_CHAT_TEXT 0x0201
|
||||||
|
#define NET_TYPE_MSG_BOX_TEXT 0x0202
|
||||||
|
|
||||||
#define NET_TYPE_ERROR 0x0400
|
#define NET_TYPE_ERROR 0x0400
|
||||||
|
|
||||||
@@ -659,6 +660,13 @@ struct GCC_PACKED NetPacketChatTextData
|
|||||||
u_int16_t reserved;
|
u_int16_t reserved;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct GCC_PACKED NetPacketMsgBoxTextData
|
||||||
|
{
|
||||||
|
NetPacketHeader head;
|
||||||
|
u_int16_t textLength;
|
||||||
|
u_int16_t reserved;
|
||||||
|
};
|
||||||
|
|
||||||
struct GCC_PACKED NetPacketErrorData
|
struct GCC_PACKED NetPacketErrorData
|
||||||
{
|
{
|
||||||
NetPacketHeader head;
|
NetPacketHeader head;
|
||||||
@@ -951,6 +959,9 @@ NetPacket::Create(char *data, unsigned &dataSize)
|
|||||||
case NET_TYPE_CHAT_TEXT:
|
case NET_TYPE_CHAT_TEXT:
|
||||||
tmpPacket = boost::shared_ptr<NetPacket>(new NetPacketChatText);
|
tmpPacket = boost::shared_ptr<NetPacket>(new NetPacketChatText);
|
||||||
break;
|
break;
|
||||||
|
case NET_TYPE_MSG_BOX_TEXT:
|
||||||
|
tmpPacket = boost::shared_ptr<NetPacket>(new NetPacketMsgBoxText);
|
||||||
|
break;
|
||||||
case NET_TYPE_ERROR:
|
case NET_TYPE_ERROR:
|
||||||
tmpPacket = boost::shared_ptr<NetPacket>(new NetPacketError);
|
tmpPacket = boost::shared_ptr<NetPacket>(new NetPacketError);
|
||||||
break;
|
break;
|
||||||
@@ -1368,6 +1379,12 @@ NetPacket::ToNetPacketChatText() const
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const NetPacketMsgBoxText *
|
||||||
|
NetPacket::ToNetPacketMsgBoxText() const
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
const NetPacketError *
|
const NetPacketError *
|
||||||
NetPacket::ToNetPacketError() const
|
NetPacket::ToNetPacketError() const
|
||||||
{
|
{
|
||||||
@@ -2032,7 +2049,7 @@ NetPacketGameListNew::GetData(NetPacketGameListNew::Data &outData) const
|
|||||||
outData.gameInfo.mode = static_cast<GameMode>(ntohs(tmpData->gameMode));
|
outData.gameInfo.mode = static_cast<GameMode>(ntohs(tmpData->gameMode));
|
||||||
u_int16_t gameNameLen = ntohs(tmpData->gameNameLength);
|
u_int16_t gameNameLen = ntohs(tmpData->gameNameLength);
|
||||||
u_int16_t curNumPlayers = ntohs(tmpData->curNumberOfPlayers);
|
u_int16_t curNumPlayers = ntohs(tmpData->curNumberOfPlayers);
|
||||||
outData.gameInfo.isPasswordProtected = ntohs(tmpData->privacyFlags) & NET_PRIVACY_FLAG_PASSWORD_PROTECTED == NET_PRIVACY_FLAG_PASSWORD_PROTECTED;
|
outData.gameInfo.isPasswordProtected = (ntohs(tmpData->privacyFlags) & NET_PRIVACY_FLAG_PASSWORD_PROTECTED) == NET_PRIVACY_FLAG_PASSWORD_PROTECTED;
|
||||||
|
|
||||||
GetGameInfoData(&tmpData->gameData, outData.gameInfo.data);
|
GetGameInfoData(&tmpData->gameData, outData.gameInfo.data);
|
||||||
|
|
||||||
@@ -5550,6 +5567,92 @@ NetPacketChatText::InternalCheck(const NetPacketHeader* data) const
|
|||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
NetPacketMsgBoxText::NetPacketMsgBoxText()
|
||||||
|
: NetPacket(NET_TYPE_MSG_BOX_TEXT, sizeof(NetPacketMsgBoxTextData), MAX_PACKET_SIZE)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
NetPacketMsgBoxText::~NetPacketMsgBoxText()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
boost::shared_ptr<NetPacket>
|
||||||
|
NetPacketMsgBoxText::Clone() const
|
||||||
|
{
|
||||||
|
boost::shared_ptr<NetPacket> newPacket(new NetPacketMsgBoxText);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
newPacket->SetRawData(GetRawData());
|
||||||
|
} catch (const NetException &)
|
||||||
|
{
|
||||||
|
// Need to return the new packet anyway.
|
||||||
|
}
|
||||||
|
return newPacket;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
NetPacketMsgBoxText::SetData(const NetPacketMsgBoxText::Data &inData)
|
||||||
|
{
|
||||||
|
u_int16_t textLen = (u_int16_t)inData.text.length();
|
||||||
|
|
||||||
|
if (!textLen || textLen > MAX_CHAT_TEXT_SIZE)
|
||||||
|
throw NetException(__FILE__, __LINE__, ERR_NET_INVALID_CHAT_TEXT, 0);
|
||||||
|
|
||||||
|
// Resize the packet so that the data fits in.
|
||||||
|
Resize((u_int16_t)
|
||||||
|
(sizeof(NetPacketMsgBoxTextData) + ADD_PADDING(textLen)));
|
||||||
|
|
||||||
|
NetPacketMsgBoxTextData *tmpData = (NetPacketMsgBoxTextData *)GetRawData();
|
||||||
|
|
||||||
|
// Set the data.
|
||||||
|
tmpData->textLength = htons(textLen);
|
||||||
|
char *textPtr = (char *)tmpData + sizeof(NetPacketMsgBoxTextData);
|
||||||
|
memcpy(textPtr, inData.text.c_str(), textLen);
|
||||||
|
|
||||||
|
// Check the packet - just in case.
|
||||||
|
Check(GetRawData());
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
NetPacketMsgBoxText::GetData(NetPacketMsgBoxText::Data &outData) const
|
||||||
|
{
|
||||||
|
// We assume that the data is valid. Validity has already been checked.
|
||||||
|
NetPacketMsgBoxTextData *tmpData = (NetPacketMsgBoxTextData *)GetRawData();
|
||||||
|
|
||||||
|
char *textPtr = (char *)tmpData + sizeof(NetPacketMsgBoxTextData);
|
||||||
|
outData.text = string(textPtr, ntohs(tmpData->textLength));
|
||||||
|
}
|
||||||
|
|
||||||
|
const NetPacketMsgBoxText *
|
||||||
|
NetPacketMsgBoxText::ToNetPacketMsgBoxText() const
|
||||||
|
{
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
NetPacketMsgBoxText::InternalCheck(const NetPacketHeader* data) const
|
||||||
|
{
|
||||||
|
u_int16_t dataLen = ntohs(data->length);
|
||||||
|
NetPacketMsgBoxTextData *tmpData = (NetPacketMsgBoxTextData *)data;
|
||||||
|
int textLength = ntohs(tmpData->textLength);
|
||||||
|
// Check exact packet length.
|
||||||
|
if (dataLen !=
|
||||||
|
sizeof(NetPacketMsgBoxTextData)
|
||||||
|
+ ADD_PADDING(textLength))
|
||||||
|
{
|
||||||
|
throw NetException(__FILE__, __LINE__, ERR_SOCK_INVALID_PACKET, 0);
|
||||||
|
}
|
||||||
|
// Check string size.
|
||||||
|
if (!textLength
|
||||||
|
|| textLength > MAX_CHAT_TEXT_SIZE)
|
||||||
|
{
|
||||||
|
throw NetException(__FILE__, __LINE__, ERR_SOCK_INVALID_PACKET, 0);
|
||||||
|
}
|
||||||
|
// No more checks required - this packet is sent by the server.
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
NetPacketError::NetPacketError()
|
NetPacketError::NetPacketError()
|
||||||
: NetPacket(NET_TYPE_ERROR, sizeof(NetPacketErrorData), sizeof(NetPacketErrorData))
|
: NetPacket(NET_TYPE_ERROR, sizeof(NetPacketErrorData), sizeof(NetPacketErrorData))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -260,7 +260,7 @@ ServerLobbyThread::RemovePlayer(unsigned playerId, unsigned errorCode)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerLobbyThread::SendGlobalNotice(const std::string &message)
|
ServerLobbyThread::SendGlobalChat(const string &message)
|
||||||
{
|
{
|
||||||
boost::shared_ptr<NetPacket> outChat(new NetPacketChatText);
|
boost::shared_ptr<NetPacket> outChat(new NetPacketChatText);
|
||||||
NetPacketChatText::Data outChatData;
|
NetPacketChatText::Data outChatData;
|
||||||
@@ -270,6 +270,16 @@ ServerLobbyThread::SendGlobalNotice(const std::string &message)
|
|||||||
m_gameSessionManager.SendToAllSessions(GetSender(), outChat, SessionData::Game);
|
m_gameSessionManager.SendToAllSessions(GetSender(), outChat, SessionData::Game);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ServerLobbyThread::SendGlobalMsgBox(const string &message)
|
||||||
|
{
|
||||||
|
boost::shared_ptr<NetPacket> outMsg(new NetPacketMsgBoxText);
|
||||||
|
NetPacketMsgBoxText::Data outMsgData;
|
||||||
|
outMsgData.text = message;
|
||||||
|
static_cast<NetPacketMsgBoxText *>(outMsg.get())->SetData(outMsgData);
|
||||||
|
m_gameSessionManager.SendToAllSessions(GetSender(), outMsg, SessionData::Game);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerLobbyThread::AddComputerPlayer(boost::shared_ptr<PlayerData> player)
|
ServerLobbyThread::AddComputerPlayer(boost::shared_ptr<PlayerData> player)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -147,6 +147,19 @@ ServerManager::SignalIrcChatMsg(const std::string &nickName, const std::string &
|
|||||||
m_ircThread->SendChatMessage(statStream.str());
|
m_ircThread->SendChatMessage(statStream.str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (command == "chat")
|
||||||
|
{
|
||||||
|
while (msgStream.peek() == ' ')
|
||||||
|
msgStream.get();
|
||||||
|
string chat(msgStream.str().substr(msgStream.tellg()));
|
||||||
|
if (!chat.empty())
|
||||||
|
{
|
||||||
|
GetLobbyThread().SendGlobalChat(chat);
|
||||||
|
m_ircThread->SendChatMessage(nickName + ": Global chat message sent.");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
m_ircThread->SendChatMessage(nickName + ": Invalid message.");
|
||||||
|
}
|
||||||
else if (command == "msg")
|
else if (command == "msg")
|
||||||
{
|
{
|
||||||
while (msgStream.peek() == ' ')
|
while (msgStream.peek() == ' ')
|
||||||
@@ -154,8 +167,8 @@ ServerManager::SignalIrcChatMsg(const std::string &nickName, const std::string &
|
|||||||
string message(msgStream.str().substr(msgStream.tellg()));
|
string message(msgStream.str().substr(msgStream.tellg()));
|
||||||
if (!message.empty())
|
if (!message.empty())
|
||||||
{
|
{
|
||||||
GetLobbyThread().SendGlobalNotice(message);
|
GetLobbyThread().SendGlobalMsgBox(message);
|
||||||
m_ircThread->SendChatMessage(nickName + ": Global notice sent.");
|
m_ircThread->SendChatMessage(nickName + ": Global message box sent.");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
m_ircThread->SendChatMessage(nickName + ": Invalid message.");
|
m_ircThread->SendChatMessage(nickName + ": Invalid message.");
|
||||||
|
|||||||
@@ -101,6 +101,7 @@ class NetPacketTimeoutWarning;
|
|||||||
class NetPacketResetTimeout;
|
class NetPacketResetTimeout;
|
||||||
class NetPacketSendChatText;
|
class NetPacketSendChatText;
|
||||||
class NetPacketChatText;
|
class NetPacketChatText;
|
||||||
|
class NetPacketMsgBoxText;
|
||||||
class NetPacketError;
|
class NetPacketError;
|
||||||
|
|
||||||
class NetPacket
|
class NetPacket
|
||||||
@@ -175,6 +176,7 @@ public:
|
|||||||
virtual const NetPacketResetTimeout *ToNetPacketResetTimeout() const;
|
virtual const NetPacketResetTimeout *ToNetPacketResetTimeout() const;
|
||||||
virtual const NetPacketSendChatText *ToNetPacketSendChatText() const;
|
virtual const NetPacketSendChatText *ToNetPacketSendChatText() const;
|
||||||
virtual const NetPacketChatText *ToNetPacketChatText() const;
|
virtual const NetPacketChatText *ToNetPacketChatText() const;
|
||||||
|
virtual const NetPacketMsgBoxText *ToNetPacketMsgBoxText() const;
|
||||||
virtual const NetPacketError *ToNetPacketError() const;
|
virtual const NetPacketError *ToNetPacketError() const;
|
||||||
|
|
||||||
virtual bool IsClientActivity() const {return false;}
|
virtual bool IsClientActivity() const {return false;}
|
||||||
@@ -1522,6 +1524,29 @@ protected:
|
|||||||
virtual void InternalCheck(const NetPacketHeader* data) const;
|
virtual void InternalCheck(const NetPacketHeader* data) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class NetPacketMsgBoxText : public NetPacket
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
struct Data
|
||||||
|
{
|
||||||
|
std::string text;
|
||||||
|
};
|
||||||
|
|
||||||
|
NetPacketMsgBoxText();
|
||||||
|
virtual ~NetPacketMsgBoxText();
|
||||||
|
|
||||||
|
virtual boost::shared_ptr<NetPacket> Clone() const;
|
||||||
|
|
||||||
|
void SetData(const Data &inData);
|
||||||
|
void GetData(Data &outData) const;
|
||||||
|
|
||||||
|
virtual const NetPacketMsgBoxText *ToNetPacketMsgBoxText() const;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
virtual void InternalCheck(const NetPacketHeader* data) const;
|
||||||
|
};
|
||||||
|
|
||||||
class NetPacketError : public NetPacket
|
class NetPacketError : public NetPacket
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|||||||
@@ -70,7 +70,8 @@ public:
|
|||||||
bool KickPlayerByName(const std::string &playerName);
|
bool KickPlayerByName(const std::string &playerName);
|
||||||
void RemovePlayer(unsigned playerId, unsigned errorCode);
|
void RemovePlayer(unsigned playerId, unsigned errorCode);
|
||||||
|
|
||||||
void SendGlobalNotice(const std::string &message);
|
void SendGlobalChat(const std::string &message);
|
||||||
|
void SendGlobalMsgBox(const std::string &message);
|
||||||
|
|
||||||
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);
|
||||||
|
|||||||
Reference in New Issue
Block a user