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

summaryrefslogtreecommitdiff
path: root/source/game
diff options
context:
space:
mode:
authorKae <80987908+Novaenia@users.noreply.github.com>2025-04-17 06:26:26 +1000
committerKae <80987908+Novaenia@users.noreply.github.com>2025-04-17 06:26:26 +1000
commit6b548c17e20c5d6c5cc154d300a7a4c4ed42984c (patch)
tree40e57a6904f0f66331ed77db0338581461e2a8ea /source/game
parentc59fceecf93895c7bd2b2bf9fe327dd79e9d0c51 (diff)
actually pass along chat user data
Diffstat (limited to 'source/game')
-rw-r--r--source/game/StarChatProcessor.cpp18
-rw-r--r--source/game/StarChatProcessor.hpp6
-rw-r--r--source/game/StarUniverseServer.cpp17
-rw-r--r--source/game/StarUniverseServer.hpp2
4 files changed, 28 insertions, 15 deletions
diff --git a/source/game/StarChatProcessor.cpp b/source/game/StarChatProcessor.cpp
index 2082529..0dd0c48 100644
--- a/source/game/StarChatProcessor.cpp
+++ b/source/game/StarChatProcessor.cpp
@@ -122,7 +122,7 @@ StringList ChatProcessor::activeChannels() const {
return channels;
}
-void ChatProcessor::broadcast(ConnectionId sourceConnectionId, String const& text) {
+void ChatProcessor::broadcast(ConnectionId sourceConnectionId, String const& text, JsonObject data) {
RecursiveMutexLocker locker(m_mutex);
ChatReceivedMessage message = {
@@ -132,6 +132,8 @@ void ChatProcessor::broadcast(ConnectionId sourceConnectionId, String const& tex
text
};
+ message.data = std::move(data);
+
if (handleCommand(message))
return;
@@ -139,7 +141,7 @@ void ChatProcessor::broadcast(ConnectionId sourceConnectionId, String const& tex
pair.second.pendingMessages.append(message);
}
-void ChatProcessor::message(ConnectionId sourceConnectionId, MessageContext::Mode mode, String const& channelName, String const& text) {
+void ChatProcessor::message(ConnectionId sourceConnectionId, MessageContext::Mode mode, String const& channelName, String const& text, JsonObject data) {
RecursiveMutexLocker locker(m_mutex);
ChatReceivedMessage message = {
@@ -149,6 +151,8 @@ void ChatProcessor::message(ConnectionId sourceConnectionId, MessageContext::Mod
text
};
+ message.data = std::move(data);
+
if (handleCommand(message))
return;
@@ -158,11 +162,17 @@ void ChatProcessor::message(ConnectionId sourceConnectionId, MessageContext::Mod
}
}
-void ChatProcessor::whisper(ConnectionId sourceConnectionId, ConnectionId targetClientId, String const& text) {
+void ChatProcessor::whisper(ConnectionId sourceConnectionId, ConnectionId targetClientId, String const& text, JsonObject data) {
RecursiveMutexLocker locker(m_mutex);
ChatReceivedMessage message = {
- {MessageContext::Whisper}, sourceConnectionId, connectionNick(sourceConnectionId), text};
+ {MessageContext::Whisper},
+ sourceConnectionId,
+ connectionNick(sourceConnectionId),
+ text
+ };
+
+ message.data = std::move(data);
if (handleCommand(message))
return;
diff --git a/source/game/StarChatProcessor.hpp b/source/game/StarChatProcessor.hpp
index 89bb5f5..1c42b75 100644
--- a/source/game/StarChatProcessor.hpp
+++ b/source/game/StarChatProcessor.hpp
@@ -41,9 +41,9 @@ public:
StringList clientChannels(ConnectionId clientId) const;
StringList activeChannels() const;
- void broadcast(ConnectionId sourceConnectionId, String const& text);
- void message(ConnectionId sourceConnectionId, MessageContext::Mode context, String const& channelName, String const& text);
- void whisper(ConnectionId sourceConnectionId, ConnectionId targetClientId, String const& text);
+ void broadcast(ConnectionId sourceConnectionId, String const& text, JsonObject data = {});
+ void message(ConnectionId sourceConnectionId, MessageContext::Mode context, String const& channelName, String const& text, JsonObject data = {});
+ void whisper(ConnectionId sourceConnectionId, ConnectionId targetClientId, String const& text, JsonObject data = {});
// Shorthand for passing ServerConnectionId as sourceConnectionId to
// broadcast / message / whisper
diff --git a/source/game/StarUniverseServer.cpp b/source/game/StarUniverseServer.cpp
index f32f650..977dc71 100644
--- a/source/game/StarUniverseServer.cpp
+++ b/source/game/StarUniverseServer.cpp
@@ -1064,16 +1064,19 @@ void UniverseServer::processChat() {
for (auto const& p : take(m_pendingChat)) {
if (auto clientContext = m_clients.get(p.first)) {
for (auto const& chat : p.second) {
+ auto& message = get<0>(chat);
+ auto sendMode = get<1>(chat);
+ auto& data = get<2>(chat);
if (clientContext->remoteAddress())
- Logger::info("Chat: <{}> {}", clientContext->playerName(), chat.first);
+ Logger::info("Chat: <{}> {}", clientContext->playerName(), message);
auto team = m_teamManager->getTeam(clientContext->playerUuid());
- if (chat.second == ChatSendMode::Broadcast)
- m_chatProcessor->broadcast(p.first, chat.first);
- else if (chat.second == ChatSendMode::Party && team.isValid())
- m_chatProcessor->message(p.first, MessageContext::Mode::Party, team.value().hex(), chat.first);
+ if (sendMode == ChatSendMode::Broadcast)
+ m_chatProcessor->broadcast(p.first, message, std::move(data));
+ else if (sendMode == ChatSendMode::Party && team.isValid())
+ m_chatProcessor->message(p.first, MessageContext::Mode::Party, team.value().hex(), message, std::move(data));
else
- m_chatProcessor->message(p.first, MessageContext::Mode::Local, printWorldId(clientContext->playerWorldId()), chat.first);
+ m_chatProcessor->message(p.first, MessageContext::Mode::Local, printWorldId(clientContext->playerWorldId()), message, std::move(data));
}
}
}
@@ -1527,7 +1530,7 @@ void UniverseServer::packetsReceived(UniverseConnectionServer*, ConnectionId cli
} else if (auto chatSend = as<ChatSendPacket>(packet)) {
RecursiveMutexLocker locker(m_mainLock);
- m_pendingChat[clientId].append({std::move(chatSend->text), chatSend->sendMode});
+ m_pendingChat[clientId].append(make_tuple(std::move(chatSend->text), chatSend->sendMode, std::move(chatSend->data)));
} else if (auto clientContextUpdatePacket = as<ClientContextUpdatePacket>(packet)) {
clientContext->readUpdate(std::move(clientContextUpdatePacket->updateData));
diff --git a/source/game/StarUniverseServer.hpp b/source/game/StarUniverseServer.hpp
index f3db6fc..ddf7d0c 100644
--- a/source/game/StarUniverseServer.hpp
+++ b/source/game/StarUniverseServer.hpp
@@ -254,7 +254,7 @@ private:
HashMap<ConnectionId, String> m_pendingDisconnections;
HashMap<ConnectionId, List<WorkerPoolPromise<CelestialResponse>>> m_pendingCelestialRequests;
List<pair<WorldId, UniverseFlagAction>> m_pendingFlagActions;
- HashMap<ConnectionId, List<pair<String, ChatSendMode>>> m_pendingChat;
+ HashMap<ConnectionId, List<tuple<String, ChatSendMode, JsonObject>>> m_pendingChat;
Maybe<WorkerPoolPromise<CelestialCoordinate>> m_nextRandomizedStarterWorld;
Map<WorldId, List<WorldServerThread::Message>> m_pendingWorldMessages;