diff options
author | Kae <80987908+Novaenia@users.noreply.github.com> | 2025-04-16 17:10:00 +1000 |
---|---|---|
committer | Kae <80987908+Novaenia@users.noreply.github.com> | 2025-04-16 17:10:00 +1000 |
commit | c59fceecf93895c7bd2b2bf9fe327dd79e9d0c51 (patch) | |
tree | c69342595e560116a03a35a35f1b0b2fa219f72f /source/game | |
parent | 7d1beb6ed8d125286ffa61e909f6389ae648e128 (diff) |
add optional data for chat messages, for custom Chat panes to read from
Diffstat (limited to 'source/game')
-rw-r--r-- | source/game/StarChatTypes.cpp | 10 | ||||
-rw-r--r-- | source/game/StarChatTypes.hpp | 2 | ||||
-rw-r--r-- | source/game/StarNetPackets.cpp | 6 | ||||
-rw-r--r-- | source/game/StarNetPackets.hpp | 2 | ||||
-rw-r--r-- | source/game/StarSkyParameters.cpp | 2 | ||||
-rw-r--r-- | source/game/StarUniverseClient.cpp | 7 | ||||
-rw-r--r-- | source/game/StarUniverseClient.hpp | 2 |
7 files changed, 25 insertions, 6 deletions
diff --git a/source/game/StarChatTypes.cpp b/source/game/StarChatTypes.cpp index 79dfc4f..56fa6d9 100644 --- a/source/game/StarChatTypes.cpp +++ b/source/game/StarChatTypes.cpp @@ -56,6 +56,7 @@ ChatReceivedMessage::ChatReceivedMessage(Json const& json) : ChatReceivedMessage fromNick = json.getString("fromNick", ""); portrait = json.getString("portrait", ""); text = json.getString("text", ""); + data = json.getObject("data", JsonObject()); } Json ChatReceivedMessage::toJson() const { @@ -67,7 +68,8 @@ Json ChatReceivedMessage::toJson() const { {"fromConnection", fromConnection}, {"fromNick", fromNick.empty() ? Json() : fromNick}, {"portrait", portrait.empty() ? Json() : portrait}, - {"text", text} + {"text", text}, + {"data", data} }; } @@ -78,7 +80,8 @@ DataStream& operator>>(DataStream& ds, ChatReceivedMessage& receivedMessage) { ds.read(receivedMessage.fromNick); ds.read(receivedMessage.portrait); ds.read(receivedMessage.text); - + if (ds.streamCompatibilityVersion() >= 5) + ds.read(receivedMessage.data); return ds; } @@ -88,7 +91,8 @@ DataStream& operator<<(DataStream& ds, ChatReceivedMessage const& receivedMessag ds.write(receivedMessage.fromNick); ds.write(receivedMessage.portrait); ds.write(receivedMessage.text); - + if (ds.streamCompatibilityVersion() >= 5) + ds.write(receivedMessage.data); return ds; } diff --git a/source/game/StarChatTypes.hpp b/source/game/StarChatTypes.hpp index 3feb413..3c23d7c 100644 --- a/source/game/StarChatTypes.hpp +++ b/source/game/StarChatTypes.hpp @@ -55,6 +55,8 @@ struct ChatReceivedMessage { String portrait; String text; + + JsonObject data; }; DataStream& operator>>(DataStream& ds, ChatReceivedMessage& receivedMessage); diff --git a/source/game/StarNetPackets.cpp b/source/game/StarNetPackets.cpp index dfe3ff1..0b9f6a3 100644 --- a/source/game/StarNetPackets.cpp +++ b/source/game/StarNetPackets.cpp @@ -495,14 +495,20 @@ ChatSendPacket::ChatSendPacket() : sendMode(ChatSendMode::Broadcast) {} ChatSendPacket::ChatSendPacket(String text, ChatSendMode sendMode) : text(std::move(text)), sendMode(sendMode) {} +ChatSendPacket::ChatSendPacket(String text, ChatSendMode sendMode, JsonObject data) : text(std::move(text)), sendMode(sendMode), data(std::move(data)) {} + void ChatSendPacket::read(DataStream& ds) { ds.read(text); ds.read(sendMode); + if (ds.streamCompatibilityVersion() >= 5) + ds.read(data); } void ChatSendPacket::write(DataStream& ds) const { ds.write(text); ds.write(sendMode); + if (ds.streamCompatibilityVersion() >= 5) + ds.write(data); } CelestialRequestPacket::CelestialRequestPacket() {} diff --git a/source/game/StarNetPackets.hpp b/source/game/StarNetPackets.hpp index 349191f..f2bd99d 100644 --- a/source/game/StarNetPackets.hpp +++ b/source/game/StarNetPackets.hpp @@ -371,12 +371,14 @@ struct FlyShipPacket : PacketBase<PacketType::FlyShip> { struct ChatSendPacket : PacketBase<PacketType::ChatSend> { ChatSendPacket(); ChatSendPacket(String text, ChatSendMode sendMode); + ChatSendPacket(String text, ChatSendMode sendMode, JsonObject data); void read(DataStream& ds) override; void write(DataStream& ds) const override; String text; ChatSendMode sendMode; + JsonObject data; }; struct CelestialRequestPacket : PacketBase<PacketType::CelestialRequest> { diff --git a/source/game/StarSkyParameters.cpp b/source/game/StarSkyParameters.cpp index e2ed885..3d540b8 100644 --- a/source/game/StarSkyParameters.cpp +++ b/source/game/StarSkyParameters.cpp @@ -175,6 +175,8 @@ void SkyParameters::read(DataStream& ds) { ds >> sunType; if (ds.streamCompatibilityVersion() >= 3) ds >> settings; + else + settings = JsonObject(); } void SkyParameters::write(DataStream& ds) const { diff --git a/source/game/StarUniverseClient.cpp b/source/game/StarUniverseClient.cpp index af33508..f33c953 100644 --- a/source/game/StarUniverseClient.cpp +++ b/source/game/StarUniverseClient.cpp @@ -484,10 +484,13 @@ bool UniverseClient::flying() const { return false; } -void UniverseClient::sendChat(String const& text, ChatSendMode sendMode, Maybe<bool> speak) { +void UniverseClient::sendChat(String const& text, ChatSendMode sendMode, Maybe<bool> speak, Maybe<JsonObject> data) { if (speak.value(!text.beginsWith("/"))) m_mainPlayer->addChatMessage(text); - m_connection->pushSingle(make_shared<ChatSendPacket>(text, sendMode)); + auto packet = make_shared<ChatSendPacket>(text, sendMode); + if (data) + packet->data = std::move(*data); + m_connection->pushSingle(packet); } List<ChatReceivedMessage> UniverseClient::pullChatMessages() { diff --git a/source/game/StarUniverseClient.hpp b/source/game/StarUniverseClient.hpp index b770b07..1cb3bfa 100644 --- a/source/game/StarUniverseClient.hpp +++ b/source/game/StarUniverseClient.hpp @@ -80,7 +80,7 @@ public: SkyConstPtr currentSky() const; bool flying() const; - void sendChat(String const& text, ChatSendMode sendMode, Maybe<bool> speak = {}); + void sendChat(String const& text, ChatSendMode sendMode, Maybe<bool> speak = {}, Maybe<JsonObject> data = {}); List<ChatReceivedMessage> pullChatMessages(); uint16_t players(); |