/* * chat_event.c — реализация системы нотификаций * * Пока обработчик не зарегистрирован — события логируются. * При регистрации обработчика — форвардятся ему синхронно. */ #include "chat_event.h" #include "../lib/debug_config.h" #ifdef __ANDROID__ #include #endif static chat_event_handler_fn g_handler = NULL; void chat_event_set_handler(chat_event_handler_fn handler) { #ifdef __ANDROID__ __android_log_print(ANDROID_LOG_INFO, "utun-evt", "chat_event_set_handler: handler=%p old=%p", (void*)handler, (void*)g_handler); #endif g_handler = handler; } void chat_event_post(int type, const uint8_t* data, int len) { if (g_handler) { g_handler(type, data, len); return; } static const char* names[] = { [1]="MSG_RECEIVED", [2]="CONNECT_RESULT", [3]="NEW_PEER", [4]="CHANNEL_UPDATED", [5]="MEMBERS_CHANGED", [6]="MY_NODE_ID", [7]="AUTO_CONNECT_STATUS", [8]="CHANNEL_PEERS_ONLINE", [9]="DB_READY", [10]="STATUS_REFRESH", [11]="KEYS_GENERATED", [12]="SERVICE_STARTED", [13]="SERVICE_STOPPED", [14]="ATTACHMENT_DOWNLOADED", [15]="DOWNLOAD_PROGRESS", [16]="NODEINFO_UPDATED", [17]="LINK_STATUS_CHANGED", [18]="INVITE_RECEIVED", [19]="LOCAL_SOCKETS", [20]="CONN_LIST", [21]="CONN_METRICS", }; const char* n = (type >= 1 && type <= 21) ? names[type] : "?"; DEBUG_DEBUG(DEBUG_CATEGORY_DEBUG, "chat_event: %s(%d) data=%d bytes", n, type, len); if (data && len > 0) log_dump(DEBUG_LEVEL_DEBUG, DEBUG_CATEGORY_DEBUG, " ", data, len); }