From 6a68ba0bd037079f3510ad2a6bcf856533536566 Mon Sep 17 00:00:00 2001 From: NishiOwO Date: Thu, 29 Jan 2026 15:23:28 +0900 Subject: [PATCH] base --- engine/include/GearSrc/Foundation.h | 1 + engine/include/GearSrc/Net.h | 2 ++ engine/include/GearSrc/TypeDefs.h | 11 +++++++++++ engine/src/core.c | 12 ++++-------- engine/src/net/net_client.c | 25 +++++++++++++++++++++++++ engine/src/net/net_server.c | 25 +++++++++++++++++++++++++ engine/src/server.c | 10 ++++++++++ 7 files changed, 78 insertions(+), 8 deletions(-) diff --git a/engine/include/GearSrc/Foundation.h b/engine/include/GearSrc/Foundation.h index 6549585..1221779 100644 --- a/engine/include/GearSrc/Foundation.h +++ b/engine/include/GearSrc/Foundation.h @@ -20,5 +20,6 @@ #include #include #include +#include #endif diff --git a/engine/include/GearSrc/Net.h b/engine/include/GearSrc/Net.h index 683c6bb..2aef51b 100644 --- a/engine/include/GearSrc/Net.h +++ b/engine/include/GearSrc/Net.h @@ -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); diff --git a/engine/include/GearSrc/TypeDefs.h b/engine/include/GearSrc/TypeDefs.h index fc68deb..83b0a96 100644 --- a/engine/include/GearSrc/TypeDefs.h +++ b/engine/include/GearSrc/TypeDefs.h @@ -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; diff --git a/engine/src/core.c b/engine/src/core.c index 0d2ab2a..9be42e6 100644 --- a/engine/src/core.c +++ b/engine/src/core.c @@ -6,6 +6,7 @@ #include #include #include +#include #include @@ -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; diff --git a/engine/src/net/net_client.c b/engine/src/net/net_client.c index 816f2be..ac11a05 100644 --- a/engine/src/net/net_client.c +++ b/engine/src/net/net_client.c @@ -1 +1,26 @@ #include + +#include + +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); +} diff --git a/engine/src/net/net_server.c b/engine/src/net/net_server.c index 816f2be..9471af7 100644 --- a/engine/src/net/net_server.c +++ b/engine/src/net/net_server.c @@ -1 +1,26 @@ #include + +#include + +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); +} diff --git a/engine/src/server.c b/engine/src/server.c index 96d1a2d..35dc2c3 100644 --- a/engine/src/server.c +++ b/engine/src/server.c @@ -1,6 +1,7 @@ #include #include +#include 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);