Skip to content

Commit f7ecdb4

Browse files
authored
refactor(network): Use switch cases in utility functions for network commands (TheSuperHackers#2725)
1 parent 7cb3c11 commit f7ecdb4

2 files changed

Lines changed: 88 additions & 125 deletions

File tree

Core/GameEngine/Include/GameNetwork/networkutil.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ UnsignedInt AssembleIp(UnsignedByte a, UnsignedByte b, UnsignedByte c, UnsignedB
3131
UnsignedInt ResolveIP(AsciiString host);
3232
UnsignedShort GenerateNextCommandID();
3333
Bool DoesCommandRequireACommandID(NetCommandType type);
34-
Bool CommandRequiresAck(NetCommandMsg *msg);
35-
Bool CommandRequiresDirectSend(NetCommandMsg *msg);
34+
Bool CommandRequiresAck(const NetCommandMsg *msg);
35+
Bool CommandRequiresDirectSend(const NetCommandMsg *msg);
3636
Bool IsCommandSynchronized(NetCommandType type);
3737
const char* GetNetCommandTypeAsString(NetCommandType type);
3838

Core/GameEngine/Source/GameNetwork/NetworkUtil.cpp

Lines changed: 86 additions & 123 deletions
Original file line numberDiff line numberDiff line change
@@ -119,157 +119,120 @@ UnsignedShort GenerateNextCommandID() {
119119
/**
120120
* Returns true if this type of command requires a unique command ID.
121121
*/
122-
Bool DoesCommandRequireACommandID(NetCommandType type) {
123-
if ((type == NETCOMMANDTYPE_GAMECOMMAND) ||
124-
(type == NETCOMMANDTYPE_FRAMEINFO) ||
125-
(type == NETCOMMANDTYPE_PLAYERLEAVE) ||
126-
(type == NETCOMMANDTYPE_DESTROYPLAYER) ||
127-
(type == NETCOMMANDTYPE_RUNAHEADMETRICS) ||
128-
(type == NETCOMMANDTYPE_RUNAHEAD) ||
129-
(type == NETCOMMANDTYPE_CHAT) ||
130-
(type == NETCOMMANDTYPE_DISCONNECTVOTE) ||
131-
(type == NETCOMMANDTYPE_LOADCOMPLETE) ||
132-
(type == NETCOMMANDTYPE_TIMEOUTSTART) ||
133-
(type == NETCOMMANDTYPE_WRAPPER) ||
134-
(type == NETCOMMANDTYPE_FILE) ||
135-
(type == NETCOMMANDTYPE_FILEANNOUNCE) ||
136-
(type == NETCOMMANDTYPE_FILEPROGRESS) ||
137-
(type == NETCOMMANDTYPE_DISCONNECTPLAYER) ||
138-
(type == NETCOMMANDTYPE_DISCONNECTFRAME) ||
139-
(type == NETCOMMANDTYPE_DISCONNECTSCREENOFF) ||
140-
(type == NETCOMMANDTYPE_FRAMERESENDREQUEST))
141-
{
122+
Bool DoesCommandRequireACommandID(NetCommandType type)
123+
{
124+
switch (type) {
125+
case NETCOMMANDTYPE_FRAMEINFO:
126+
case NETCOMMANDTYPE_GAMECOMMAND:
127+
case NETCOMMANDTYPE_PLAYERLEAVE:
128+
case NETCOMMANDTYPE_RUNAHEADMETRICS:
129+
case NETCOMMANDTYPE_RUNAHEAD:
130+
case NETCOMMANDTYPE_DESTROYPLAYER:
131+
case NETCOMMANDTYPE_CHAT:
132+
case NETCOMMANDTYPE_LOADCOMPLETE:
133+
case NETCOMMANDTYPE_TIMEOUTSTART:
134+
case NETCOMMANDTYPE_WRAPPER:
135+
case NETCOMMANDTYPE_FILE:
136+
case NETCOMMANDTYPE_FILEANNOUNCE:
137+
case NETCOMMANDTYPE_FILEPROGRESS:
138+
case NETCOMMANDTYPE_FRAMERESENDREQUEST:
139+
case NETCOMMANDTYPE_DISCONNECTPLAYER:
140+
case NETCOMMANDTYPE_DISCONNECTVOTE:
141+
case NETCOMMANDTYPE_DISCONNECTFRAME:
142+
case NETCOMMANDTYPE_DISCONNECTSCREENOFF:
142143
return TRUE;
144+
default:
145+
return FALSE;
143146
}
144-
return FALSE;
145147
}
146148

147149
/**
148150
* Returns true if this type of network command requires an ack.
149151
*/
150-
Bool CommandRequiresAck(NetCommandMsg *msg) {
151-
if ((msg->getNetCommandType() == NETCOMMANDTYPE_GAMECOMMAND) ||
152-
(msg->getNetCommandType() == NETCOMMANDTYPE_FRAMEINFO) ||
153-
(msg->getNetCommandType() == NETCOMMANDTYPE_PLAYERLEAVE) ||
154-
(msg->getNetCommandType() == NETCOMMANDTYPE_DESTROYPLAYER) ||
155-
(msg->getNetCommandType() == NETCOMMANDTYPE_RUNAHEADMETRICS) ||
156-
(msg->getNetCommandType() == NETCOMMANDTYPE_RUNAHEAD) ||
157-
(msg->getNetCommandType() == NETCOMMANDTYPE_CHAT) ||
158-
(msg->getNetCommandType() == NETCOMMANDTYPE_DISCONNECTVOTE) ||
159-
(msg->getNetCommandType() == NETCOMMANDTYPE_DISCONNECTPLAYER) ||
160-
(msg->getNetCommandType() == NETCOMMANDTYPE_LOADCOMPLETE) ||
161-
(msg->getNetCommandType() == NETCOMMANDTYPE_TIMEOUTSTART) ||
162-
(msg->getNetCommandType() == NETCOMMANDTYPE_WRAPPER) ||
163-
(msg->getNetCommandType() == NETCOMMANDTYPE_FILE) ||
164-
(msg->getNetCommandType() == NETCOMMANDTYPE_FILEANNOUNCE) ||
165-
(msg->getNetCommandType() == NETCOMMANDTYPE_FILEPROGRESS) ||
166-
(msg->getNetCommandType() == NETCOMMANDTYPE_DISCONNECTPLAYER) ||
167-
(msg->getNetCommandType() == NETCOMMANDTYPE_DISCONNECTFRAME) ||
168-
(msg->getNetCommandType() == NETCOMMANDTYPE_DISCONNECTSCREENOFF) ||
169-
(msg->getNetCommandType() == NETCOMMANDTYPE_FRAMERESENDREQUEST))
170-
{
171-
return TRUE;
172-
}
173-
return FALSE;
152+
Bool CommandRequiresAck(const NetCommandMsg* msg)
153+
{
154+
return DoesCommandRequireACommandID(msg->getNetCommandType());
174155
}
175156

176-
Bool IsCommandSynchronized(NetCommandType type) {
177-
if ((type == NETCOMMANDTYPE_GAMECOMMAND) ||
178-
(type == NETCOMMANDTYPE_FRAMEINFO) ||
179-
(type == NETCOMMANDTYPE_PLAYERLEAVE) ||
180-
(type == NETCOMMANDTYPE_DESTROYPLAYER) ||
181-
(type == NETCOMMANDTYPE_RUNAHEAD))
182-
{
157+
Bool IsCommandSynchronized(NetCommandType type)
158+
{
159+
switch (type) {
160+
case NETCOMMANDTYPE_FRAMEINFO:
161+
case NETCOMMANDTYPE_GAMECOMMAND:
162+
case NETCOMMANDTYPE_PLAYERLEAVE:
163+
case NETCOMMANDTYPE_RUNAHEAD:
164+
case NETCOMMANDTYPE_DESTROYPLAYER:
183165
return TRUE;
166+
default:
167+
return FALSE;
184168
}
185-
return FALSE;
186169
}
187170

188171
/**
189172
* Returns true if this type of network command requires the ack to be sent directly to the player
190173
* rather than going through the packet router. This should really only be used by commands
191174
* used on the disconnect screen.
192175
*/
193-
Bool CommandRequiresDirectSend(NetCommandMsg *msg) {
194-
if ((msg->getNetCommandType() == NETCOMMANDTYPE_DISCONNECTVOTE) ||
195-
(msg->getNetCommandType() == NETCOMMANDTYPE_DISCONNECTPLAYER) ||
196-
(msg->getNetCommandType() == NETCOMMANDTYPE_LOADCOMPLETE) ||
197-
(msg->getNetCommandType() == NETCOMMANDTYPE_TIMEOUTSTART) ||
198-
(msg->getNetCommandType() == NETCOMMANDTYPE_FILE) ||
199-
(msg->getNetCommandType() == NETCOMMANDTYPE_FILEANNOUNCE) ||
200-
(msg->getNetCommandType() == NETCOMMANDTYPE_FILEPROGRESS) ||
201-
(msg->getNetCommandType() == NETCOMMANDTYPE_DISCONNECTFRAME) ||
202-
(msg->getNetCommandType() == NETCOMMANDTYPE_DISCONNECTSCREENOFF) ||
203-
(msg->getNetCommandType() == NETCOMMANDTYPE_FRAMERESENDREQUEST)) {
204-
return TRUE;
205-
}
206-
return FALSE;
207-
}
208-
209-
const char* GetNetCommandTypeAsString(NetCommandType type) {
210-
211-
switch (type) {
212-
case NETCOMMANDTYPE_ACKBOTH:
213-
return "NETCOMMANDTYPE_ACKBOTH";
214-
case NETCOMMANDTYPE_ACKSTAGE1:
215-
return "NETCOMMANDTYPE_ACKSTAGE1";
216-
case NETCOMMANDTYPE_ACKSTAGE2:
217-
return "NETCOMMANDTYPE_ACKSTAGE2";
218-
case NETCOMMANDTYPE_FRAMEINFO:
219-
return "NETCOMMANDTYPE_FRAMEINFO";
220-
case NETCOMMANDTYPE_GAMECOMMAND:
221-
return "NETCOMMANDTYPE_GAMECOMMAND";
222-
case NETCOMMANDTYPE_PLAYERLEAVE:
223-
return "NETCOMMANDTYPE_PLAYERLEAVE";
224-
case NETCOMMANDTYPE_RUNAHEADMETRICS:
225-
return "NETCOMMANDTYPE_RUNAHEADMETRICS";
226-
case NETCOMMANDTYPE_RUNAHEAD:
227-
return "NETCOMMANDTYPE_RUNAHEAD";
228-
case NETCOMMANDTYPE_DESTROYPLAYER:
229-
return "NETCOMMANDTYPE_DESTROYPLAYER";
230-
case NETCOMMANDTYPE_KEEPALIVE:
231-
return "NETCOMMANDTYPE_KEEPALIVE";
232-
case NETCOMMANDTYPE_DISCONNECTCHAT:
233-
return "NETCOMMANDTYPE_DISCONNECTCHAT";
234-
case NETCOMMANDTYPE_CHAT:
235-
return "NETCOMMANDTYPE_CHAT";
236-
case NETCOMMANDTYPE_MANGLERQUERY:
237-
return "NETCOMMANDTYPE_MANGLERQUERY";
238-
case NETCOMMANDTYPE_MANGLERRESPONSE:
239-
return "NETCOMMANDTYPE_MANGLERRESPONSE";
240-
case NETCOMMANDTYPE_PROGRESS:
241-
return "NETCOMMANDTYPE_PROGRESS";
176+
Bool CommandRequiresDirectSend(const NetCommandMsg* msg)
177+
{
178+
switch (msg->getNetCommandType()) {
242179
case NETCOMMANDTYPE_LOADCOMPLETE:
243-
return "NETCOMMANDTYPE_LOADCOMPLETE";
244180
case NETCOMMANDTYPE_TIMEOUTSTART:
245-
return "NETCOMMANDTYPE_TIMEOUTSTART";
246-
case NETCOMMANDTYPE_WRAPPER:
247-
return "NETCOMMANDTYPE_WRAPPER";
248181
case NETCOMMANDTYPE_FILE:
249-
return "NETCOMMANDTYPE_FILE";
250182
case NETCOMMANDTYPE_FILEANNOUNCE:
251-
return "NETCOMMANDTYPE_FILEANNOUNCE";
252183
case NETCOMMANDTYPE_FILEPROGRESS:
253-
return "NETCOMMANDTYPE_FILEPROGRESS";
254-
case NETCOMMANDTYPE_DISCONNECTKEEPALIVE:
255-
return "NETCOMMANDTYPE_DISCONNECTKEEPALIVE";
184+
case NETCOMMANDTYPE_FRAMERESENDREQUEST:
256185
case NETCOMMANDTYPE_DISCONNECTPLAYER:
257-
return "NETCOMMANDTYPE_DISCONNECTPLAYER";
258-
case NETCOMMANDTYPE_PACKETROUTERQUERY:
259-
return "NETCOMMANDTYPE_PACKETROUTERQUERY";
260-
case NETCOMMANDTYPE_PACKETROUTERACK:
261-
return "NETCOMMANDTYPE_PACKETROUTERACK";
262186
case NETCOMMANDTYPE_DISCONNECTVOTE:
263-
return "NETCOMMANDTYPE_DISCONNECTVOTE";
264187
case NETCOMMANDTYPE_DISCONNECTFRAME:
265-
return "NETCOMMANDTYPE_DISCONNECTFRAME";
266188
case NETCOMMANDTYPE_DISCONNECTSCREENOFF:
267-
return "NETCOMMANDTYPE_DISCONNECTSCREENOFF";
268-
case NETCOMMANDTYPE_FRAMERESENDREQUEST:
269-
return "NETCOMMANDTYPE_FRAMERESENDREQUEST";
189+
return TRUE;
190+
default:
191+
return FALSE;
192+
}
193+
}
194+
195+
const char* GetNetCommandTypeAsString(NetCommandType type)
196+
{
197+
#define CASE_LABEL(x) case x: return #x;
198+
199+
switch (type) {
200+
CASE_LABEL(NETCOMMANDTYPE_UNKNOWN)
201+
CASE_LABEL(NETCOMMANDTYPE_ACKBOTH)
202+
CASE_LABEL(NETCOMMANDTYPE_ACKSTAGE1)
203+
CASE_LABEL(NETCOMMANDTYPE_ACKSTAGE2)
204+
CASE_LABEL(NETCOMMANDTYPE_FRAMEINFO)
205+
CASE_LABEL(NETCOMMANDTYPE_GAMECOMMAND)
206+
CASE_LABEL(NETCOMMANDTYPE_PLAYERLEAVE)
207+
CASE_LABEL(NETCOMMANDTYPE_RUNAHEADMETRICS)
208+
CASE_LABEL(NETCOMMANDTYPE_RUNAHEAD)
209+
CASE_LABEL(NETCOMMANDTYPE_DESTROYPLAYER)
210+
CASE_LABEL(NETCOMMANDTYPE_KEEPALIVE)
211+
CASE_LABEL(NETCOMMANDTYPE_DISCONNECTCHAT)
212+
CASE_LABEL(NETCOMMANDTYPE_CHAT)
213+
CASE_LABEL(NETCOMMANDTYPE_MANGLERQUERY)
214+
CASE_LABEL(NETCOMMANDTYPE_MANGLERRESPONSE)
215+
CASE_LABEL(NETCOMMANDTYPE_PROGRESS)
216+
CASE_LABEL(NETCOMMANDTYPE_LOADCOMPLETE)
217+
CASE_LABEL(NETCOMMANDTYPE_TIMEOUTSTART)
218+
CASE_LABEL(NETCOMMANDTYPE_WRAPPER)
219+
CASE_LABEL(NETCOMMANDTYPE_FILE)
220+
CASE_LABEL(NETCOMMANDTYPE_FILEANNOUNCE)
221+
CASE_LABEL(NETCOMMANDTYPE_FILEPROGRESS)
222+
CASE_LABEL(NETCOMMANDTYPE_FRAMERESENDREQUEST)
223+
CASE_LABEL(NETCOMMANDTYPE_DISCONNECTSTART)
224+
CASE_LABEL(NETCOMMANDTYPE_DISCONNECTKEEPALIVE)
225+
CASE_LABEL(NETCOMMANDTYPE_DISCONNECTPLAYER)
226+
CASE_LABEL(NETCOMMANDTYPE_PACKETROUTERQUERY)
227+
CASE_LABEL(NETCOMMANDTYPE_PACKETROUTERACK)
228+
CASE_LABEL(NETCOMMANDTYPE_DISCONNECTVOTE)
229+
CASE_LABEL(NETCOMMANDTYPE_DISCONNECTFRAME)
230+
CASE_LABEL(NETCOMMANDTYPE_DISCONNECTSCREENOFF)
231+
CASE_LABEL(NETCOMMANDTYPE_DISCONNECTEND)
270232
default:
271-
DEBUG_CRASH(("Unknown NetCommandType in GetNetCommandTypeAsString"));
272-
return "UNKNOWN";
233+
DEBUG_CRASH(("Unhandled NetCommandType in GetNetCommandTypeAsString"));
234+
return "<NETCOMMANDTYPE_INVALID>";
273235
}
274236

237+
#undef CASE_LABEL
275238
}

0 commit comments

Comments
 (0)