From 829e6a9b76f344e8354dc73c0bfe6dbef0c2d18b Mon Sep 17 00:00:00 2001 From: NishiOwO Date: Thu, 29 Jan 2026 17:28:39 +0900 Subject: [PATCH] looks good --- data/mdl/crate.gsm | Bin 1591111 -> 1591111 bytes data/mdl/fish.gsm | Bin 931880 -> 931880 bytes engine/include/GearSrc/TypeDefs.h | 2 +- engine/src/core.c | 3 +- engine/src/net/net_client.c | 61 ++++++++++++++++++++++++++++-- 5 files changed, 59 insertions(+), 7 deletions(-) diff --git a/data/mdl/crate.gsm b/data/mdl/crate.gsm index ebc5c971a331de4341239aab571ff92c0ca6fa3a..61727788b6fc84fe39b7525102080934412873b6 100644 GIT binary patch delta 192 zcmX@!mw3D{(XBqf(VLM0448prAOmZ}x@nxb`6;P6dIfpu3=%pE7$jVtffXE3tIUE* z_`7GRXh{ delta 170 zcmXYnI|{;36h!ZP@fW}GA2(oWX)kCjY_zl-Q34?$jg6I9OdGJ0Y{E{&La=ia)>(%! zI51P3Gw%rR2+naiSt!Y3q`Q*w`k9zPxZU}qVDG2slQzx{ui?S_t8n9q=!b}MfBI|< zw3f@&vE%!EX1nSHLJ^uUh#Zk83Ph185hhV4Dnym25p|+LSVWU(5pAMFbcr6(zrjwX EUzm(BTmS$7 diff --git a/data/mdl/fish.gsm b/data/mdl/fish.gsm index 028436eb18ce9cb253fdd961400d98c51958c06d..b080492784a1cc8afa81eba52abe84dfd4762dce 100644 GIT binary patch delta 106 zcmZ4S!D7V+3xWCoM{h<3Fkl9fffKbQnHU%*3P>?7pXlZ>d4_P+#zZdRW+9PwArVF( nW&&bnAZ7t#Rv=~rVs;?r0Afxc<^p1FAm#yL-t9snd}1m9I;j?u delta 106 zcmZ4S!D7V+3xWCoM{h<3Fkl9fffKc*7#SuCNHPg?O?30vY|407Xky~>W+9PwArVF( nW&&bnAZ7t#Rv=~rVs;?r0Afxc<^p1FAm#yL-t9snd}1m9G$a<2 diff --git a/engine/include/GearSrc/TypeDefs.h b/engine/include/GearSrc/TypeDefs.h index 6fc3415..9b5680a 100644 --- a/engine/include/GearSrc/TypeDefs.h +++ b/engine/include/GearSrc/TypeDefs.h @@ -258,12 +258,12 @@ struct _GSNetClient { unsigned int rxseq; unsigned int rxindex; unsigned int rxtotal; - unsigned int rxstate; unsigned int txseq; unsigned int txindex; unsigned int txtotal; unsigned int txstate; + unsigned long txtick; GSBinary* rx; GSBinary* tx; diff --git a/engine/src/core.c b/engine/src/core.c index b7f5130..60466ca 100644 --- a/engine/src/core.c +++ b/engine/src/core.c @@ -158,8 +158,7 @@ void GSEngineLoop(GSEngine engine) { tick += 1.0 / engine->tps; if(tick >= 1) { - engine->tps_sampled += engine->tps; - engine->tps_sampled /= 2; + engine->tps_sampled = engine->tps; tick = tick - 1; } diff --git a/engine/src/net/net_client.c b/engine/src/net/net_client.c index ab07a40..3cbd1ea 100644 --- a/engine/src/net/net_client.c +++ b/engine/src/net/net_client.c @@ -1,6 +1,9 @@ #include #include +#include + +#include GSNetClient GSNetClientOpen(GSClient client, const char* hostname, int port) { GSNetClient net = malloc(sizeof(*net)); @@ -16,6 +19,11 @@ GSNetClient GSNetClientOpen(GSClient client, const char* hostname, int port) { return NULL; } + GSBinary b; + b.data = strdup("Hello"); + b.size = 5; + arrput(net->tx, b); + return net; } @@ -32,22 +40,67 @@ void GSNetClientStep(GSNetClient net) { GSNetPacketRead(net->fd, &pkt, &addr); if(pkt.header.flag & GSNetPacketFlagAcknowledge) { - if(net->txstate == WaitingAcknowledge && net->txindex == pkt.header.index && net->txseq == pkt.header.seq) { - GSLog(net->engine, GSLogDebug, "ACK received for %d:%d", net->txindex, net->txseq); + 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); - if(net->txseq == net->txtotal) net->txstate = Acknowledged; + net->txstate = Acknowledged; + net->txseq++; + if(net->txseq == (net->txtotal + 1)){ + net->txseq = 0; + net->txindex++; + + arrdel(net->tx, 0); + } } } else { - if(net->rxstate == Acknowledged && net->rxindex == pkt.header.index && net->rxseq == pkt.header.seq) { + 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++; + } } } } + + 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; + } + } } void GSNetClientClose(GSNetClient net) {