From abce75957ec7b4869a67e553392318de82274f47 Mon Sep 17 00:00:00 2001 From: NishiOwO Date: Thu, 29 Jan 2026 17:48:51 +0900 Subject: [PATCH] mmm --- engine/include/GearSrc/Net.h | 4 ++ engine/include/GearSrc/TypeDefs.h | 31 ++++++++----- engine/src/net/net_client.c | 76 +++---------------------------- 3 files changed, 30 insertions(+), 81 deletions(-) diff --git a/engine/include/GearSrc/Net.h b/engine/include/GearSrc/Net.h index 77ed36b..7eefd06 100644 --- a/engine/include/GearSrc/Net.h +++ b/engine/include/GearSrc/Net.h @@ -34,6 +34,10 @@ GSDECL void GSNetBaseWrite(int fd, void* data, int size, GSNetAddress* address GSDECL void GSNetPacketRead(int fd, GSNetPacket* packet, GSNetAddress* address); GSDECL void GSNetPacketWrite(int fd, GSNetPacket* packet, GSNetAddress* address); +/* net_state.c */ +GSDECL void GSNetStateRead(GSNetState* state, int fd, GSNetPacket* packet, GSNetAddress* address); +GSDECL void GSNetStateWrite(GSNetState* state, int fd, GSNetAddress* address); + #ifdef __cplusplus } #endif diff --git a/engine/include/GearSrc/TypeDefs.h b/engine/include/GearSrc/TypeDefs.h index 9b5680a..2117f57 100644 --- a/engine/include/GearSrc/TypeDefs.h +++ b/engine/include/GearSrc/TypeDefs.h @@ -49,6 +49,7 @@ typedef struct _GSNetPacketHeader GSNetPacketHeader; typedef struct _GSNetPacket GSNetPacket; typedef struct _GSNetAddress GSNetAddress; typedef struct _GSBinary GSBinary; +typedef struct _GSNetState GSNetState; #ifdef _GEARSRC typedef struct _GSClient* GSClient; typedef struct _GSServer* GSServer; @@ -138,6 +139,23 @@ struct _GSBinary { int size; }; +struct _GSNetState { + GSEngine engine; + + unsigned int rxseq; + unsigned int rxindex; + unsigned int rxtotal; + + unsigned int txseq; + unsigned int txindex; + unsigned int txtotal; + unsigned int txstate; + unsigned long txtick; + + GSBinary* rx; + GSBinary* tx; +}; + #ifdef _GEARSRC #include #include @@ -255,18 +273,7 @@ struct _GSNetClient { int fd; - unsigned int rxseq; - unsigned int rxindex; - unsigned int rxtotal; - - unsigned int txseq; - unsigned int txindex; - unsigned int txtotal; - unsigned int txstate; - unsigned long txtick; - - GSBinary* rx; - GSBinary* tx; + GSNetState state; }; struct _GSNetServer { diff --git a/engine/src/net/net_client.c b/engine/src/net/net_client.c index 3cbd1ea..e56eda4 100644 --- a/engine/src/net/net_client.c +++ b/engine/src/net/net_client.c @@ -19,88 +19,26 @@ GSNetClient GSNetClientOpen(GSClient client, const char* hostname, int port) { return NULL; } + net->state.engine = net->engine; + GSBinary b; b.data = strdup("Hello"); b.size = 5; - arrput(net->tx, b); + arrput(net->state.tx, b); return net; } -enum states { - Acknowledged = 0, - WaitingAcknowledge -}; - void GSNetClientStep(GSNetClient net) { - GSNetPacket pkt; + GSNetPacket pkt; GSNetAddress addr; - while(GSNetBaseHasData(net->fd)) { + while(GSNetBaseHasData(net->fd)){ GSNetPacketRead(net->fd, &pkt, &addr); - - if(pkt.header.flag & GSNetPacketFlagAcknowledge) { - if(arrlen(net->tx) > 0 && net->txstate == WaitingAcknowledge && net->txindex == pkt.header.index && net->txseq == pkt.header.seq) { - GSLog(net->engine, GSLogDebug, "Received ACK packet %d:%d", net->txindex, net->txseq); - - net->txstate = Acknowledged; - net->txseq++; - if(net->txseq == (net->txtotal + 1)){ - net->txseq = 0; - net->txindex++; - - arrdel(net->tx, 0); - } - } - } else { - if(net->rxindex == pkt.header.index && net->rxseq == pkt.header.seq) { - GSLog(net->engine, GSLogDebug, "Received packet %d:%d", net->rxindex, net->rxseq); - - pkt.header.flag |= GSNetPacketFlagAcknowledge; - pkt.header.index = net->rxindex; - pkt.header.seq = net->rxseq; - pkt.size = 0; - - if(net->rxseq == 0){ - net->rxtotal = GSEndianSwapU32BE(*(GSU32*)pkt.data); - } - - GSNetPacketWrite(net->fd, &pkt, &addr); - - net->rxseq++; - if(net->rxseq == (net->rxtotal + 1)){ - net->rxseq = 0; - net->rxindex++; - } - } - } + GSNetStateRead(&net->state, net->fd, &pkt, &addr); } - if(arrlen(net->tx) > 0){ - if(net->txstate == Acknowledged){ - int n = net->tx[0].size; - - if(net->txseq == 0){ - net->txtotal = 0; - - while(n > 0){ - n -= 508 - sizeof(pkt.header); - net->txtotal++; - } - - } - - net->txstate = WaitingAcknowledge; - if(net->engine->param->get_tick != NULL) net->txtick = net->engine->param->get_tick(); - - GSLog(net->engine, GSLogDebug, "Sent packet %d:%d", net->txindex, net->txseq); - }else if(net->engine->param->get_tick == NULL){ - }else if((net->engine->param->get_tick() - net->txtick) >= 500){ - GSLog(net->engine, GSLogDebug, "Lost pcaket %d:%d", net->txindex, net->txseq); - - net->txstate = Acknowledged; - } - } + GSNetStateWrite(&net->state, net->fd, &addr); } void GSNetClientClose(GSNetClient net) {