mirror of
https://github.com/luanti-org/luanti.git
synced 2025-07-02 16:38:41 +00:00
Chat protocol rewrite (#5117)
* New TOCLIENT_CHAT_MESSAGE packet * Rename old packet to TOCLIENT_CHAT_MESSAGE_OLD for compat * Handle TOCLIENT_CHAT_MESSAGE new structure client side * Client chat queue should use a specific object * SendChatMessage: use the right packet depending on protocol version (not complete yet) * Add chatmessage(type) objects and handle them client side (partially) * Use ChatMessage instead of std::wstring server side * Update with timestamp support
This commit is contained in:
parent
ecbc972ea6
commit
7ddf67aa14
16 changed files with 251 additions and 51 deletions
|
@ -20,6 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
#include "client.h"
|
||||
|
||||
#include "util/base64.h"
|
||||
#include "chatmessage.h"
|
||||
#include "clientmedia.h"
|
||||
#include "log.h"
|
||||
#include "map.h"
|
||||
|
@ -142,7 +143,9 @@ void Client::handleCommand_AcceptSudoMode(NetworkPacket* pkt)
|
|||
}
|
||||
void Client::handleCommand_DenySudoMode(NetworkPacket* pkt)
|
||||
{
|
||||
pushToChatQueue(L"Password change denied. Password NOT changed.");
|
||||
ChatMessage *chatMessage = new ChatMessage(CHATMESSAGE_TYPE_SYSTEM,
|
||||
L"Password change denied. Password NOT changed.");
|
||||
pushToChatQueue(chatMessage);
|
||||
// reset everything and be sad
|
||||
deleteAuthData();
|
||||
}
|
||||
|
@ -395,7 +398,7 @@ void Client::handleCommand_TimeOfDay(NetworkPacket* pkt)
|
|||
<< " dr=" << dr << std::endl;
|
||||
}
|
||||
|
||||
void Client::handleCommand_ChatMessage(NetworkPacket* pkt)
|
||||
void Client::handleCommand_ChatMessageOld(NetworkPacket *pkt)
|
||||
{
|
||||
/*
|
||||
u16 command
|
||||
|
@ -413,8 +416,43 @@ void Client::handleCommand_ChatMessage(NetworkPacket* pkt)
|
|||
}
|
||||
|
||||
// If chat message not consummed by client lua API
|
||||
// @TODO send this to CSM using ChatMessage object
|
||||
if (!moddingEnabled() || !m_script->on_receiving_message(wide_to_utf8(message))) {
|
||||
pushToChatQueue(message);
|
||||
pushToChatQueue(new ChatMessage(message));
|
||||
}
|
||||
}
|
||||
|
||||
void Client::handleCommand_ChatMessage(NetworkPacket *pkt)
|
||||
{
|
||||
/*
|
||||
u8 version
|
||||
u8 message_type
|
||||
u16 sendername length
|
||||
wstring sendername
|
||||
u16 length
|
||||
wstring message
|
||||
*/
|
||||
|
||||
ChatMessage *chatMessage = new ChatMessage();
|
||||
u8 version, message_type;
|
||||
*pkt >> version >> message_type;
|
||||
|
||||
if (version != 1 || message_type >= CHATMESSAGE_TYPE_MAX) {
|
||||
delete chatMessage;
|
||||
return;
|
||||
}
|
||||
|
||||
*pkt >> chatMessage->sender >> chatMessage->message >> chatMessage->timestamp;
|
||||
|
||||
chatMessage->type = (ChatMessageType) message_type;
|
||||
|
||||
// @TODO send this to CSM using ChatMessage object
|
||||
if (!moddingEnabled() || !m_script->on_receiving_message(
|
||||
wide_to_utf8(chatMessage->message))) {
|
||||
pushToChatQueue(chatMessage);
|
||||
} else {
|
||||
// Message was consumed by CSM and should not handled by client, destroying
|
||||
delete chatMessage;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue