do all the world initialisation stuff i previously did plus some temporary serverside rendering so i know it works
This commit is contained in:
parent
0c80ea5f10
commit
f64646b40b
3
TODO.gmi
3
TODO.gmi
@ -2,11 +2,12 @@
|
|||||||
A list of things I'd like to accomplish
|
A list of things I'd like to accomplish
|
||||||
|
|
||||||
## In Progress
|
## In Progress
|
||||||
* Initialise a world again
|
* Serialise data to JSON for socket data transmission
|
||||||
* Send world data to client
|
* Send world data to client
|
||||||
* Have client render world data (return to pre-daemonised equivalent state)
|
* Have client render world data (return to pre-daemonised equivalent state)
|
||||||
|
|
||||||
## Completed
|
## Completed
|
||||||
|
* Initialise a world again
|
||||||
* Expose a socket or pipe on the daemon for the client
|
* Expose a socket or pipe on the daemon for the client
|
||||||
* Create client to connect to daemon
|
* Create client to connect to daemon
|
||||||
* Daemonise the serverside
|
* Daemonise the serverside
|
||||||
|
@ -1,7 +1,11 @@
|
|||||||
#ifndef DAEMON_DATA_H
|
#ifndef DAEMON_DATA_H
|
||||||
#define DAEMON_DATA_H
|
#define DAEMON_DATA_H
|
||||||
|
|
||||||
|
#include "world.h"
|
||||||
|
|
||||||
struct data_t {
|
struct data_t {
|
||||||
|
struct world_t world;
|
||||||
|
|
||||||
int socket;
|
int socket;
|
||||||
int socket_accept;
|
int socket_accept;
|
||||||
};
|
};
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <stdint.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <sys/syslog.h>
|
#include <sys/syslog.h>
|
||||||
@ -20,7 +21,7 @@ static void handle_signal(int _) {
|
|||||||
|
|
||||||
|
|
||||||
enum error_t game_loop(struct data_t *data) {
|
enum error_t game_loop(struct data_t *data) {
|
||||||
char buffer[1024] = { 0 };
|
uint8_t buffer[1024] = { 0 };
|
||||||
|
|
||||||
read(data->socket_accept, buffer, 1024);
|
read(data->socket_accept, buffer, 1024);
|
||||||
write(data->socket_accept, buffer, 1024);
|
write(data->socket_accept, buffer, 1024);
|
||||||
@ -30,12 +31,15 @@ enum error_t game_loop(struct data_t *data) {
|
|||||||
|
|
||||||
|
|
||||||
int main(int argc, char **argv) {
|
int main(int argc, char **argv) {
|
||||||
|
// Set up variables
|
||||||
enum error_t err = ERR_OK;
|
enum error_t err = ERR_OK;
|
||||||
struct data_t daemon_data = { 0 };
|
struct data_t data = { 0 };
|
||||||
|
|
||||||
|
// Signal handling; TODO: should probably improve this
|
||||||
signal(SIGINT, handle_signal);
|
signal(SIGINT, handle_signal);
|
||||||
signal(SIGTERM, handle_signal);
|
signal(SIGTERM, handle_signal);
|
||||||
|
|
||||||
|
// Handle commandline options
|
||||||
struct options_t options = { 0 };
|
struct options_t options = { 0 };
|
||||||
opts_default(&options);
|
opts_default(&options);
|
||||||
|
|
||||||
@ -45,12 +49,49 @@ int main(int argc, char **argv) {
|
|||||||
err = opts_init(&options);
|
err = opts_init(&options);
|
||||||
if (err) goto handle_error;
|
if (err) goto handle_error;
|
||||||
|
|
||||||
err = sock_loop(&daemon_data, game_loop);
|
// World initialisation
|
||||||
|
err = world_init(&data.world, 10, 10);
|
||||||
if (err) goto handle_error;
|
if (err) goto handle_error;
|
||||||
|
|
||||||
|
err = world_register_entity(&data.world, "john", 'j');
|
||||||
|
if (err) goto handle_error_world;
|
||||||
|
|
||||||
|
err = world_place_entity(&data.world, 1, 3, 7);
|
||||||
|
if (err) goto handle_error_world;
|
||||||
|
|
||||||
|
// Temporary code because I just realised I need to properly serialise
|
||||||
|
// data because don't work cross-socket
|
||||||
|
// TODO: Serialise to JSON
|
||||||
|
const char *fmt = "%zu (%s) (%zu, %zu) '%c'\n";
|
||||||
|
struct entity_t const *const entity = &data.world.entities[0];
|
||||||
|
struct entity_registrant_t const *const registrant =
|
||||||
|
&data.world.registered_entities.entities[entity->id];
|
||||||
|
|
||||||
|
if (options.daemonise)
|
||||||
|
syslog(LOG_NOTICE, fmt,
|
||||||
|
entity->id, registrant->name,
|
||||||
|
entity->x, entity->y,
|
||||||
|
registrant->tile
|
||||||
|
);
|
||||||
|
else
|
||||||
|
printf(fmt,
|
||||||
|
entity->id, registrant->name,
|
||||||
|
entity->x, entity->y,
|
||||||
|
registrant->tile
|
||||||
|
);
|
||||||
|
|
||||||
|
// Socket handling and run gameloop
|
||||||
|
err = sock_loop(&data, game_loop);
|
||||||
|
if (err) goto handle_error;
|
||||||
|
|
||||||
|
// Deinitialisation
|
||||||
|
world_free(&data.world);
|
||||||
opts_free(&options);
|
opts_free(&options);
|
||||||
return ERR_OK;
|
return ERR_OK;
|
||||||
|
|
||||||
|
handle_error_world:
|
||||||
|
world_free(&data.world);
|
||||||
|
|
||||||
handle_error:
|
handle_error:
|
||||||
if (options.daemonise) syslog(LOG_ERR, "%s", ERROR_STRS[err]);
|
if (options.daemonise) syslog(LOG_ERR, "%s", ERROR_STRS[err]);
|
||||||
opts_free(&options);
|
opts_free(&options);
|
||||||
|
Loading…
Reference in New Issue
Block a user