Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions Core/GameEngine/Include/GameNetwork/networkutil.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,8 @@ UnsignedInt AssembleIp(UnsignedByte a, UnsignedByte b, UnsignedByte c, UnsignedB
UnsignedInt ResolveIP(AsciiString host);
UnsignedShort GenerateNextCommandID();
Bool DoesCommandRequireACommandID(NetCommandType type);
Bool CommandRequiresAck(NetCommandMsg *msg);
Bool CommandRequiresDirectSend(NetCommandMsg *msg);
Bool CommandRequiresAck(const NetCommandMsg *msg);
Bool CommandRequiresDirectSend(const NetCommandMsg *msg);
Bool IsCommandSynchronized(NetCommandType type);
const char* GetNetCommandTypeAsString(NetCommandType type);

Expand Down
209 changes: 86 additions & 123 deletions Core/GameEngine/Source/GameNetwork/NetworkUtil.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -119,157 +119,120 @@ UnsignedShort GenerateNextCommandID() {
/**
* Returns true if this type of command requires a unique command ID.
*/
Bool DoesCommandRequireACommandID(NetCommandType type) {
if ((type == NETCOMMANDTYPE_GAMECOMMAND) ||
(type == NETCOMMANDTYPE_FRAMEINFO) ||
(type == NETCOMMANDTYPE_PLAYERLEAVE) ||
(type == NETCOMMANDTYPE_DESTROYPLAYER) ||
(type == NETCOMMANDTYPE_RUNAHEADMETRICS) ||
(type == NETCOMMANDTYPE_RUNAHEAD) ||
(type == NETCOMMANDTYPE_CHAT) ||
(type == NETCOMMANDTYPE_DISCONNECTVOTE) ||
(type == NETCOMMANDTYPE_LOADCOMPLETE) ||
(type == NETCOMMANDTYPE_TIMEOUTSTART) ||
(type == NETCOMMANDTYPE_WRAPPER) ||
(type == NETCOMMANDTYPE_FILE) ||
(type == NETCOMMANDTYPE_FILEANNOUNCE) ||
(type == NETCOMMANDTYPE_FILEPROGRESS) ||
(type == NETCOMMANDTYPE_DISCONNECTPLAYER) ||
(type == NETCOMMANDTYPE_DISCONNECTFRAME) ||
(type == NETCOMMANDTYPE_DISCONNECTSCREENOFF) ||
(type == NETCOMMANDTYPE_FRAMERESENDREQUEST))
{
Bool DoesCommandRequireACommandID(NetCommandType type)
{
switch (type) {
case NETCOMMANDTYPE_FRAMEINFO:
case NETCOMMANDTYPE_GAMECOMMAND:
case NETCOMMANDTYPE_PLAYERLEAVE:
case NETCOMMANDTYPE_RUNAHEADMETRICS:
case NETCOMMANDTYPE_RUNAHEAD:
case NETCOMMANDTYPE_DESTROYPLAYER:
case NETCOMMANDTYPE_CHAT:
case NETCOMMANDTYPE_LOADCOMPLETE:
case NETCOMMANDTYPE_TIMEOUTSTART:
case NETCOMMANDTYPE_WRAPPER:
case NETCOMMANDTYPE_FILE:
case NETCOMMANDTYPE_FILEANNOUNCE:
case NETCOMMANDTYPE_FILEPROGRESS:
case NETCOMMANDTYPE_FRAMERESENDREQUEST:
case NETCOMMANDTYPE_DISCONNECTPLAYER:
case NETCOMMANDTYPE_DISCONNECTVOTE:
case NETCOMMANDTYPE_DISCONNECTFRAME:
case NETCOMMANDTYPE_DISCONNECTSCREENOFF:
return TRUE;
default:
return FALSE;
}
return FALSE;
}

/**
* Returns true if this type of network command requires an ack.
*/
Bool CommandRequiresAck(NetCommandMsg *msg) {
if ((msg->getNetCommandType() == NETCOMMANDTYPE_GAMECOMMAND) ||
(msg->getNetCommandType() == NETCOMMANDTYPE_FRAMEINFO) ||
(msg->getNetCommandType() == NETCOMMANDTYPE_PLAYERLEAVE) ||
(msg->getNetCommandType() == NETCOMMANDTYPE_DESTROYPLAYER) ||
(msg->getNetCommandType() == NETCOMMANDTYPE_RUNAHEADMETRICS) ||
(msg->getNetCommandType() == NETCOMMANDTYPE_RUNAHEAD) ||
(msg->getNetCommandType() == NETCOMMANDTYPE_CHAT) ||
(msg->getNetCommandType() == NETCOMMANDTYPE_DISCONNECTVOTE) ||
(msg->getNetCommandType() == NETCOMMANDTYPE_DISCONNECTPLAYER) ||
(msg->getNetCommandType() == NETCOMMANDTYPE_LOADCOMPLETE) ||
(msg->getNetCommandType() == NETCOMMANDTYPE_TIMEOUTSTART) ||
(msg->getNetCommandType() == NETCOMMANDTYPE_WRAPPER) ||
(msg->getNetCommandType() == NETCOMMANDTYPE_FILE) ||
(msg->getNetCommandType() == NETCOMMANDTYPE_FILEANNOUNCE) ||
(msg->getNetCommandType() == NETCOMMANDTYPE_FILEPROGRESS) ||
(msg->getNetCommandType() == NETCOMMANDTYPE_DISCONNECTPLAYER) ||
(msg->getNetCommandType() == NETCOMMANDTYPE_DISCONNECTFRAME) ||
(msg->getNetCommandType() == NETCOMMANDTYPE_DISCONNECTSCREENOFF) ||
(msg->getNetCommandType() == NETCOMMANDTYPE_FRAMERESENDREQUEST))
{
return TRUE;
}
return FALSE;
Bool CommandRequiresAck(const NetCommandMsg* msg)
{
return DoesCommandRequireACommandID(msg->getNetCommandType());
}
Comment thread
Caball009 marked this conversation as resolved.

Bool IsCommandSynchronized(NetCommandType type) {
if ((type == NETCOMMANDTYPE_GAMECOMMAND) ||
(type == NETCOMMANDTYPE_FRAMEINFO) ||
(type == NETCOMMANDTYPE_PLAYERLEAVE) ||
(type == NETCOMMANDTYPE_DESTROYPLAYER) ||
(type == NETCOMMANDTYPE_RUNAHEAD))
{
Bool IsCommandSynchronized(NetCommandType type)
{
switch (type) {
case NETCOMMANDTYPE_FRAMEINFO:
case NETCOMMANDTYPE_GAMECOMMAND:
case NETCOMMANDTYPE_PLAYERLEAVE:
case NETCOMMANDTYPE_RUNAHEAD:
case NETCOMMANDTYPE_DESTROYPLAYER:
return TRUE;
default:
return FALSE;
}
return FALSE;
}

/**
* Returns true if this type of network command requires the ack to be sent directly to the player
* rather than going through the packet router. This should really only be used by commands
* used on the disconnect screen.
*/
Bool CommandRequiresDirectSend(NetCommandMsg *msg) {
if ((msg->getNetCommandType() == NETCOMMANDTYPE_DISCONNECTVOTE) ||
(msg->getNetCommandType() == NETCOMMANDTYPE_DISCONNECTPLAYER) ||
(msg->getNetCommandType() == NETCOMMANDTYPE_LOADCOMPLETE) ||
(msg->getNetCommandType() == NETCOMMANDTYPE_TIMEOUTSTART) ||
(msg->getNetCommandType() == NETCOMMANDTYPE_FILE) ||
(msg->getNetCommandType() == NETCOMMANDTYPE_FILEANNOUNCE) ||
(msg->getNetCommandType() == NETCOMMANDTYPE_FILEPROGRESS) ||
(msg->getNetCommandType() == NETCOMMANDTYPE_DISCONNECTFRAME) ||
(msg->getNetCommandType() == NETCOMMANDTYPE_DISCONNECTSCREENOFF) ||
(msg->getNetCommandType() == NETCOMMANDTYPE_FRAMERESENDREQUEST)) {
return TRUE;
}
return FALSE;
}

const char* GetNetCommandTypeAsString(NetCommandType type) {

switch (type) {
case NETCOMMANDTYPE_ACKBOTH:
return "NETCOMMANDTYPE_ACKBOTH";
case NETCOMMANDTYPE_ACKSTAGE1:
return "NETCOMMANDTYPE_ACKSTAGE1";
case NETCOMMANDTYPE_ACKSTAGE2:
return "NETCOMMANDTYPE_ACKSTAGE2";
case NETCOMMANDTYPE_FRAMEINFO:
return "NETCOMMANDTYPE_FRAMEINFO";
case NETCOMMANDTYPE_GAMECOMMAND:
return "NETCOMMANDTYPE_GAMECOMMAND";
case NETCOMMANDTYPE_PLAYERLEAVE:
return "NETCOMMANDTYPE_PLAYERLEAVE";
case NETCOMMANDTYPE_RUNAHEADMETRICS:
return "NETCOMMANDTYPE_RUNAHEADMETRICS";
case NETCOMMANDTYPE_RUNAHEAD:
return "NETCOMMANDTYPE_RUNAHEAD";
case NETCOMMANDTYPE_DESTROYPLAYER:
return "NETCOMMANDTYPE_DESTROYPLAYER";
case NETCOMMANDTYPE_KEEPALIVE:
return "NETCOMMANDTYPE_KEEPALIVE";
case NETCOMMANDTYPE_DISCONNECTCHAT:
return "NETCOMMANDTYPE_DISCONNECTCHAT";
case NETCOMMANDTYPE_CHAT:
return "NETCOMMANDTYPE_CHAT";
case NETCOMMANDTYPE_MANGLERQUERY:
return "NETCOMMANDTYPE_MANGLERQUERY";
case NETCOMMANDTYPE_MANGLERRESPONSE:
return "NETCOMMANDTYPE_MANGLERRESPONSE";
case NETCOMMANDTYPE_PROGRESS:
return "NETCOMMANDTYPE_PROGRESS";
Bool CommandRequiresDirectSend(const NetCommandMsg* msg)
{
switch (msg->getNetCommandType()) {
Comment thread
Caball009 marked this conversation as resolved.
case NETCOMMANDTYPE_LOADCOMPLETE:
return "NETCOMMANDTYPE_LOADCOMPLETE";
case NETCOMMANDTYPE_TIMEOUTSTART:
return "NETCOMMANDTYPE_TIMEOUTSTART";
case NETCOMMANDTYPE_WRAPPER:
return "NETCOMMANDTYPE_WRAPPER";
case NETCOMMANDTYPE_FILE:
return "NETCOMMANDTYPE_FILE";
case NETCOMMANDTYPE_FILEANNOUNCE:
return "NETCOMMANDTYPE_FILEANNOUNCE";
case NETCOMMANDTYPE_FILEPROGRESS:
return "NETCOMMANDTYPE_FILEPROGRESS";
case NETCOMMANDTYPE_DISCONNECTKEEPALIVE:
return "NETCOMMANDTYPE_DISCONNECTKEEPALIVE";
case NETCOMMANDTYPE_FRAMERESENDREQUEST:
case NETCOMMANDTYPE_DISCONNECTPLAYER:
return "NETCOMMANDTYPE_DISCONNECTPLAYER";
case NETCOMMANDTYPE_PACKETROUTERQUERY:
return "NETCOMMANDTYPE_PACKETROUTERQUERY";
case NETCOMMANDTYPE_PACKETROUTERACK:
return "NETCOMMANDTYPE_PACKETROUTERACK";
case NETCOMMANDTYPE_DISCONNECTVOTE:
return "NETCOMMANDTYPE_DISCONNECTVOTE";
case NETCOMMANDTYPE_DISCONNECTFRAME:
return "NETCOMMANDTYPE_DISCONNECTFRAME";
case NETCOMMANDTYPE_DISCONNECTSCREENOFF:
return "NETCOMMANDTYPE_DISCONNECTSCREENOFF";
case NETCOMMANDTYPE_FRAMERESENDREQUEST:
return "NETCOMMANDTYPE_FRAMERESENDREQUEST";
return TRUE;
default:
return FALSE;
}
}

const char* GetNetCommandTypeAsString(NetCommandType type)
Comment thread
Caball009 marked this conversation as resolved.
{
#define CASE_LABEL(x) case x: return #x;

switch (type) {
CASE_LABEL(NETCOMMANDTYPE_UNKNOWN)
CASE_LABEL(NETCOMMANDTYPE_ACKBOTH)
CASE_LABEL(NETCOMMANDTYPE_ACKSTAGE1)
CASE_LABEL(NETCOMMANDTYPE_ACKSTAGE2)
CASE_LABEL(NETCOMMANDTYPE_FRAMEINFO)
CASE_LABEL(NETCOMMANDTYPE_GAMECOMMAND)
CASE_LABEL(NETCOMMANDTYPE_PLAYERLEAVE)
CASE_LABEL(NETCOMMANDTYPE_RUNAHEADMETRICS)
CASE_LABEL(NETCOMMANDTYPE_RUNAHEAD)
CASE_LABEL(NETCOMMANDTYPE_DESTROYPLAYER)
CASE_LABEL(NETCOMMANDTYPE_KEEPALIVE)
CASE_LABEL(NETCOMMANDTYPE_DISCONNECTCHAT)
CASE_LABEL(NETCOMMANDTYPE_CHAT)
CASE_LABEL(NETCOMMANDTYPE_MANGLERQUERY)
CASE_LABEL(NETCOMMANDTYPE_MANGLERRESPONSE)
CASE_LABEL(NETCOMMANDTYPE_PROGRESS)
CASE_LABEL(NETCOMMANDTYPE_LOADCOMPLETE)
CASE_LABEL(NETCOMMANDTYPE_TIMEOUTSTART)
CASE_LABEL(NETCOMMANDTYPE_WRAPPER)
CASE_LABEL(NETCOMMANDTYPE_FILE)
CASE_LABEL(NETCOMMANDTYPE_FILEANNOUNCE)
CASE_LABEL(NETCOMMANDTYPE_FILEPROGRESS)
CASE_LABEL(NETCOMMANDTYPE_FRAMERESENDREQUEST)
CASE_LABEL(NETCOMMANDTYPE_DISCONNECTSTART)
CASE_LABEL(NETCOMMANDTYPE_DISCONNECTKEEPALIVE)
CASE_LABEL(NETCOMMANDTYPE_DISCONNECTPLAYER)
CASE_LABEL(NETCOMMANDTYPE_PACKETROUTERQUERY)
CASE_LABEL(NETCOMMANDTYPE_PACKETROUTERACK)
CASE_LABEL(NETCOMMANDTYPE_DISCONNECTVOTE)
CASE_LABEL(NETCOMMANDTYPE_DISCONNECTFRAME)
CASE_LABEL(NETCOMMANDTYPE_DISCONNECTSCREENOFF)
CASE_LABEL(NETCOMMANDTYPE_DISCONNECTEND)
default:
DEBUG_CRASH(("Unknown NetCommandType in GetNetCommandTypeAsString"));
return "UNKNOWN";
DEBUG_CRASH(("Unhandled NetCommandType in GetNetCommandTypeAsString"));
return "<NETCOMMANDTYPE_INVALID>";
}

#undef CASE_LABEL
}
Loading