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/SoundEngine.h>
|
||||
#include <GearSrc/Sound.h>
|
||||
#include <GearSrc/Net.h>
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue