Refactor the network input parser to make it easier to extend for new formats.

This commit is contained in:
Oliver Jowett 2016-12-29 17:54:53 +00:00
parent 0526388bdc
commit 34aeb29347
2 changed files with 85 additions and 62 deletions

View file

@ -29,6 +29,12 @@ struct net_service;
typedef int (*read_fn)(struct client *, char *);
typedef void (*heartbeat_fn)(struct net_service *);
typedef enum {
READ_MODE_IGNORE,
READ_MODE_BEAST,
READ_MODE_ASCII
} read_mode_t;
// Describes one network service (a group of clients with common behaviour)
struct net_service {
struct net_service* next;
@ -41,6 +47,7 @@ struct net_service {
struct net_writer *writer; // shared writer state
const char *read_sep; // hander details for input data
read_mode_t read_mode;
read_fn read_handler;
};
@ -62,7 +69,7 @@ struct net_writer {
heartbeat_fn send_heartbeat; // function that queues a heartbeat if needed
};
struct net_service *serviceInit(const char *descr, struct net_writer *writer, heartbeat_fn hb_handler, const char *sep, read_fn read_handler);
struct net_service *serviceInit(const char *descr, struct net_writer *writer, heartbeat_fn hb_handler, read_mode_t mode, const char *sep, read_fn read_handler);
struct client *serviceConnect(struct net_service *service, char *addr, int port);
void serviceListen(struct net_service *service, char *bind_addr, char *bind_ports);
struct client *createSocketClient(struct net_service *service, int fd);