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

summaryrefslogtreecommitdiff
path: root/source/game/StarChatTypes.cpp
blob: 56fa6d95973d381b46de8ca80e6d000bc9a47ef7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#include "StarChatTypes.hpp"

namespace Star {

EnumMap<ChatSendMode> const ChatSendModeNames{
    {ChatSendMode::Broadcast, "Broadcast"},
    {ChatSendMode::Local, "Local"},
    {ChatSendMode::Party, "Party"}
  };

MessageContext::MessageContext() : mode() {}

MessageContext::MessageContext(Mode mode) : mode(mode) {}

MessageContext::MessageContext(Mode mode, String const& channelName) : mode(mode), channelName(channelName) {}

EnumMap<MessageContext::Mode> const MessageContextModeNames{
    {MessageContext::Mode::Local, "Local"},
    {MessageContext::Mode::Party, "Party"},
    {MessageContext::Mode::Broadcast, "Broadcast"},
    {MessageContext::Mode::Whisper, "Whisper"},
    {MessageContext::Mode::CommandResult, "CommandResult"},
    {MessageContext::Mode::RadioMessage, "RadioMessage"},
    {MessageContext::Mode::World, "World"}
  };

DataStream& operator>>(DataStream& ds, MessageContext& messageContext) {
  ds.read(messageContext.mode);
  ds.read(messageContext.channelName);

  return ds;
}

DataStream& operator<<(DataStream& ds, MessageContext const& messageContext) {
  ds.write(messageContext.mode);
  ds.write(messageContext.channelName);

  return ds;
}

ChatReceivedMessage::ChatReceivedMessage() : fromConnection() {}

ChatReceivedMessage::ChatReceivedMessage(MessageContext context, ConnectionId fromConnection, String const& fromNick, String const& text)
  : context(context), fromConnection(fromConnection), fromNick(fromNick), text(text) {}

ChatReceivedMessage::ChatReceivedMessage(MessageContext context, ConnectionId fromConnection, String const& fromNick, String const& text, String const& portrait)
  : context(context), fromConnection(fromConnection), fromNick(fromNick), portrait(portrait), text(text) {}

ChatReceivedMessage::ChatReceivedMessage(Json const& json) : ChatReceivedMessage() {
  auto jContext = json.get("context");
  context = MessageContext(
    MessageContextModeNames.getLeft(jContext.getString("mode")),
    jContext.getString("channelName", "")
  );
  fromConnection = json.getUInt("fromConnection", 0);
  fromNick = json.getString("fromNick", "");
  portrait = json.getString("portrait", "");
  text = json.getString("text", "");
  data = json.getObject("data", JsonObject());
}

Json ChatReceivedMessage::toJson() const {
  return JsonObject{
    {"context", JsonObject{
      {"mode", MessageContextModeNames.getRight(context.mode)},
      {"channelName", context.channelName.empty() ? Json() : Json(context.channelName)}
    }},
    {"fromConnection", fromConnection},
    {"fromNick", fromNick.empty() ? Json() : fromNick},
    {"portrait", portrait.empty() ? Json() : portrait},
    {"text", text},
    {"data", data}
  };
}


DataStream& operator>>(DataStream& ds, ChatReceivedMessage& receivedMessage) {
  ds.read(receivedMessage.context);
  ds.read(receivedMessage.fromConnection);
  ds.read(receivedMessage.fromNick);
  ds.read(receivedMessage.portrait);
  ds.read(receivedMessage.text);
  if (ds.streamCompatibilityVersion() >= 5)
    ds.read(receivedMessage.data);
  return ds;
}

DataStream& operator<<(DataStream& ds, ChatReceivedMessage const& receivedMessage) {
  ds.write(receivedMessage.context);
  ds.write(receivedMessage.fromConnection);
  ds.write(receivedMessage.fromNick);
  ds.write(receivedMessage.portrait);
  ds.write(receivedMessage.text);
  if (ds.streamCompatibilityVersion() >= 5)
    ds.write(receivedMessage.data);
  return ds;
}

}