This commit is contained in:
Nishi 2026-01-29 15:23:28 +09:00
commit 6a68ba0bd0
Signed by: nishi
GPG key ID: 27EF69B208EB9343
7 changed files with 78 additions and 8 deletions

View file

@ -20,5 +20,6 @@
#include <GearSrc/SoundDriver.h>
#include <GearSrc/SoundEngine.h>
#include <GearSrc/Sound.h>
#include <GearSrc/Net.h>
#endif

View file

@ -8,6 +8,8 @@
extern "C" {
#endif
#define GSNetDefaultPort 23903
/* net_client.c */
GSDECL GSNetClient GSNetClientOpen(GSClient client, const char* hostname, int port);
GSDECL void GSNetClientClose(GSNetClient client);

View file

@ -79,6 +79,8 @@ typedef void* GSModel;
typedef void* GSSoundDriver;
typedef void* GSSoundEngine;
typedef void* GSSound;
typedef void* GSNetClient;
typedef void* GSNetServer;
#endif
typedef float GSNumber;
typedef GSNumber GSVector2[2];
@ -244,10 +246,14 @@ struct _GSSoundEngine {
struct _GSNetClient {
GSEngine engine;
int fd;
};
struct _GSNetServer {
GSEngine engine;
int fd;
};
struct _GSClient {
@ -274,10 +280,14 @@ struct _GSClient {
GSBool skybox_enabled;
GSSoundEngine sengine;
GSNetClient net;
};
struct _GSServer {
GSEngine engine;
GSNetServer net;
};
struct _GSEngineLog {
@ -325,6 +335,7 @@ struct _GSVersion {
struct _GSEngineParam {
int client;
int server;
int port;
GSGLSwapBufferCallback gl_swapbuffer;
GSReadyCallback ready;
GSTickCallback tick;

View file

@ -6,6 +6,7 @@
#include <GearSrc/Server.h>
#include <GearSrc/Resource.h>
#include <GearSrc/String.h>
#include <GearSrc/Net.h>
#include <stb_ds.h>
@ -67,27 +68,21 @@ GSEngine GSEngineCreate(GSEngineParam* param) {
if(engine != NULL && param->client && (engine->client = GSClientCreate(engine)) == NULL) {
GSLog(engine, GSLogError, "Failed to create client");
GSEngineDestroy(engine);
engine = NULL;
return NULL;
}
if(engine != NULL && param->server && (engine->server = GSServerCreate(engine)) == NULL) {
GSLog(engine, GSLogError, "Failed to create server");
GSEngineDestroy(engine);
engine = NULL;
return NULL;
}
if(param->client) engine->shutdown++;
if(param->server) engine->shutdown++;
if(engine == NULL) {
GSLog(engine, GSLogError, "Failed to create engine");
}
return engine;
}
@ -110,6 +105,7 @@ void GSEngineParamInit(GSEngineParam* param) {
param->server = 0;
param->client = 1;
param->port = GSNetDefaultPort;
param->gl_swapbuffer = NULL;
param->ready = NULL;
param->sleep = NULL;

View file

@ -1 +1,26 @@
#include <GearSrc/Net.h>
#include <GearSrc/Log.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->fd = GSNetBaseClient(hostname, port)) < 0) {
GSLog(client->engine, GSLogError, "Failed to initialize socket");
GSNetClientClose(net);
return NULL;
}
return net;
}
void GSNetClientClose(GSNetClient client) {
if(client->fd >= 0) GSNetBaseClose(client->fd);
free(client);
}

View file

@ -1 +1,26 @@
#include <GearSrc/Net.h>
#include <GearSrc/Log.h>
GSNetServer GSNetServerOpen(GSServer server, int port) {
GSNetServer net = malloc(sizeof(*net));
memset(net, 0, sizeof(*net));
net->engine = server->engine;
if((net->fd = GSNetBaseServer(port)) < 0) {
GSLog(server->engine, GSLogError, "Failed to initialize socket");
GSNetServerClose(net);
return NULL;
}
return net;
}
void GSNetServerClose(GSNetServer server) {
if(server->fd >= 0) GSNetBaseClose(server->fd);
free(server);
}

View file

@ -1,6 +1,7 @@
#include <GearSrc/Server.h>
#include <GearSrc/Log.h>
#include <GearSrc/Net.h>
GSServer GSServerCreate(GSEngine engine) {
GSServer server = malloc(sizeof(*server));
@ -9,12 +10,21 @@ GSServer GSServerCreate(GSEngine engine) {
server->engine = engine;
if((server->net = GSNetServerOpen(server, engine->param->port)) == NULL) {
GSLog(engine, GSLogError, "Failed to start server");
GSServerDestroy(server);
return NULL;
}
GSLog(engine, GSLogInfo, "Created server");
return server;
}
void GSServerDestroy(GSServer server) {
if(server->net != NULL) GSNetServerClose(server->net);
GSLog(server->engine, GSLogInfo, "Destroyed server");
free(server);