Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKae <80987908+Novaenia@users.noreply.github.com>2025-04-16 17:10:00 +1000
committerKae <80987908+Novaenia@users.noreply.github.com>2025-04-16 17:10:00 +1000
commitc59fceecf93895c7bd2b2bf9fe327dd79e9d0c51 (patch)
treec69342595e560116a03a35a35f1b0b2fa219f72f
parent7d1beb6ed8d125286ffa61e909f6389ae648e128 (diff)
add optional data for chat messages, for custom Chat panes to read from
-rw-r--r--source/core/StarDataStream.cpp2
-rw-r--r--source/core/StarNetCompatibility.cpp2
-rw-r--r--source/frontend/StarInterfaceLuaBindings.cpp4
-rw-r--r--source/game/StarChatTypes.cpp10
-rw-r--r--source/game/StarChatTypes.hpp2
-rw-r--r--source/game/StarNetPackets.cpp6
-rw-r--r--source/game/StarNetPackets.hpp2
-rw-r--r--source/game/StarSkyParameters.cpp2
-rw-r--r--source/game/StarUniverseClient.cpp7
-rw-r--r--source/game/StarUniverseClient.hpp2
10 files changed, 29 insertions, 10 deletions
diff --git a/source/core/StarDataStream.cpp b/source/core/StarDataStream.cpp
index 7097d63..520129f 100644
--- a/source/core/StarDataStream.cpp
+++ b/source/core/StarDataStream.cpp
@@ -6,7 +6,7 @@
namespace Star {
-unsigned const CurrentStreamVersion = 3;
+unsigned const CurrentStreamVersion = 5; // update OpenProtocolVersion too!
DataStream::DataStream()
: m_byteOrder(ByteOrder::BigEndian),
diff --git a/source/core/StarNetCompatibility.cpp b/source/core/StarNetCompatibility.cpp
index cce74dc..c5c1264 100644
--- a/source/core/StarNetCompatibility.cpp
+++ b/source/core/StarNetCompatibility.cpp
@@ -2,6 +2,6 @@
namespace Star {
-VersionNumber const OpenProtocolVersion = 4;
+VersionNumber const OpenProtocolVersion = 5; // update StreamCompatibilityVersion too!
} \ No newline at end of file
diff --git a/source/frontend/StarInterfaceLuaBindings.cpp b/source/frontend/StarInterfaceLuaBindings.cpp
index cbacb59..085cc4c 100644
--- a/source/frontend/StarInterfaceLuaBindings.cpp
+++ b/source/frontend/StarInterfaceLuaBindings.cpp
@@ -55,9 +55,9 @@ LuaCallbacks LuaBindings::makeChatCallbacks(MainInterface* mainInterface, Univer
auto chat = as<Chat>(mainInterface->paneManager()->registeredPane(MainInterfacePanes::Chat).get());
- callbacks.registerCallback("send", [chat, client](String const& message, Maybe<String> modeName, Maybe<bool> speak) {
+ callbacks.registerCallback("send", [chat, client](String const& message, Maybe<String> modeName, Maybe<bool> speak, Maybe<JsonObject> data) {
auto sendMode = modeName ? ChatSendModeNames.getLeft(*modeName) : ChatSendMode::Broadcast;
- client->sendChat(message, sendMode, speak);
+ client->sendChat(message, sendMode, speak, data);
});
// just for SE compat - this shoulda been a utility callback :moyai:
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();