functional

This commit is contained in:
Nishi 2026-01-30 00:36:12 +09:00
commit 2d27818e26
Signed by: nishi
GPG key ID: 27EF69B208EB9343
5 changed files with 40 additions and 4 deletions

View file

@ -56,6 +56,8 @@ GSDECL void GSNetPacketWrite(GSNetSocket sock, GSNetPacket* packet, GSNetAddress
/* net_state.c */
GSDECL void GSNetStateRead(GSNetState* state, GSNetSocket sock, GSNetPacket* packet, GSNetAddress* address);
GSDECL void GSNetStateWrite(GSNetState* state, GSNetSocket sock, GSNetAddress* address);
GSDECL void GSNetStateInit(GSNetState* state, GSEngine engine);
GSDECL void GSNetStateDeinit(GSNetState* state);
#ifdef __cplusplus
}

View file

@ -162,6 +162,8 @@ struct _GSNetState {
GSBinary* rx;
GSBinary* tx;
GSBinary buffer;
void* opaque;
};

View file

@ -19,8 +19,8 @@ GSNetClient GSNetClientOpen(GSClient client, const char* hostname, int port) {
return NULL;
}
GSNetStateInit(&net->state, client->engine);
strcpy(net->state.name, "Client");
net->state.engine = net->engine;
return net;
}

View file

@ -35,7 +35,7 @@ void GSNetServerStep(GSNetServer net) {
GSNetState v;
memset(&v, 0, sizeof(v));
v.engine = net->engine;
GSNetStateInit(&v, net->engine);
strcpy(v.name, "Server");
hmput(net->client, addr, v);

View file

@ -30,6 +30,7 @@ void GSNetStateRead(GSNetState* state, GSNetSocket sock, GSNetPacket* packet, GS
state->txseq = 0;
state->txindex++;
free(state->tx[0].data);
arrdel(state->tx, 0);
}
}
@ -40,12 +41,21 @@ void GSNetStateRead(GSNetState* state, GSNetSocket sock, GSNetPacket* packet, GS
if(state->rxseq == 0) {
state->rxtotal = GSEndianSwapU32BE(*(GSU32*)packet->data);
}
/* TODO: buffer what it got */
state->buffer.data = malloc(state->rxtotal * (508 - sizeof(packet->header)));
state->buffer.size = 0;
} else {
memcpy(((unsigned char*)state->buffer.data) + state->buffer.size, packet->data, packet->size);
state->buffer.size += packet->size;
}
state->rxseq++;
if(state->rxseq == (state->rxtotal + 1)) {
arrput(state->rx, state->buffer);
state->buffer.data = NULL;
state->rxseq = 0;
state->rxindex++;
}
@ -79,6 +89,7 @@ void GSNetStateWrite(GSNetState* state, GSNetSocket sock, GSNetAddress* address)
GSNetPacketWrite(sock, &pkt, address);
free(state->tx[i].data);
arrdel(state->tx, i);
i--;
}
@ -127,3 +138,24 @@ void GSNetStateWrite(GSNetState* state, GSNetSocket sock, GSNetAddress* address)
}
}
}
void GSNetStateInit(GSNetState* state, GSEngine engine) {
memset(state, 0, sizeof(*state));
state->engine = engine;
}
void GSNetStateDeinit(GSNetState* state) {
int i;
for(i = 0; i < arrlen(state->rx); i++) {
free(state->rx[i].data);
}
arrfree(state->rx);
for(i = 0; i < arrlen(state->rx); i++) {
free(state->tx[i].data);
}
arrfree(state->tx);
if(state->buffer.data != NULL) free(state->buffer.data);
}