assaultfish/engine/src/net/net_client.c
2026-01-29 20:39:10 +09:00

52 lines
1.1 KiB
C

#include <GearSrc/Net.h>
#include <GearSrc/Log.h>
#include <GearSrc/Endian.h>
#include <stb_ds.h>
GSNetClient GSNetClientOpen(GSClient client, const char* hostname, int port) {
GSNetClient net = malloc(sizeof(*net));
memset(net, 0, sizeof(*net));
net->engine = client->engine;
if((net->sock = GSNetBaseClient(hostname, port, &net->address)) < 0) {
GSLog(client->engine, GSLogError, "Failed to initialize socket");
GSNetClientClose(net);
return NULL;
}
net->state.engine = net->engine;
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;
}
void GSNetClientStep(GSNetClient net) {
GSNetPacket pkt;
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);
} while(GSNetBaseHasData(net->sock));
}
void GSNetClientClose(GSNetClient net) {
if(net->sock != NULL) GSNetBaseClose(net->sock);
free(net);
}