seems to work
This commit is contained in:
parent
0ee72e3446
commit
f08ef9b687
7 changed files with 47 additions and 34 deletions
Binary file not shown.
Binary file not shown.
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
Loading…
Add table
Add a link
Reference in a new issue