From 457cc92e1e07ea0ad83d2b99f5b2b87005f07dbf Mon Sep 17 00:00:00 2001 From: Ian Gulliver Date: Fri, 19 Jun 2015 22:27:28 +0000 Subject: [PATCH] Add login callback. --- clients/c/cosmopolite.c | 12 ++++++++++++ clients/c/cosmopolite.h | 1 + 2 files changed, 13 insertions(+) diff --git a/clients/c/cosmopolite.c b/clients/c/cosmopolite.c index bef5bcf..d6a3015 100644 --- a/clients/c/cosmopolite.c +++ b/clients/c/cosmopolite.c @@ -193,6 +193,16 @@ static void cosmo_handle_disconnect(cosmo *instance) { } } +static void cosmo_handle_login(cosmo *instance, json_t *event) { + if (instance->login_state == LOGGED_IN) { + return; + } + instance->login_state = LOGGED_IN; + if (instance->callbacks.login) { + instance->callbacks.login(instance->passthrough); + } +} + static void cosmo_handle_logout(cosmo *instance, json_t *event) { if (instance->login_state == LOGGED_OUT) { return; @@ -212,6 +222,8 @@ static void cosmo_handle_event(cosmo *instance, json_t *event) { const char *event_type = json_string_value(json_object_get(event, "event_type")); if (!strcmp(event_type, "message")) { cosmo_handle_message(instance, event); + } else if (!strcmp(event_type, "login")) { + cosmo_handle_login(instance, event); } else if (!strcmp(event_type, "logout")) { cosmo_handle_logout(instance, event); } else { diff --git a/clients/c/cosmopolite.h b/clients/c/cosmopolite.h index 1551d5a..96d6ec0 100644 --- a/clients/c/cosmopolite.h +++ b/clients/c/cosmopolite.h @@ -13,6 +13,7 @@ typedef struct { void (*connect)(void *); void (*disconnect)(void *); + void (*login)(void *); void (*logout)(void *); void (*message)(const json_t *, void *); } cosmo_callbacks;