base
This commit is contained in:
parent
0286bd63f1
commit
6a68ba0bd0
7 changed files with 78 additions and 8 deletions
|
|
@ -20,5 +20,6 @@
|
||||||
#include <GearSrc/SoundDriver.h>
|
#include <GearSrc/SoundDriver.h>
|
||||||
#include <GearSrc/SoundEngine.h>
|
#include <GearSrc/SoundEngine.h>
|
||||||
#include <GearSrc/Sound.h>
|
#include <GearSrc/Sound.h>
|
||||||
|
#include <GearSrc/Net.h>
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,8 @@
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define GSNetDefaultPort 23903
|
||||||
|
|
||||||
/* net_client.c */
|
/* net_client.c */
|
||||||
GSDECL GSNetClient GSNetClientOpen(GSClient client, const char* hostname, int port);
|
GSDECL GSNetClient GSNetClientOpen(GSClient client, const char* hostname, int port);
|
||||||
GSDECL void GSNetClientClose(GSNetClient client);
|
GSDECL void GSNetClientClose(GSNetClient client);
|
||||||
|
|
|
||||||
|
|
@ -79,6 +79,8 @@ typedef void* GSModel;
|
||||||
typedef void* GSSoundDriver;
|
typedef void* GSSoundDriver;
|
||||||
typedef void* GSSoundEngine;
|
typedef void* GSSoundEngine;
|
||||||
typedef void* GSSound;
|
typedef void* GSSound;
|
||||||
|
typedef void* GSNetClient;
|
||||||
|
typedef void* GSNetServer;
|
||||||
#endif
|
#endif
|
||||||
typedef float GSNumber;
|
typedef float GSNumber;
|
||||||
typedef GSNumber GSVector2[2];
|
typedef GSNumber GSVector2[2];
|
||||||
|
|
@ -244,10 +246,14 @@ struct _GSSoundEngine {
|
||||||
|
|
||||||
struct _GSNetClient {
|
struct _GSNetClient {
|
||||||
GSEngine engine;
|
GSEngine engine;
|
||||||
|
|
||||||
|
int fd;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _GSNetServer {
|
struct _GSNetServer {
|
||||||
GSEngine engine;
|
GSEngine engine;
|
||||||
|
|
||||||
|
int fd;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _GSClient {
|
struct _GSClient {
|
||||||
|
|
@ -274,10 +280,14 @@ struct _GSClient {
|
||||||
GSBool skybox_enabled;
|
GSBool skybox_enabled;
|
||||||
|
|
||||||
GSSoundEngine sengine;
|
GSSoundEngine sengine;
|
||||||
|
|
||||||
|
GSNetClient net;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _GSServer {
|
struct _GSServer {
|
||||||
GSEngine engine;
|
GSEngine engine;
|
||||||
|
|
||||||
|
GSNetServer net;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _GSEngineLog {
|
struct _GSEngineLog {
|
||||||
|
|
@ -325,6 +335,7 @@ struct _GSVersion {
|
||||||
struct _GSEngineParam {
|
struct _GSEngineParam {
|
||||||
int client;
|
int client;
|
||||||
int server;
|
int server;
|
||||||
|
int port;
|
||||||
GSGLSwapBufferCallback gl_swapbuffer;
|
GSGLSwapBufferCallback gl_swapbuffer;
|
||||||
GSReadyCallback ready;
|
GSReadyCallback ready;
|
||||||
GSTickCallback tick;
|
GSTickCallback tick;
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@
|
||||||
#include <GearSrc/Server.h>
|
#include <GearSrc/Server.h>
|
||||||
#include <GearSrc/Resource.h>
|
#include <GearSrc/Resource.h>
|
||||||
#include <GearSrc/String.h>
|
#include <GearSrc/String.h>
|
||||||
|
#include <GearSrc/Net.h>
|
||||||
|
|
||||||
#include <stb_ds.h>
|
#include <stb_ds.h>
|
||||||
|
|
||||||
|
|
@ -67,27 +68,21 @@ GSEngine GSEngineCreate(GSEngineParam* param) {
|
||||||
|
|
||||||
if(engine != NULL && param->client && (engine->client = GSClientCreate(engine)) == NULL) {
|
if(engine != NULL && param->client && (engine->client = GSClientCreate(engine)) == NULL) {
|
||||||
GSLog(engine, GSLogError, "Failed to create client");
|
GSLog(engine, GSLogError, "Failed to create client");
|
||||||
|
|
||||||
GSEngineDestroy(engine);
|
GSEngineDestroy(engine);
|
||||||
|
|
||||||
engine = NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(engine != NULL && param->server && (engine->server = GSServerCreate(engine)) == NULL) {
|
if(engine != NULL && param->server && (engine->server = GSServerCreate(engine)) == NULL) {
|
||||||
GSLog(engine, GSLogError, "Failed to create server");
|
GSLog(engine, GSLogError, "Failed to create server");
|
||||||
|
|
||||||
GSEngineDestroy(engine);
|
GSEngineDestroy(engine);
|
||||||
|
|
||||||
engine = NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(param->client) engine->shutdown++;
|
if(param->client) engine->shutdown++;
|
||||||
if(param->server) engine->shutdown++;
|
if(param->server) engine->shutdown++;
|
||||||
|
|
||||||
if(engine == NULL) {
|
|
||||||
GSLog(engine, GSLogError, "Failed to create engine");
|
|
||||||
}
|
|
||||||
|
|
||||||
return engine;
|
return engine;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -110,6 +105,7 @@ void GSEngineParamInit(GSEngineParam* param) {
|
||||||
|
|
||||||
param->server = 0;
|
param->server = 0;
|
||||||
param->client = 1;
|
param->client = 1;
|
||||||
|
param->port = GSNetDefaultPort;
|
||||||
param->gl_swapbuffer = NULL;
|
param->gl_swapbuffer = NULL;
|
||||||
param->ready = NULL;
|
param->ready = NULL;
|
||||||
param->sleep = NULL;
|
param->sleep = NULL;
|
||||||
|
|
|
||||||
|
|
@ -1 +1,26 @@
|
||||||
#include <GearSrc/Net.h>
|
#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);
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -1 +1,26 @@
|
||||||
#include <GearSrc/Net.h>
|
#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);
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
#include <GearSrc/Server.h>
|
#include <GearSrc/Server.h>
|
||||||
|
|
||||||
#include <GearSrc/Log.h>
|
#include <GearSrc/Log.h>
|
||||||
|
#include <GearSrc/Net.h>
|
||||||
|
|
||||||
GSServer GSServerCreate(GSEngine engine) {
|
GSServer GSServerCreate(GSEngine engine) {
|
||||||
GSServer server = malloc(sizeof(*server));
|
GSServer server = malloc(sizeof(*server));
|
||||||
|
|
@ -9,12 +10,21 @@ GSServer GSServerCreate(GSEngine engine) {
|
||||||
|
|
||||||
server->engine = 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");
|
GSLog(engine, GSLogInfo, "Created server");
|
||||||
|
|
||||||
return server;
|
return server;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GSServerDestroy(GSServer server) {
|
void GSServerDestroy(GSServer server) {
|
||||||
|
if(server->net != NULL) GSNetServerClose(server->net);
|
||||||
|
|
||||||
GSLog(server->engine, GSLogInfo, "Destroyed server");
|
GSLog(server->engine, GSLogInfo, "Destroyed server");
|
||||||
|
|
||||||
free(server);
|
free(server);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue