engine: client: consolidate usermsg registering and parsing for multiple protocols

This commit is contained in:
Alibek Omarov 2024-10-14 03:17:12 +03:00
parent ff47fbaedc
commit 17f194b9a3
4 changed files with 23 additions and 30 deletions

View file

@ -1409,14 +1409,14 @@ CL_RegisterUserMessage
register new user message or update existing
================
*/
void CL_RegisterUserMessage( sizebuf_t *msg )
void CL_RegisterUserMessage( sizebuf_t *msg, connprotocol_t proto )
{
char *pszName;
int svc_num, size, bits;
svc_num = MSG_ReadByte( msg );
if( cls.legacymode )
if( proto == PROTO_LEGACY || proto == PROTO_GOLDSRC )
{
size = MSG_ReadByte( msg );
bits = 8;
@ -1427,7 +1427,16 @@ void CL_RegisterUserMessage( sizebuf_t *msg )
bits = 16;
}
pszName = MSG_ReadString( msg );
if( proto == PROTO_GOLDSRC )
{
static char szName[17];
MSG_ReadBytes( msg, szName, sizeof( szName ) - 1 );
szName[16] = 0;
pszName = szName;
}
else pszName = MSG_ReadString( msg );
// important stuff
if( size == ( BIT( bits ) - 1 ) )
@ -2298,7 +2307,7 @@ CL_ParseUserMessage
handles all user messages
==============
*/
void CL_ParseUserMessage( sizebuf_t *msg, int svc_num )
void CL_ParseUserMessage( sizebuf_t *msg, int svc_num, connprotocol_t proto )
{
byte pbuf[MAX_USERMSG_LENGTH];
int i, iSize;
@ -2338,7 +2347,7 @@ void CL_ParseUserMessage( sizebuf_t *msg, int svc_num )
// message with variable sizes receive an actual size as first byte
if( iSize == -1 )
{
if( cls.legacymode )
if( proto == PROTO_GOLDSRC || proto == PROTO_LEGACY )
iSize = MSG_ReadByte( msg );
else iSize = MSG_ReadWord( msg );
}
@ -2624,7 +2633,7 @@ void CL_ParseServerMessage( sizebuf_t *msg )
CL_ParseAddAngle( msg );
break;
case svc_usermessage:
CL_RegisterUserMessage( msg );
CL_RegisterUserMessage( msg, PROTO_CURRENT );
break;
case svc_packetentities:
playerbytes = CL_ParsePacketEntities( msg, false, PROTO_CURRENT );
@ -2684,7 +2693,7 @@ void CL_ParseServerMessage( sizebuf_t *msg )
CL_ParseExec( msg );
break;
default:
CL_ParseUserMessage( msg, cmd );
CL_ParseUserMessage( msg, cmd, PROTO_CURRENT );
cl.frames[cl.parsecountmod].graphdata.usr += MSG_GetNumBytesRead( msg ) - bufStart;
break;
}

View file

@ -509,7 +509,7 @@ void CL_ParseLegacyServerMessage( sizebuf_t *msg )
CL_ParseAddAngle( msg );
break;
case svc_usermessage:
CL_RegisterUserMessage( msg );
CL_RegisterUserMessage( msg, PROTO_LEGACY );
break;
case svc_packetentities:
playerbytes = CL_ParsePacketEntities( msg, false, PROTO_LEGACY );
@ -574,7 +574,7 @@ void CL_ParseLegacyServerMessage( sizebuf_t *msg )
CL_ParseCvarValue( msg, true, PROTO_LEGACY );
break;
default:
CL_ParseUserMessage( msg, cmd );
CL_ParseUserMessage( msg, cmd, PROTO_LEGACY );
cl.frames[cl.parsecountmod].graphdata.usr += MSG_GetNumBytesRead( msg ) - bufStart;
break;
}

View file

@ -89,22 +89,6 @@ static void CL_ParseNewMovevars( sizebuf_t *msg )
clgame.oldmovevars.features = clgame.movevars.features = host.features;
}
static void CL_ParseNewUserMsg( sizebuf_t *msg )
{
int svc_num, size;
char s[16];
svc_num = MSG_ReadByte( msg );
size = MSG_ReadByte( msg );
MSG_ReadBytes( msg, s, sizeof( s ));
s[15] = 0;
if( size == 255 )
size = -1;
CL_LinkUserMessage( s, svc_num, size );
}
typedef struct delta_header_t
{
qboolean remove : 1;
@ -676,7 +660,7 @@ void CL_ParseGoldSrcServerMessage( sizebuf_t *msg )
CL_ParseAddAngle( msg );
break;
case svc_goldsrc_newusermsg:
CL_ParseNewUserMsg( msg );
CL_RegisterUserMessage( msg, PROTO_GOLDSRC );
break;
case svc_packetentities:
playerbytes = CL_ParsePacketEntitiesGS( msg, false );
@ -741,7 +725,7 @@ void CL_ParseGoldSrcServerMessage( sizebuf_t *msg )
CL_ParseExec( msg );
break;
default:
CL_ParseUserMessage( msg, cmd );
CL_ParseUserMessage( msg, cmd, PROTO_LEGACY );
cl.frames[cl.parsecountmod].graphdata.usr += MSG_GetNumBytesRead( msg ) - bufStart;
break;
}

View file

@ -875,7 +875,7 @@ void CL_ParseSignon( sizebuf_t *msg, connprotocol_t proto );
void CL_ParseRestore( sizebuf_t *msg );
void CL_ParseStaticDecal( sizebuf_t *msg );
void CL_ParseAddAngle( sizebuf_t *msg );
void CL_RegisterUserMessage( sizebuf_t *msg );
void CL_RegisterUserMessage( sizebuf_t *msg, connprotocol_t proto );
void CL_ParseResourceList( sizebuf_t *msg, connprotocol_t proto );
void CL_ParseMovevars( sizebuf_t *msg );
void CL_ParseResourceRequest( sizebuf_t *msg );
@ -897,7 +897,7 @@ qboolean CL_RequestMissingResources( void );
void CL_RegisterResources( sizebuf_t *msg, connprotocol_t proto );
void CL_ParseViewEntity( sizebuf_t *msg );
void CL_ParseServerTime( sizebuf_t *msg );
void CL_ParseUserMessage( sizebuf_t *msg, int svc_num );
void CL_ParseUserMessage( sizebuf_t *msg, int svc_num, connprotocol_t proto );
void CL_ParseFinaleCutscene( sizebuf_t *msg, int level );
void CL_ParseTextMessage( sizebuf_t *msg );
void CL_ParseExec( sizebuf_t *msg );