This commit is contained in:
Nishi 2026-01-29 17:48:51 +09:00
commit abce75957e
3 changed files with 30 additions and 81 deletions

View file

@ -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) {