-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmessage_builder.h
More file actions
140 lines (126 loc) · 5.21 KB
/
Copy pathmessage_builder.h
File metadata and controls
140 lines (126 loc) · 5.21 KB
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#ifndef MESSAGE_BUILDER_H
#define MESSAGE_BUILDER_H
#include "protocol.h"
#include "rapidjson/writer.h"
#include "rapidjson/document.h"
#include "rapidjson/stringbuffer.h"
// Made for testing
std::string BuildGamerSubscribeRequestMessage(const GamerSubscribeRequestMessage &message) {
rapidjson::StringBuffer buffer;
rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
writer.StartObject();
writer.String("type");
writer.String(message.type.c_str(), message.type.size());
writer.EndObject();
return buffer.GetString();
}
std::string BuildGamerSubscribeResultMessage(const GamerSubscribeResultMessage &message) {
rapidjson::StringBuffer buffer;
rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
writer.StartObject();
writer.String("type");
writer.String(message.type.c_str(), message.type.size());
if (message.result) {
writer.String("result");
writer.String("ok");
writer.String("id");
writer.Uint(message.player_id);
} else {
writer.String("result");
writer.String("fail");
}
writer.EndObject();
return buffer.GetString();
}
// Made for testing
std::string BuildViewerSubscribeRequestMessage(const ViewerSubscribeRequestMessage &message) {
rapidjson::StringBuffer buffer;
rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
writer.StartObject();
writer.String("type");
writer.String(message.type.c_str(), message.type.size());
writer.EndObject();
return buffer.GetString();
}
std::string BuildViewerSubscribeResultMessage(const ViewerSubscribeResultMessage &message) {
rapidjson::StringBuffer buffer;
rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
writer.StartObject();
writer.String("type");
writer.String(message.type.c_str(), message.type.size());
if (message.result) {
writer.String("result");
writer.String("ok");
writer.String("id");
writer.Uint(message.viewer_id);
} else {
writer.String("result");
writer.String("fail");
}
writer.EndObject();
return buffer.GetString();
}
// Made for testing
std::string BuildWorldStateMessage(const WorldStateMessage &message) {
rapidjson::StringBuffer buffer;
rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
writer.StartObject();
writer.String("type");
writer.String(message.type.c_str(), message.type.size());
message.world.Serialize(writer);
writer.EndObject();
return buffer.GetString();
}
std::string BuildTurnMessage(const TurnMessage &message) {
rapidjson::StringBuffer buffer;
rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
writer.StartObject();
writer.String("type");
writer.String(message.type.c_str(), message.type.size());
message.turn.Serialize(writer);
writer.EndObject();
return buffer.GetString();
}
std::string BuildFinishMessage(const FinishMessage &message) {
rapidjson::StringBuffer buffer;
rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
writer.StartObject();
writer.String("type");
writer.String(message.type.c_str(), message.type.size());
writer.EndObject();
return buffer.GetString();
}
std::string MessageToJson(const Message *const message) {
if (message->type == mGamerSubscribeRequestType) {
const GamerSubscribeRequestMessage *const gamer_subscribe_request_message
= dynamic_cast<const GamerSubscribeRequestMessage *const>(message);
return BuildGamerSubscribeRequestMessage(*gamer_subscribe_request_message);
} else if (message->type == mGamerSubscribeResultType) {
const GamerSubscribeResultMessage *const gamer_subscribe_result_message
= dynamic_cast<const GamerSubscribeResultMessage *const>(message);
return BuildGamerSubscribeResultMessage(*gamer_subscribe_result_message);
} else if (message->type == mViewerSubscribeRequestType) {
const ViewerSubscribeRequestMessage *const viewer_subscribe_request_message
= dynamic_cast<const ViewerSubscribeRequestMessage *const>(message);
return BuildViewerSubscribeRequestMessage(*viewer_subscribe_request_message);
} else if (message->type == mViewerSubscribeResultType) {
const ViewerSubscribeResultMessage *const viewer_subscribe_result_message
= dynamic_cast<const ViewerSubscribeResultMessage *const>(message);
return BuildViewerSubscribeResultMessage(*viewer_subscribe_result_message);
} else if (message->type == mWorldStateType) {
const WorldStateMessage *const world_state_message
= dynamic_cast<const WorldStateMessage *const>(message);
return BuildWorldStateMessage(*world_state_message);
} else if (message->type == mTurnType) {
const TurnMessage *const turn_message
= dynamic_cast<const TurnMessage *const>(message);
return BuildTurnMessage(*turn_message);
} else if (message->type == mFinishType) {
const FinishMessage *const finish_message
= dynamic_cast<const FinishMessage *const>(message);
return BuildFinishMessage(*finish_message);
} else {
throw std::runtime_error("Error: can not convert message to json");
}
}
#endif