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;
|
|
|
|
|
|
|
|
|
|
if((net->fd = GSNetBaseClient(hostname, port)) < 0) {
|
|
|
|
|
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
|
|
|
GSNetAddress addr;
|
|
|
|
|
|
2026-01-29 17:48:51 +09:00
|
|
|
while(GSNetBaseHasData(net->fd)){
|
2026-01-29 16:43:44 +09:00
|
|
|
GSNetPacketRead(net->fd, &pkt, &addr);
|
2026-01-29 17:48:51 +09:00
|
|
|
GSNetStateRead(&net->state, net->fd, &pkt, &addr);
|
2026-01-29 17:28:39 +09:00
|
|
|
}
|
|
|
|
|
|
2026-01-29 17:48:51 +09:00
|
|
|
GSNetStateWrite(&net->state, net->fd, &addr);
|
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
|
|
|
}
|