seems to work

This commit is contained in:
Nishi 2026-01-29 20:38:17 +09:00
commit f08ef9b687
7 changed files with 47 additions and 34 deletions

Binary file not shown.

Binary file not shown.

View file

@ -120,6 +120,7 @@ int GSNetBaseRead(GSNetSocket sock, void* data, int size, GSNetAddress* address)
n = recvfrom(sock->fd, data, size, 0, (struct sockaddr*)&addr, &len);
memset(address, 0, sizeof(*address));
address->address = addr.sin_addr.s_addr;
address->port = addr.sin_port;
}

View file

@ -21,10 +21,13 @@ GSNetClient GSNetClientOpen(GSClient client, const char* hostname, int port) {
net->state.engine = net->engine;
GSBinary b;
b.data = strdup("Hello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello world");
b.size = strlen(b.data);
arrput(net->state.tx, b);
int i;
for(i = 0; i < 5; i++){
GSBinary b;
b.data = malloc(512 * 5);
b.size = 512 * 5;
arrput(net->state.tx, b);
}
return net;
}
@ -32,12 +35,14 @@ GSNetClient GSNetClientOpen(GSClient client, const char* hostname, int port) {
void GSNetClientStep(GSNetClient net) {
GSNetPacket pkt;
while(GSNetBaseHasData(net->sock)) {
GSNetPacketRead(net->sock, &pkt, &net->address);
GSNetStateRead(&net->state, net->sock, &pkt, &net->address);
}
do{
while(GSNetBaseHasData(net->sock)) {
GSNetPacketRead(net->sock, &pkt, &net->address);
GSNetStateRead(&net->state, net->sock, &pkt, &net->address);
}
GSNetStateWrite(&net->state, net->sock, &net->address);
GSNetStateWrite(&net->state, net->sock, &net->address);
}while(GSNetBaseHasData(net->sock));
}
void GSNetClientClose(GSNetClient net) {

View file

@ -26,24 +26,29 @@ void GSNetServerStep(GSNetServer net) {
GSNetPacket pkt;
GSNetAddress addr;
while(GSNetBaseHasData(net->sock)) {
GSNetState v;
do{
while(GSNetBaseHasData(net->sock)) {
GSNetPacketRead(net->sock, &pkt, &addr);
memset(&v, 0, sizeof(v));
v.engine = net->engine;
i = hmgeti(net->client, addr);
if(i == -1){
GSNetState v;
GSNetPacketRead(net->sock, &pkt, &addr);
memset(&v, 0, sizeof(v));
v.engine = net->engine;
i = hmgeti(net->client, addr);
if(i != -1) v = net->client[i].value;
hmput(net->client, addr, v);
GSNetStateRead(&v, net->sock, &pkt, &addr);
hmput(net->client, addr, v);
}
i = hmgeti(net->client, addr);
}
for(i = 0; i < hmlen(net->client); i++) {
GSNetStateWrite(&net->client[i].value, net->sock, &net->client[i].key);
}
GSNetStateRead(&net->client[i].value, net->sock, &pkt, &addr);
}
for(i = 0; i < hmlen(net->client); i++) {
GSNetStateWrite(&net->client[i].value, net->sock, &net->client[i].key);
}
}while(GSNetBaseHasData(net->sock));
}
void GSNetServerClose(GSNetServer net) {

View file

@ -13,7 +13,7 @@ enum states {
void GSNetStateRead(GSNetState* state, GSNetSocket sock, GSNetPacket* packet, GSNetAddress* address) {
if(packet->header.flag & GSNetPacketFlagAcknowledge) {
if(arrlen(state->tx) > 0 && state->txstate == WaitingAcknowledge && state->txindex == packet->header.index && state->txseq == packet->header.seq) {
GSLog(state->engine, GSLogDebug, "Received ACK packet %d:%d", state->txindex, state->txseq);
GSLog(state->engine, GSLogDebug, "Received Acknowledge packet %d:%d", state->txindex, state->txseq);
state->txstate = Acknowledged;
state->txseq++;
@ -25,28 +25,30 @@ void GSNetStateRead(GSNetState* state, GSNetSocket sock, GSNetPacket* packet, GS
}
}
} else {
GSNetPacket pkt;
if(state->rxindex == packet->header.index && state->rxseq == packet->header.seq) {
GSNetPacket pkt;
GSLog(state->engine, GSLogDebug, "Received packet %d:%d", state->rxindex, state->rxseq);
pkt.header.flag |= GSNetPacketFlagAcknowledge;
pkt.header.index = state->rxindex;
pkt.header.seq = state->rxseq;
pkt.size = 0;
if(state->rxseq == 0) {
state->rxtotal = GSEndianSwapU32BE(*(GSU32*)pkt.data);
state->rxtotal = GSEndianSwapU32BE(*(GSU32*)packet->data);
}
GSNetPacketWrite(sock, &pkt, address);
state->rxseq++;
if(state->rxseq == (state->rxtotal + 1)) {
state->rxseq = 0;
state->rxindex++;
}
}
/* this is to prevent netcode from blowing up when
* ACK packet goes missing...
*/
pkt.header.flag |= GSNetPacketFlagAcknowledge;
pkt.header.index = packet->header.index;
pkt.header.seq = packet->header.seq;
pkt.size = 0;
GSNetPacketWrite(sock, &pkt, address);
}
}

@ -1 +1 @@
Subproject commit bbb20f081ef347f074912091e0f641b8104fc69a
Subproject commit 64c3cdb4a511b0b9efcd538a4c1bc82cbbda7dc8