diff options
Diffstat (limited to 'v3/glougloud/viz.c')
-rw-r--r-- | v3/glougloud/viz.c | 31 |
1 files changed, 16 insertions, 15 deletions
diff --git a/v3/glougloud/viz.c b/v3/glougloud/viz.c index daf87d1..182e086 100644 --- a/v3/glougloud/viz.c +++ b/v3/glougloud/viz.c @@ -6,11 +6,16 @@ struct glougloud_viz { int pid; + struct event_base *evb; + struct modules *mods; redisAsyncContext *rc; + struct { + struct event *ev; + } srv_tcp; }; struct glougloud *_ggd; -struct glougloud_viz *_ggdviz; +struct glougloud_viz *_viz; void cb_notification(redisAsyncContext *c, void *r, void *privdata) { @@ -47,29 +52,25 @@ cb_srv_conn(evutil_socket_t listener, short event, void *arg) int viz_init(struct glougloud *ggd) { - struct event_base *evb; - struct event *ev; - struct modules *mods; - redisAsyncContext *rc; - _ggd = ggd; - _ggdviz = xcalloc(1, sizeof(struct glougloud_viz)); - _ggdviz->pid = fork(); - if (_ggdviz->pid > 0) + _viz = xcalloc(1, sizeof(struct glougloud_viz)); + _viz->pid = fork(); + if (_viz->pid > 0) return 0; droppriv(GLOUGLOUD_USER_VIZ, 1, NULL); - evb = event_base_new(); + _viz->evb = event_base_new(); + _viz->mods = modules_load(GLOUGLOUD_MOD_PATH, NULL); - mods = modules_load(GLOUGLOUD_MOD_PATH, NULL); - - rc = redis_connect(evb, cb_connect, cb_disconnect); - redisAsyncCommand(rc, cb_notification, "event", + _viz->rc = redis_connect(_viz->evb, cb_connect, cb_disconnect); + redisAsyncCommand(_viz->rc, cb_notification, "event", "SUBSCRIBE __keyevent@ggd__:*"); - ev = tcp_server_create(evb, &_ggd->viz.serv_ip, + _viz->srv_tcp.ev = tcp_server_create(_viz->evb, &_ggd->viz.serv_ip, _ggd->viz.serv_port, cb_srv_conn, NULL); + event_base_dispatch(ev_base); + return 0; } |