more misc work

This commit is contained in:
Aaron Kimbre 2025-04-11 09:12:45 -05:00
parent 8364e60799
commit 48d32f2c77
11 changed files with 90 additions and 38 deletions

View File

@ -450,24 +450,21 @@ void ChatPacketHandler::HandleChatMessage(Packet* packet) {
switch (data.channel) { switch (data.channel) {
case eChatChannel::LOCAL: { case eChatChannel::TEAM: {
break; auto* team = Game::playerContainer.GetTeam(data.sender.playerID);
} if (team == nullptr) return;
case eChatChannel::TEAM: { data.teamID = team->teamID;
auto* team = Game::playerContainer.GetTeam(data.sender.playerID);
if (team == nullptr) return;
data.teamID = team->teamID;
for (const auto memberId : team->memberIDs) { for (const auto memberId : team->memberIDs) {
const auto& otherMember = Game::playerContainer.GetPlayerData(memberId); const auto& otherMember = Game::playerContainer.GetPlayerData(memberId);
if (!otherMember) return; if (!otherMember) return;
SendPrivateChatMessage(data.sender, otherMember, otherMember, data.message, eChatChannel::TEAM, eChatMessageResponseCode::SENT); SendPrivateChatMessage(data.sender, otherMember, otherMember, data.message, eChatChannel::TEAM, eChatMessageResponseCode::SENT);
}
break;
} }
break; default:
} LOG_DEBUG("Unhandled Chat channel [%s]", StringifiedEnum::ToString(data.channel).data());
default: break;
LOG("Unhandled Chat channel [%s]", StringifiedEnum::ToString(data.channel).data());
break;
} }
ChatWeb::SendWSChatMessage(data); ChatWeb::SendWSChatMessage(data);
} }

View File

@ -150,12 +150,9 @@ namespace ChatWeb {
json data; json data;
data["message"] = chatMessage.message.GetAsString(); data["message"] = chatMessage.message.GetAsString();
data["sender"] = chatMessage.sender; data["sender"] = chatMessage.sender;
data["channel"] = magic_enum::enum_name(chatMessage.channel); data["channel"] = magic_enum::enum_name(chatMessage.channel);
switch (chatMessage.channel) { switch (chatMessage.channel) {
case eChatChannel::LOCAL:
break;
case eChatChannel::TEAM: case eChatChannel::TEAM:
data["teamID"] = chatMessage.teamID; data["teamID"] = chatMessage.teamID;
break; break;

View File

@ -61,6 +61,9 @@ struct LUBitStream {
void WriteHeader(RakNet::BitStream& bitStream) const; void WriteHeader(RakNet::BitStream& bitStream) const;
bool ReadHeader(RakNet::BitStream& bitStream); bool ReadHeader(RakNet::BitStream& bitStream);
void Send(const SystemAddress& sysAddr) const; void Send(const SystemAddress& sysAddr) const;
void Broadcast() const {
Send(UNASSIGNED_SYSTEM_ADDRESS);
};
virtual void Serialize(RakNet::BitStream& bitStream) const {} virtual void Serialize(RakNet::BitStream& bitStream) const {}
virtual bool Deserialize(RakNet::BitStream& bitStream) { return true; } virtual bool Deserialize(RakNet::BitStream& bitStream) { return true; }

View File

@ -54,6 +54,55 @@ namespace ChatPackets {
//TODO: Implement this //TODO: Implement this
return false; return false;
} }
void ChatMessage::Handle(){
}
void WorldChatMessage::Serialize(RakNet::BitStream& bitStream) const {
}
bool WorldChatMessage::Deserialize(RakNet::BitStream& inStream) {
VALIDATE_READ(inStream.Read(chatChannel));
uint16_t padding;
VALIDATE_READ(inStream.Read(padding));
uint32_t messageLength;
VALIDATE_READ(inStream.Read(messageLength));
string message_tmp;
for (uint32_t i = 0; i < messageLength; ++i) {
uint16_t character;
VALIDATE_READ(inStream.Read(character));
message_tmp.push_back(character);
}
return true;
}
void WorldChatMessage::Handle() {
}
void PrivateChatMessage::Serialize(RakNet::BitStream& bitStream) const {
}
bool PrivateChatMessage::Deserialize(RakNet::BitStream& inStream) {
}
void PrivateChatMessage::Handle() {
}
void UserChatMessage::Serialize(RakNet::BitStream& bitStream) const {
}
bool UserChatMessage::Deserialize(RakNet::BitStream& inStream) {
}
void UserChatMessage::Handle() {
}
void SendSystemMessage(const SystemAddress& sysAddr, const std::u16string& message, const bool broadcast) { void SendSystemMessage(const SystemAddress& sysAddr, const std::u16string& message, const bool broadcast) {
CBITSTREAM; CBITSTREAM;

View File

@ -61,6 +61,25 @@ namespace ChatPackets {
ChatMessage() : LUBitStream(eConnectionType::CHAT, MessageType::Chat::GENERAL_CHAT_MESSAGE) {}; ChatMessage() : LUBitStream(eConnectionType::CHAT, MessageType::Chat::GENERAL_CHAT_MESSAGE) {};
virtual void Serialize(RakNet::BitStream& bitStream) const override; virtual void Serialize(RakNet::BitStream& bitStream) const override;
virtual bool Deserialize(RakNet::BitStream& inStream) override; virtual bool Deserialize(RakNet::BitStream& inStream) override;
virtual void Handle() override {};
};
struct WorldChatMessage : public ChatMessage {
virtual bool Deserialize(RakNet::BitStream& bitStream) override;
virtual void Serialize(RakNet::BitStream& bitStream) const override;
virtual void Handle() override;
};
struct PrivateChatMessage : public ChatMessage {
virtual bool Deserialize(RakNet::BitStream& inStream) override;
virtual void Serialize(RakNet::BitStream& bitStream) const override;
virtual void Handle() override;
};
struct UserChatMessage : public ChatMessage {
virtual bool Deserialize(RakNet::BitStream& inStream) override;
virtual void Serialize(RakNet::BitStream& bitStream) const override;
virtual void Handle() override;
}; };
// Should be in client packets since it is a client connection type, but whatever // Should be in client packets since it is a client connection type, but whatever

View File

@ -13,12 +13,6 @@ class PositionUpdate;
struct Packet; struct Packet;
struct ChatMessage {
uint8_t chatChannel = 0;
uint16_t unknown = 0;
std::u16string message;
};
struct ChatModerationRequest { struct ChatModerationRequest {
uint8_t chatLevel = 0; uint8_t chatLevel = 0;
uint8_t requestID = 0; uint8_t requestID = 0;
@ -27,7 +21,6 @@ struct ChatModerationRequest {
}; };
namespace ClientPackets { namespace ClientPackets {
ChatMessage HandleChatMessage(Packet* packet);
PositionUpdate HandleClientPositionUpdate(Packet* packet); PositionUpdate HandleClientPositionUpdate(Packet* packet);
ChatModerationRequest HandleChatModerationRequest(Packet* packet); ChatModerationRequest HandleChatModerationRequest(Packet* packet);
int32_t SendTop5HelpIssues(Packet* packet); int32_t SendTop5HelpIssues(Packet* packet);

View File

@ -10,9 +10,6 @@ struct SystemAddress;
enum class eGameMasterLevel : uint8_t; enum class eGameMasterLevel : uint8_t;
enum class eCharacterCreationResponse : uint8_t; enum class eCharacterCreationResponse : uint8_t;
enum class eRenameResponse : uint8_t; enum class eRenameResponse : uint8_t;
namespace RakNet {
class BitStream;
};
struct HTTPMonitorInfo { struct HTTPMonitorInfo {
uint16_t port = 80; uint16_t port = 80;

View File

@ -1321,7 +1321,7 @@ void HandlePacket(Packet* packet) {
if (chatDisabled) { if (chatDisabled) {
ChatPackets::MessageFailure().Send(packet->systemAddress); ChatPackets::MessageFailure().Send(packet->systemAddress);
} else { } else {
auto chatMessage = ClientPackets::HandleChatMessage(packet); ChatPackets::WorldChatMessage inChatMessage;
// TODO: Find a good home for the logic in this case. // TODO: Find a good home for the logic in this case.
User* user = UserManager::Instance()->GetUser(packet->systemAddress); User* user = UserManager::Instance()->GetUser(packet->systemAddress);
if (!user) { if (!user) {
@ -1342,15 +1342,12 @@ void HandlePacket(Packet* packet) {
std::string sMessage = GeneralUtils::UTF16ToWTF8(chatMessage.message); std::string sMessage = GeneralUtils::UTF16ToWTF8(chatMessage.message);
LOG("%s: %s", playerName.c_str(), sMessage.c_str()); LOG("%s: %s", playerName.c_str(), sMessage.c_str());
//(packet->systemAddress, chatMessage.chatChannel, playerName, user->GetLoggedInChar(), isMythran, chatMessage.message);
ChatPackets::ChatMessage outChatMessage; ChatPackets::ChatMessage outChatMessage;
outChatMessage.chatChannel = chatMessage.chatChannel; outChatMessage.chatChannel = chatMessage.chatChannel;
outChatMessage.message = chatMessage.message; outChatMessage.message = chatMessage.message;
outChatMessage.senderMythran = isMythran;
outChatMessage.senderName = playerName; outChatMessage.Broadcast();
outChatMessage.playerObjectID = user->GetLoggedInChar();
outChatMessage.Send(packet->systemAddress);
{ {
// TODO: make it so we don't write this manually, but instead use a proper read and writes // TODO: make it so we don't write this manually, but instead use a proper read and writes