aboutsummaryrefslogtreecommitdiff
path: root/src/server.c
diff options
context:
space:
mode:
authorFranklin Wei <git@fwei.tk>2016-04-28 20:39:37 -0400
committerFranklin Wei <git@fwei.tk>2016-04-28 20:39:37 -0400
commit7f3ba14388a586a946d721a71eb3a9862f7f6c02 (patch)
tree05c96d39815a3719131ad966a73d1ba40fd96d75 /src/server.c
parent0db524c05e0e077c06c7d02eaa2921159df04313 (diff)
downloadnetcosm-7f3ba14388a586a946d721a71eb3a9862f7f6c02.zip
netcosm-7f3ba14388a586a946d721a71eb3a9862f7f6c02.tar.gz
netcosm-7f3ba14388a586a946d721a71eb3a9862f7f6c02.tar.bz2
netcosm-7f3ba14388a586a946d721a71eb3a9862f7f6c02.tar.xz
fix build dependency checking, cleanup, simulation callback
Diffstat (limited to 'src/server.c')
-rw-r--r--src/server.c55
1 files changed, 41 insertions, 14 deletions
diff --git a/src/server.c b/src/server.c
index 75c87f6..b736124 100644
--- a/src/server.c
+++ b/src/server.c
@@ -42,7 +42,7 @@ static uint16_t port = DEFAULT_PORT;
static int server_socket;
/* for debugging: */
-static char *world_module = "build/worlds/netcosm_default.so";
+static char *world_module = "build/worlds/dunnet.so";
static char *module_handle = NULL;
/* save after every X changes to the world state */
@@ -188,27 +188,48 @@ static void check_userfile(void)
static void load_worldfile(void)
{
/* load the world module */
+
module_handle = dlopen(world_module, RTLD_NOW);
if(!module_handle)
error("cannot load world module `%s' (%s)", world_module, dlerror());
/* load symbols */
- size_t *ptr;
-
- netcosm_verb_classes = dlsym(module_handle, "netcosm_verb_classes");
- ptr = dlsym(module_handle, "netcosm_verb_classes_sz");
- netcosm_verb_classes_sz = *ptr;
+ {
+ size_t *ptr;
- netcosm_obj_classes = dlsym(module_handle, "netcosm_obj_classes");
- ptr = dlsym(module_handle, "netcosm_obj_classes_sz");
- netcosm_obj_classes_sz = *ptr;
+ netcosm_verb_classes = dlsym(module_handle, "netcosm_verb_classes");
+ ptr = dlsym(module_handle, "netcosm_verb_classes_sz");
+ netcosm_verb_classes_sz = *ptr;
- netcosm_world = dlsym(module_handle, "netcosm_world");
- ptr = dlsym(module_handle, "netcosm_world_sz");
- netcosm_world_sz = *ptr;
+ netcosm_obj_classes = dlsym(module_handle, "netcosm_obj_classes");
+ ptr = dlsym(module_handle, "netcosm_obj_classes_sz");
+ netcosm_obj_classes_sz = *ptr;
- char **tmp = dlsym(module_handle, "netcosm_world_name");
- netcosm_world_name = *tmp;
+ netcosm_world = dlsym(module_handle, "netcosm_world");
+ ptr = dlsym(module_handle, "netcosm_world_sz");
+ netcosm_world_sz = *ptr;
+ }
+ {
+ char **ptr = dlsym(module_handle, "netcosm_world_name");
+ netcosm_world_name = *ptr;
+ }
+ {
+ void *ptr;
+ ptr = dlsym(module_handle, "netcosm_world_simulation_cb");
+ netcosm_world_simulation_cb = ptr;
+ }
+ {
+ unsigned *ptr;
+ ptr = dlsym(module_handle, "netcosm_world_simulation_interval");
+ if(ptr)
+ netcosm_world_simulation_interval = *ptr;
+ else
+ {
+ netcosm_world_simulation_interval = 0;
+ if(netcosm_world_simulation_cb)
+ error("have simulation callback, but no interval specified");
+ }
+ }
if(access(WORLDFILE, F_OK) < 0)
{
@@ -483,6 +504,12 @@ int server_main(int argc, char *argv[])
parse_args(argc, argv);
+ /* load default if none specified */
+ if(!world_module)
+ {
+ error("no world module specified");
+ }
+
/* this must be done before any world module data is used */
load_worldfile();