diff --git a/dChatServer/ChatPacketHandler.cpp b/dChatServer/ChatPacketHandler.cpp index 5c85bb8a..1d37df14 100644 --- a/dChatServer/ChatPacketHandler.cpp +++ b/dChatServer/ChatPacketHandler.cpp @@ -450,24 +450,21 @@ void ChatPacketHandler::HandleChatMessage(Packet* packet) { switch (data.channel) { - case eChatChannel::LOCAL: { - break; - } - case eChatChannel::TEAM: { - auto* team = Game::playerContainer.GetTeam(data.sender.playerID); - if (team == nullptr) return; - data.teamID = team->teamID; + case eChatChannel::TEAM: { + auto* team = Game::playerContainer.GetTeam(data.sender.playerID); + if (team == nullptr) return; + data.teamID = team->teamID; - for (const auto memberId : team->memberIDs) { - const auto& otherMember = Game::playerContainer.GetPlayerData(memberId); - if (!otherMember) return; - SendPrivateChatMessage(data.sender, otherMember, otherMember, data.message, eChatChannel::TEAM, eChatMessageResponseCode::SENT); + for (const auto memberId : team->memberIDs) { + const auto& otherMember = Game::playerContainer.GetPlayerData(memberId); + if (!otherMember) return; + SendPrivateChatMessage(data.sender, otherMember, otherMember, data.message, eChatChannel::TEAM, eChatMessageResponseCode::SENT); + } + break; } - break; - } - default: - LOG("Unhandled Chat channel [%s]", StringifiedEnum::ToString(data.channel).data()); - break; + default: + LOG_DEBUG("Unhandled Chat channel [%s]", StringifiedEnum::ToString(data.channel).data()); + break; } ChatWeb::SendWSChatMessage(data); } diff --git a/dChatServer/ChatWeb.cpp b/dChatServer/ChatWeb.cpp index 590ea4b0..e3e6f313 100644 --- a/dChatServer/ChatWeb.cpp +++ b/dChatServer/ChatWeb.cpp @@ -150,12 +150,9 @@ namespace ChatWeb { json data; data["message"] = chatMessage.message.GetAsString(); data["sender"] = chatMessage.sender; - data["channel"] = magic_enum::enum_name(chatMessage.channel); switch (chatMessage.channel) { - case eChatChannel::LOCAL: - break; case eChatChannel::TEAM: data["teamID"] = chatMessage.teamID; break; diff --git a/dCommon/dEnums/eChatMessageResponseCode.h b/dCommon/dEnums/eChatMessageResponseCode.h index 771b2c89..9fb2d9b6 100644 --- a/dCommon/dEnums/eChatMessageResponseCode.h +++ b/dCommon/dEnums/eChatMessageResponseCode.h @@ -12,4 +12,4 @@ enum class eChatMessageResponseCode : uint8_t { RECEIVERFREETRIAL, }; -#endif //!__ECHATMESSAGERESPONSECODES__H__ \ No newline at end of file +#endif //!__ECHATMESSAGERESPONSECODES__H__ diff --git a/dNet/BitStreamUtils.h b/dNet/BitStreamUtils.h index d9e9bc9b..ccd15a77 100644 --- a/dNet/BitStreamUtils.h +++ b/dNet/BitStreamUtils.h @@ -61,6 +61,9 @@ struct LUBitStream { void WriteHeader(RakNet::BitStream& bitStream) const; bool ReadHeader(RakNet::BitStream& bitStream); void Send(const SystemAddress& sysAddr) const; + void Broadcast() const { + Send(UNASSIGNED_SYSTEM_ADDRESS); + }; virtual void Serialize(RakNet::BitStream& bitStream) const {} virtual bool Deserialize(RakNet::BitStream& bitStream) { return true; } diff --git a/dNet/ChatPackets.cpp b/dNet/ChatPackets.cpp index 2500917d..c0719181 100644 --- a/dNet/ChatPackets.cpp +++ b/dNet/ChatPackets.cpp @@ -54,6 +54,55 @@ namespace ChatPackets { //TODO: Implement this 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) { CBITSTREAM; diff --git a/dNet/ChatPackets.h b/dNet/ChatPackets.h index a425f2f4..877f5477 100644 --- a/dNet/ChatPackets.h +++ b/dNet/ChatPackets.h @@ -61,6 +61,25 @@ namespace ChatPackets { ChatMessage() : LUBitStream(eConnectionType::CHAT, MessageType::Chat::GENERAL_CHAT_MESSAGE) {}; virtual void Serialize(RakNet::BitStream& bitStream) const 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 diff --git a/dNet/ClientPackets.h b/dNet/ClientPackets.h index a7d2941b..386980c0 100644 --- a/dNet/ClientPackets.h +++ b/dNet/ClientPackets.h @@ -13,12 +13,6 @@ class PositionUpdate; struct Packet; -struct ChatMessage { - uint8_t chatChannel = 0; - uint16_t unknown = 0; - std::u16string message; -}; - struct ChatModerationRequest { uint8_t chatLevel = 0; uint8_t requestID = 0; @@ -27,7 +21,6 @@ struct ChatModerationRequest { }; namespace ClientPackets { - ChatMessage HandleChatMessage(Packet* packet); PositionUpdate HandleClientPositionUpdate(Packet* packet); ChatModerationRequest HandleChatModerationRequest(Packet* packet); int32_t SendTop5HelpIssues(Packet* packet); diff --git a/dNet/WorldPackets.cpp b/dNet/WorldPackets.cpp index 512f2265..c825d307 100644 --- a/dNet/WorldPackets.cpp +++ b/dNet/WorldPackets.cpp @@ -183,4 +183,4 @@ void WorldPackets::SendDebugOuput(const SystemAddress& sysAddr, const std::strin bitStream.Write(data.size()); bitStream.Write(data); SEND_PACKET; -} +} \ No newline at end of file diff --git a/dNet/WorldPackets.h b/dNet/WorldPackets.h index 0da98604..e930490d 100644 --- a/dNet/WorldPackets.h +++ b/dNet/WorldPackets.h @@ -10,9 +10,6 @@ struct SystemAddress; enum class eGameMasterLevel : uint8_t; enum class eCharacterCreationResponse : uint8_t; enum class eRenameResponse : uint8_t; -namespace RakNet { - class BitStream; -}; struct HTTPMonitorInfo { uint16_t port = 80; diff --git a/dWeb/Web.cpp b/dWeb/Web.cpp index 0578b89f..ed357ca2 100644 --- a/dWeb/Web.cpp +++ b/dWeb/Web.cpp @@ -286,4 +286,4 @@ void Web::SendWSMessage(const std::string subscription, json& data) { mg_ws_send(wc, data.dump().c_str(), data.dump().size(), WEBSOCKET_OP_TEXT); } } -} \ No newline at end of file +} diff --git a/dWorldServer/WorldServer.cpp b/dWorldServer/WorldServer.cpp index bd822940..865ed7a8 100644 --- a/dWorldServer/WorldServer.cpp +++ b/dWorldServer/WorldServer.cpp @@ -1321,7 +1321,7 @@ void HandlePacket(Packet* packet) { if (chatDisabled) { ChatPackets::MessageFailure().Send(packet->systemAddress); } else { - auto chatMessage = ClientPackets::HandleChatMessage(packet); + ChatPackets::WorldChatMessage inChatMessage; // TODO: Find a good home for the logic in this case. User* user = UserManager::Instance()->GetUser(packet->systemAddress); if (!user) { @@ -1342,15 +1342,12 @@ void HandlePacket(Packet* packet) { std::string sMessage = GeneralUtils::UTF16ToWTF8(chatMessage.message); LOG("%s: %s", playerName.c_str(), sMessage.c_str()); - //(packet->systemAddress, chatMessage.chatChannel, playerName, user->GetLoggedInChar(), isMythran, chatMessage.message); ChatPackets::ChatMessage outChatMessage; outChatMessage.chatChannel = chatMessage.chatChannel; outChatMessage.message = chatMessage.message; - outChatMessage.senderMythran = isMythran; - outChatMessage.senderName = playerName; - outChatMessage.playerObjectID = user->GetLoggedInChar(); - outChatMessage.Send(packet->systemAddress); + + outChatMessage.Broadcast(); { // TODO: make it so we don't write this manually, but instead use a proper read and writes