diff --git a/src/netcode/net_command.c b/src/netcode/net_command.c index 91813fe484268d95263807d621c8d5099da4f0ab..d319e336f1bb52647cd242d3f4d1dc131e8bf902 100644 --- a/src/netcode/net_command.c +++ b/src/netcode/net_command.c @@ -21,16 +21,6 @@ #include "../z_zone.h" #include "../doomtype.h" -typedef struct textcmdbuf_s textcmdbuf_t; - -struct textcmdbuf_s -{ - textcmdbuf_t *next; - UINT8 cmd[MAXTEXTCMD]; -}; - -static textcmdbuf_t *textcmdbuf; -static textcmdbuf_t *textcmdbuf2; textcmdtic_t *textcmds[TEXTCMD_HASH_SIZE] = {NULL}; UINT8 localtextcmd[MAXTEXTCMD]; UINT8 localtextcmd2[MAXTEXTCMD]; // splitscreen @@ -47,57 +37,21 @@ void RegisterNetXCmd(netxcmd_t id, void (*cmd_f)(UINT8 **p, INT32 playernum)) listnetxcmd[id] = cmd_f; } -static void WriteNetXCmd(UINT8 *cmd, netxcmd_t id, const void *param, size_t nparam) -{ - cmd[0]++; - cmd[cmd[0]] = (UINT8)id; - if (param && nparam) - { - M_Memcpy(&cmd[cmd[0]+1], param, nparam); - cmd[0] = (UINT8)(cmd[0] + (UINT8)nparam); - } -} - void SendNetXCmd(netxcmd_t id, const void *param, size_t nparam) { if (localtextcmd[0]+2+nparam > MAXTEXTCMD) { - textcmdbuf_t *buf = textcmdbuf; - - if (2+nparam > MAXTEXTCMD) - { - CONS_Alert(CONS_ERROR, M_GetText("packet too large to fit NetXCmd, cannot add netcmd %d! (size: %s, max: %d)\n"), id, sizeu1(2+nparam), MAXTEXTCMD); - return; - } - // for future reference: if (cv_debug) != debug disabled. - CONS_Alert(CONS_NOTICE, M_GetText("NetXCmd buffer full, delaying netcmd %d... (size: %d, needed: %s)\n"), id, localtextcmd[0], sizeu1(nparam)); - if (buf == NULL) - { - textcmdbuf = Z_Malloc(sizeof(textcmdbuf_t), PU_STATIC, NULL); - textcmdbuf->cmd[0] = 0; - textcmdbuf->next = NULL; - WriteNetXCmd(textcmdbuf->cmd, id, param, nparam); - return; - } - - while (buf->next != NULL) - buf = buf->next; - - if (buf->cmd[0]+2+nparam > MAXTEXTCMD) - { - buf->next = Z_Malloc(sizeof(textcmdbuf_t), PU_STATIC, NULL); - buf->next->cmd[0] = 0; - buf->next->next = NULL; - WriteNetXCmd(buf->next->cmd, id, param, nparam); - } - else - { - WriteNetXCmd(buf->cmd, id, param, nparam); - } + CONS_Alert(CONS_ERROR, M_GetText("NetXCmd buffer full, cannot add netcmd %d! (size: %d, needed: %s)\n"), id, localtextcmd[0], sizeu1(nparam)); return; } - WriteNetXCmd(localtextcmd, id, param, nparam); + localtextcmd[0]++; + localtextcmd[localtextcmd[0]] = (UINT8)id; + if (param && nparam) + { + M_Memcpy(&localtextcmd[localtextcmd[0]+1], param, nparam); + localtextcmd[0] = (UINT8)(localtextcmd[0] + (UINT8)nparam); + } } // splitscreen player @@ -105,42 +59,16 @@ void SendNetXCmd2(netxcmd_t id, const void *param, size_t nparam) { if (localtextcmd2[0]+2+nparam > MAXTEXTCMD) { - textcmdbuf_t *buf = textcmdbuf2; - - if (2+nparam > MAXTEXTCMD) - { - CONS_Alert(CONS_ERROR, M_GetText("packet too large to fit NetXCmd, cannot add netcmd %d! (size: %s, max: %d)\n"), id, sizeu1(2+nparam), MAXTEXTCMD); - return; - } - - // for future reference: if (cv_debug) != debug disabled. - CONS_Alert(CONS_NOTICE, M_GetText("NetXCmd buffer full, delaying netcmd %d... (size: %d, needed: %s)\n"), id, localtextcmd2[0], sizeu1(nparam)); - if (buf == NULL) - { - textcmdbuf2 = Z_Malloc(sizeof(textcmdbuf_t), PU_STATIC, NULL); - textcmdbuf2->cmd[0] = 0; - textcmdbuf2->next = NULL; - WriteNetXCmd(textcmdbuf2->cmd, id, param, nparam); - return; - } - - while (buf->next != NULL) - buf = buf->next; - - if (buf->cmd[0]+2+nparam > MAXTEXTCMD) - { - buf->next = Z_Malloc(sizeof(textcmdbuf_t), PU_STATIC, NULL); - buf->next->cmd[0] = 0; - buf->next->next = NULL; - WriteNetXCmd(buf->next->cmd, id, param, nparam); - } - else - { - WriteNetXCmd(buf->cmd, id, param, nparam); - } + I_Error("No more place in the buffer for netcmd %d\n",id); return; } - WriteNetXCmd(localtextcmd2, id, param, nparam); + localtextcmd2[0]++; + localtextcmd2[localtextcmd2[0]] = (UINT8)id; + if (param && nparam) + { + M_Memcpy(&localtextcmd2[localtextcmd2[0]+1], param, nparam); + localtextcmd2[0] = (UINT8)(localtextcmd2[0] + (UINT8)nparam); + } } UINT8 GetFreeXCmdSize(void) @@ -417,16 +345,7 @@ void CL_SendNetCommands(void) M_Memcpy(netbuffer->u.textcmd,localtextcmd, localtextcmd[0]+1); // All extra data have been sent if (HSendPacket(servernode, true, 0, localtextcmd[0]+1)) // Send can fail... - { localtextcmd[0] = 0; - if (textcmdbuf != NULL) - { - textcmdbuf_t *buf = textcmdbuf; - M_Memcpy(localtextcmd, textcmdbuf->cmd, textcmdbuf->cmd[0]+1); - textcmdbuf = textcmdbuf->next; - Z_Free(buf); - } - } } // Send extra data if needed for player 2 (splitscreen) @@ -436,16 +355,7 @@ void CL_SendNetCommands(void) M_Memcpy(netbuffer->u.textcmd, localtextcmd2, localtextcmd2[0]+1); // All extra data have been sent if (HSendPacket(servernode, true, 0, localtextcmd2[0]+1)) // Send can fail... - { localtextcmd2[0] = 0; - if (textcmdbuf2 != NULL) - { - textcmdbuf_t *buf = textcmdbuf2; - M_Memcpy(localtextcmd2, textcmdbuf2->cmd, textcmdbuf2->cmd[0]+1); - textcmdbuf2 = textcmdbuf2->next; - Z_Free(buf); - } - } } }