1 /* Copyright (C) 2021 Wildfire Games.
2 * This file is part of 0 A.D.
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.
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.
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/>.
20 * The list of messages used by the network subsystem.
27 #include "scriptinterface/ScriptTypes.h"
29 #define PS_PROTOCOL_MAGIC 0x5073013f // 'P', 's', 0x01, '?'
30 #define PS_PROTOCOL_MAGIC_RESPONSE 0x50630121 // 'P', 'c', 0x01, '!'
31 #define PS_PROTOCOL_VERSION 0x01010018 // Arbitrary protocol
32 #define PS_DEFAULT_PORT 0x5073 // 'P', 's'
34 // Set when lobby authentication is required. Used in the SrvHandshakeResponseMessage.
35 #define PS_NETWORK_FLAG_REQUIRE_LOBBYAUTH 0x1
37 // Defines the list of message types. The order of the list must not change.
38 // The message types having a negative value are used internally and not sent
39 // over the network. The message types used for network communication have
43 NMT_CONNECT_COMPLETE
= -256,
49 NMT_SERVER_HANDSHAKE_RESPONSE
,
52 NMT_AUTHENTICATE_RESULT
,
59 NMT_PLAYER_ASSIGNMENT
,
61 NMT_FILE_TRANSFER_REQUEST
,
62 NMT_FILE_TRANSFER_RESPONSE
,
63 NMT_FILE_TRANSFER_DATA
,
64 NMT_FILE_TRANSFER_ACK
,
72 NMT_CLIENT_PERFORMANCE
,
78 NMT_END_COMMAND_BATCH
,
80 NMT_SYNC_CHECK
, // OOS-detection hash checking
81 NMT_SYNC_ERROR
, // OOS-detection error
83 NMT_SIMULATION_COMMAND
86 // Authentication result codes
87 enum AuthenticateResultCode
94 #endif // NETMESSAGES_H
98 #define ALLNETMSGS_DONT_CREATE_NMTS
99 #define START_NMT_CLASS_(_nm, _message) START_NMT_CLASS(C##_nm##Message, _message)
100 #define DERIVE_NMT_CLASS_(_base, _nm, _message) START_NMT_CLASS_DERIVED(C ## _base ## Message, C ## _nm ## Message, _message)
104 START_NMT_CLASS_(SrvHandshake
, NMT_SERVER_HANDSHAKE
)
105 NMT_FIELD_INT(m_Magic
, u32
, 4)
106 NMT_FIELD_INT(m_ProtocolVersion
, u32
, 4)
107 NMT_FIELD_INT(m_SoftwareVersion
, u32
, 4)
110 START_NMT_CLASS_(CliHandshake
, NMT_CLIENT_HANDSHAKE
)
111 NMT_FIELD_INT(m_MagicResponse
, u32
, 4)
112 NMT_FIELD_INT(m_ProtocolVersion
, u32
, 4)
113 NMT_FIELD_INT(m_SoftwareVersion
, u32
, 4)
116 START_NMT_CLASS_(SrvHandshakeResponse
, NMT_SERVER_HANDSHAKE_RESPONSE
)
117 NMT_FIELD_INT(m_UseProtocolVersion
, u32
, 4)
118 NMT_FIELD_INT(m_Flags
, u32
, 4)
119 NMT_FIELD(CStr
, m_GUID
)
122 START_NMT_CLASS_(Authenticate
, NMT_AUTHENTICATE
)
123 NMT_FIELD(CStrW
, m_Name
)
124 NMT_FIELD_SECRET(CStr
, m_Password
)
125 NMT_FIELD_SECRET(CStr
, m_ControllerSecret
)
128 START_NMT_CLASS_(AuthenticateResult
, NMT_AUTHENTICATE_RESULT
)
129 NMT_FIELD_INT(m_Code
, u32
, 4)
130 NMT_FIELD_INT(m_HostID
, u32
, 2)
131 NMT_FIELD_INT(m_IsController
, u8
, 1)
132 NMT_FIELD(CStrW
, m_Message
)
135 START_NMT_CLASS_(Chat
, NMT_CHAT
)
136 NMT_FIELD(CStr
, m_GUID
) // ignored when client->server, valid when server->client
137 NMT_FIELD(CStrW
, m_Message
)
140 START_NMT_CLASS_(Ready
, NMT_READY
)
141 NMT_FIELD(CStr
, m_GUID
)
142 NMT_FIELD_INT(m_Status
, u8
, 1)
145 START_NMT_CLASS_(ClearAllReady
, NMT_CLEAR_ALL_READY
)
148 START_NMT_CLASS_(PlayerAssignment
, NMT_PLAYER_ASSIGNMENT
)
149 NMT_START_ARRAY(m_Hosts
)
150 NMT_FIELD(CStr
, m_GUID
)
151 NMT_FIELD(CStrW
, m_Name
)
152 NMT_FIELD_INT(m_PlayerID
, i8
, 1)
153 NMT_FIELD_INT(m_Status
, u8
, 1)
157 START_NMT_CLASS_(FileTransferRequest
, NMT_FILE_TRANSFER_REQUEST
)
158 NMT_FIELD_INT(m_RequestID
, u32
, 4)
161 START_NMT_CLASS_(FileTransferResponse
, NMT_FILE_TRANSFER_RESPONSE
)
162 NMT_FIELD_INT(m_RequestID
, u32
, 4)
163 NMT_FIELD_INT(m_Length
, u32
, 4)
166 START_NMT_CLASS_(FileTransferData
, NMT_FILE_TRANSFER_DATA
)
167 NMT_FIELD_INT(m_RequestID
, u32
, 4)
168 NMT_FIELD(CStr
, m_Data
)
171 START_NMT_CLASS_(FileTransferAck
, NMT_FILE_TRANSFER_ACK
)
172 NMT_FIELD_INT(m_RequestID
, u32
, 4)
173 NMT_FIELD_INT(m_NumPackets
, u32
, 4)
176 START_NMT_CLASS_(JoinSyncStart
, NMT_JOIN_SYNC_START
)
177 NMT_FIELD(CStr
, m_InitAttributes
)
180 START_NMT_CLASS_(Rejoined
, NMT_REJOINED
)
181 NMT_FIELD(CStr
, m_GUID
)
184 START_NMT_CLASS_(Kicked
, NMT_KICKED
)
185 NMT_FIELD(CStrW
, m_Name
)
186 NMT_FIELD_INT(m_Ban
, u8
, 1)
189 START_NMT_CLASS_(ClientTimeout
, NMT_CLIENT_TIMEOUT
)
190 NMT_FIELD(CStr
, m_GUID
)
191 NMT_FIELD_INT(m_LastReceivedTime
, u32
, 4)
194 START_NMT_CLASS_(ClientPerformance
, NMT_CLIENT_PERFORMANCE
)
195 NMT_START_ARRAY(m_Clients
)
196 NMT_FIELD(CStr
, m_GUID
)
197 NMT_FIELD_INT(m_MeanRTT
, u32
, 4)
201 START_NMT_CLASS_(ClientsLoading
, NMT_CLIENTS_LOADING
)
202 NMT_START_ARRAY(m_Clients
)
203 NMT_FIELD(CStr
, m_GUID
)
207 START_NMT_CLASS_(ClientPaused
, NMT_CLIENT_PAUSED
)
208 NMT_FIELD(CStr
, m_GUID
)
209 NMT_FIELD_INT(m_Pause
, u8
, 1)
212 START_NMT_CLASS_(LoadedGame
, NMT_LOADED_GAME
)
213 NMT_FIELD_INT(m_CurrentTurn
, u32
, 4)
216 START_NMT_CLASS_(GameStart
, NMT_GAME_START
)
217 NMT_FIELD(CStr
, m_InitAttributes
)
220 START_NMT_CLASS_(EndCommandBatch
, NMT_END_COMMAND_BATCH
)
221 NMT_FIELD_INT(m_Turn
, u32
, 4)
222 NMT_FIELD_INT(m_TurnLength
, u32
, 2)
225 START_NMT_CLASS_(SyncCheck
, NMT_SYNC_CHECK
)
226 NMT_FIELD_INT(m_Turn
, u32
, 4)
227 NMT_FIELD(CStr
, m_Hash
)
230 START_NMT_CLASS_(SyncError
, NMT_SYNC_ERROR
)
231 NMT_FIELD_INT(m_Turn
, u32
, 4)
232 NMT_FIELD(CStr
, m_HashExpected
)
233 NMT_START_ARRAY(m_PlayerNames
)
234 NMT_FIELD(CStrW
, m_Name
)
238 START_NMT_CLASS_(AssignPlayer
, NMT_ASSIGN_PLAYER
)
239 NMT_FIELD_INT(m_PlayerID
, i8
, 1)
240 NMT_FIELD(CStr
, m_GUID
)
246 #ifndef ALLNETMSGS_DONT_CREATE_NMTS
248 # ifdef ALLNETMSGS_IMPLEMENT
249 # define NMT_CREATOR_IMPLEMENT
252 # define NMT_CREATE_HEADER_NAME "NetMessages.h"
253 # include "NMTCreator.h"
255 #endif // #ifndef ALLNETMSGS_DONT_CREATE_NMTS
256 #endif // #ifdef CREATING_NMT