Pyrogenesis  trunk
NetMessages.h
Go to the documentation of this file.
1 /* Copyright (C) 2017 Wildfire Games.
2  * This file is part of 0 A.D.
3  *
4  * 0 A.D. is free software: you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation, either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * 0 A.D. is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with 0 A.D. If not, see <http://www.gnu.org/licenses/>.
16  */
17 
18 /**
19  * @file
20  * The list of messages used by the network subsystem.
21  */
22 
23 #ifndef NETMESSAGES_H
24 #define NETMESSAGES_H
25 
26 #include "ps/CStr.h"
28 
29 #define PS_PROTOCOL_MAGIC 0x5073013f // 'P', 's', 0x01, '?'
30 #define PS_PROTOCOL_MAGIC_RESPONSE 0x50630121 // 'P', 'c', 0x01, '!'
31 #define PS_PROTOCOL_VERSION 0x01010015 // Arbitrary protocol
32 #define PS_DEFAULT_PORT 0x5073 // 'P', 's'
33 
34 // Defines the list of message types. The order of the list must not change.
35 // The message types having a negative value are used internally and not sent
36 // over the network. The message types used for network communication have
37 // positive values.
39 {
43 
47 
50 
57 
62 
64 
67 
72 
76 
77  NMT_SYNC_CHECK, // OOS-detection hash checking
78  NMT_SYNC_ERROR, // OOS-detection error
79 
81 };
82 
83 // Authentication result codes
85 {
89 };
90 
91 #endif // NETMESSAGES_H
92 
93 #ifdef CREATING_NMT
94 
95 #define ALLNETMSGS_DONT_CREATE_NMTS
96 #define START_NMT_CLASS_(_nm, _message) START_NMT_CLASS(C##_nm##Message, _message)
97 #define DERIVE_NMT_CLASS_(_base, _nm, _message) START_NMT_CLASS_DERIVED(C ## _base ## Message, C ## _nm ## Message, _message)
98 
99 START_NMTS()
100 
101 START_NMT_CLASS_(SrvHandshake, NMT_SERVER_HANDSHAKE)
102  NMT_FIELD_INT(m_Magic, u32, 4)
103  NMT_FIELD_INT(m_ProtocolVersion, u32, 4)
104  NMT_FIELD_INT(m_SoftwareVersion, u32, 4)
105 END_NMT_CLASS()
106 
107 START_NMT_CLASS_(CliHandshake, NMT_CLIENT_HANDSHAKE)
108  NMT_FIELD_INT(m_MagicResponse, u32, 4)
109  NMT_FIELD_INT(m_ProtocolVersion, u32, 4)
110  NMT_FIELD_INT(m_SoftwareVersion, u32, 4)
111 END_NMT_CLASS()
112 
113 START_NMT_CLASS_(SrvHandshakeResponse, NMT_SERVER_HANDSHAKE_RESPONSE)
114  NMT_FIELD_INT(m_UseProtocolVersion, u32, 4)
115  NMT_FIELD_INT(m_Flags, u32, 4)
116  NMT_FIELD(CStrW, m_Message)
117 END_NMT_CLASS()
118 
119 START_NMT_CLASS_(Authenticate, NMT_AUTHENTICATE)
120  NMT_FIELD(CStr, m_GUID)
121  NMT_FIELD(CStrW, m_Name)
122  NMT_FIELD(CStrW, m_Password)
123  NMT_FIELD_INT(m_IsLocalClient, u8, 1)
124 END_NMT_CLASS()
125 
126 START_NMT_CLASS_(AuthenticateResult, NMT_AUTHENTICATE_RESULT)
127  NMT_FIELD_INT(m_Code, u32, 4)
128  NMT_FIELD_INT(m_HostID, u32, 2)
129  NMT_FIELD(CStrW, m_Message)
130 END_NMT_CLASS()
131 
132 START_NMT_CLASS_(Chat, NMT_CHAT)
133  NMT_FIELD(CStr, m_GUID) // ignored when client->server, valid when server->client
134  NMT_FIELD(CStrW, m_Message)
135 END_NMT_CLASS()
136 
137 START_NMT_CLASS_(Ready, NMT_READY)
138  NMT_FIELD(CStr, m_GUID)
139  NMT_FIELD_INT(m_Status, u8, 1)
140 END_NMT_CLASS()
141 
142 START_NMT_CLASS_(ClearAllReady, NMT_CLEAR_ALL_READY)
143 END_NMT_CLASS()
144 
145 START_NMT_CLASS_(PlayerAssignment, NMT_PLAYER_ASSIGNMENT)
146  NMT_START_ARRAY(m_Hosts)
147  NMT_FIELD(CStr, m_GUID)
148  NMT_FIELD(CStrW, m_Name)
149  NMT_FIELD_INT(m_PlayerID, i8, 1)
150  NMT_FIELD_INT(m_Status, u8, 1)
151  NMT_END_ARRAY()
152 END_NMT_CLASS()
153 
154 START_NMT_CLASS_(FileTransferRequest, NMT_FILE_TRANSFER_REQUEST)
155  NMT_FIELD_INT(m_RequestID, u32, 4)
156 END_NMT_CLASS()
157 
158 START_NMT_CLASS_(FileTransferResponse, NMT_FILE_TRANSFER_RESPONSE)
159  NMT_FIELD_INT(m_RequestID, u32, 4)
160  NMT_FIELD_INT(m_Length, u32, 4)
161 END_NMT_CLASS()
162 
163 START_NMT_CLASS_(FileTransferData, NMT_FILE_TRANSFER_DATA)
164  NMT_FIELD_INT(m_RequestID, u32, 4)
165  NMT_FIELD(CStr, m_Data)
166 END_NMT_CLASS()
167 
168 START_NMT_CLASS_(FileTransferAck, NMT_FILE_TRANSFER_ACK)
169  NMT_FIELD_INT(m_RequestID, u32, 4)
170  NMT_FIELD_INT(m_NumPackets, u32, 4)
171 END_NMT_CLASS()
172 
173 START_NMT_CLASS_(JoinSyncStart, NMT_JOIN_SYNC_START)
174 END_NMT_CLASS()
175 
176 START_NMT_CLASS_(Rejoined, NMT_REJOINED)
177  NMT_FIELD(CStr, m_GUID)
178 END_NMT_CLASS()
179 
180 START_NMT_CLASS_(Kicked, NMT_KICKED)
181  NMT_FIELD(CStrW, m_Name)
182  NMT_FIELD_INT(m_Ban, u8, 1)
183 END_NMT_CLASS()
184 
185 START_NMT_CLASS_(ClientTimeout, NMT_CLIENT_TIMEOUT)
186  NMT_FIELD(CStr, m_GUID)
187  NMT_FIELD_INT(m_LastReceivedTime, u32, 4)
188 END_NMT_CLASS()
189 
190 START_NMT_CLASS_(ClientPerformance, NMT_CLIENT_PERFORMANCE)
191  NMT_START_ARRAY(m_Clients)
192  NMT_FIELD(CStr, m_GUID)
193  NMT_FIELD_INT(m_MeanRTT, u32, 4)
194  NMT_END_ARRAY()
195 END_NMT_CLASS()
196 
197 START_NMT_CLASS_(ClientsLoading, NMT_CLIENTS_LOADING)
198  NMT_START_ARRAY(m_Clients)
199  NMT_FIELD(CStr, m_GUID)
200  NMT_END_ARRAY()
201 END_NMT_CLASS()
202 
203 START_NMT_CLASS_(ClientPaused, NMT_CLIENT_PAUSED)
204  NMT_FIELD(CStr, m_GUID)
205  NMT_FIELD_INT(m_Pause, u8, 1)
206 END_NMT_CLASS()
207 
208 START_NMT_CLASS_(LoadedGame, NMT_LOADED_GAME)
209  NMT_FIELD_INT(m_CurrentTurn, u32, 4)
210 END_NMT_CLASS()
211 
212 START_NMT_CLASS_(GameStart, NMT_GAME_START)
213 END_NMT_CLASS()
214 
215 START_NMT_CLASS_(EndCommandBatch, NMT_END_COMMAND_BATCH)
216  NMT_FIELD_INT(m_Turn, u32, 4)
217  NMT_FIELD_INT(m_TurnLength, u32, 2)
218 END_NMT_CLASS()
219 
220 START_NMT_CLASS_(SyncCheck, NMT_SYNC_CHECK)
221  NMT_FIELD_INT(m_Turn, u32, 4)
222  NMT_FIELD(CStr, m_Hash)
223 END_NMT_CLASS()
224 
225 START_NMT_CLASS_(SyncError, NMT_SYNC_ERROR)
226  NMT_FIELD_INT(m_Turn, u32, 4)
227  NMT_FIELD(CStr, m_HashExpected)
228  NMT_START_ARRAY(m_PlayerNames)
229  NMT_FIELD(CStrW, m_Name)
230  NMT_END_ARRAY()
231 END_NMT_CLASS()
232 
233 START_NMT_CLASS_(AssignPlayer, NMT_ASSIGN_PLAYER)
234  NMT_FIELD_INT(m_PlayerID, i8, 1)
235  NMT_FIELD(CStr, m_GUID)
236 END_NMT_CLASS()
237 
238 END_NMTS()
239 
240 #else
241 #ifndef ALLNETMSGS_DONT_CREATE_NMTS
242 
243 # ifdef ALLNETMSGS_IMPLEMENT
244 # define NMT_CREATOR_IMPLEMENT
245 # endif
246 
247 # define NMT_CREATE_HEADER_NAME "NetMessages.h"
248 # include "NMTCreator.h"
249 
250 #endif // #ifndef ALLNETMSGS_DONT_CREATE_NMTS
251 #endif // #ifdef CREATING_NMT
NetMessageType
Definition: NetMessages.h:38
Definition: NetMessages.h:70
Definition: NetMessages.h:55
AuthenticateResultCode
Definition: NetMessages.h:84
Definition: NetMessages.h:41
Definition: NetMessages.h:46
Definition: NetMessages.h:86
Definition: NetMessages.h:74
Definition: NetMessages.h:73
Definition: NetMessages.h:77
Definition: NetMessages.h:61
Definition: NetMessages.h:40
Definition: NetMessages.h:54
uint8_t u8
Definition: types.h:37
Definition: NetMessages.h:58
Definition: NetMessages.h:59
Definition: NetMessages.h:69
uint32_t u32
Definition: types.h:39
Definition: NetMessages.h:51
Definition: NetMessages.h:44
Definition: NetMessages.h:78
Definition: NetMessages.h:80
Definition: NetMessages.h:53
Definition: NetMessages.h:60
Definition: NetMessages.h:66
Definition: NetMessages.h:56
Definition: NetHost.h:35
Definition: NetMessages.h:65
Definition: NetMessages.h:48
Definition: NetMessages.h:45
Definition: NetMessages.h:71
Definition: NetMessages.h:75
Definition: NetMessages.h:87
Definition: NetMessages.h:42
Definition: NetMessages.h:88
Definition: NetMessages.h:49
int8_t i8
Definition: types.h:32
Definition: NetMessages.h:68
Definition: NetMessages.h:52
Definition: NetMessages.h:63