assaultfish/engine/src/net/net_client.c

47 lines
966 B
C
Raw Normal View History

2026-01-29 15:01:53 +09:00
#include <GearSrc/Net.h>
2026-01-29 15:23:28 +09:00
#include <GearSrc/Log.h>
2026-01-29 17:28:39 +09:00
#include <GearSrc/Endian.h>
#include <stb_ds.h>
2026-01-29 15:23:28 +09:00
GSNetClient GSNetClientOpen(GSClient client, const char* hostname, int port) {
GSNetClient net = malloc(sizeof(*net));
memset(net, 0, sizeof(*net));
net->engine = client->engine;
2026-01-29 18:34:15 +09:00
if((net->fd = GSNetBaseClient(hostname, port, &net->address)) < 0) {
2026-01-29 15:23:28 +09:00
GSLog(client->engine, GSLogError, "Failed to initialize socket");
GSNetClientClose(net);
return NULL;
}
2026-01-29 17:48:51 +09:00
net->state.engine = net->engine;
2026-01-29 17:28:39 +09:00
GSBinary b;
b.data = strdup("Hello");
b.size = 5;
2026-01-29 17:48:51 +09:00
arrput(net->state.tx, b);
2026-01-29 17:28:39 +09:00
2026-01-29 15:23:28 +09:00
return net;
}
2026-01-29 16:43:44 +09:00
void GSNetClientStep(GSNetClient net) {
2026-01-29 17:48:51 +09:00
GSNetPacket pkt;
2026-01-29 16:43:44 +09:00
2026-01-29 17:48:51 +09:00
while(GSNetBaseHasData(net->fd)){
2026-01-29 18:34:15 +09:00
GSNetPacketRead(net->fd, &pkt, &net->address);
GSNetStateRead(&net->state, net->fd, &pkt, &net->address);
2026-01-29 17:28:39 +09:00
}
2026-01-29 18:34:15 +09:00
GSNetStateWrite(&net->state, net->fd, &net->address);
2026-01-29 16:43:44 +09:00
}
void GSNetClientClose(GSNetClient net) {
if(net->fd >= 0) GSNetBaseClose(net->fd);
2026-01-29 15:23:28 +09:00
2026-01-29 16:43:44 +09:00
free(net);
2026-01-29 15:23:28 +09:00
}