You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
82 lines
6.1 KiB
82 lines
6.1 KiB
/* |
|
* chat_event.h — система нотификаций о событиях чата |
|
* |
|
* Производители (chat_core, chat_sync, ...) вызывают chat_event_post(). |
|
* Потребители (chatgui, headless, будущий HTTP API) регистрируют один обработчик. |
|
* |
|
* Без обработчика — данные логируются через DEBUG_DEBUG + log_dump. |
|
* Все вызовы — из uasync-потока. |
|
*/ |
|
|
|
#ifndef CHAT_EVENT_H |
|
#define CHAT_EVENT_H |
|
|
|
#include <stdint.h> |
|
#include <stddef.h> |
|
|
|
struct UTUN_INSTANCE; |
|
|
|
#ifdef __cplusplus |
|
extern "C" { |
|
#endif |
|
|
|
/* Типы событий (совпадают с GUI_EVT_* в gui_bridge.h для прямой совместимости) */ |
|
#define CHAT_EVT_MSG_RECEIVED 1 /* [ch_id_len:1][ch_id:var][author_node_id:8] */ |
|
#define CHAT_EVT_CONNECT_RESULT 2 /* [node_id:8][result:4][channel_id:8] */ |
|
#define CHAT_EVT_NEW_PEER 3 /* [node_id:8] */ |
|
#define CHAT_EVT_CHANNEL_UPDATED 4 /* [ch_id_len:1][ch_id:var] */ |
|
#define CHAT_EVT_MEMBERS_CHANGED 5 /* [ch_id_len:1][ch_id:var] */ |
|
#define CHAT_EVT_MY_NODE_ID 6 /* [node_id:8] */ |
|
#define CHAT_EVT_AUTO_CONNECT_STATUS 7 /* [status:1][total_tried:2][node_count:2][success:2] */ |
|
#define CHAT_EVT_CHANNEL_PEERS_ONLINE 8 /* [ch_id_len:1][ch_id:var][online_count:2] */ |
|
#define CHAT_EVT_DB_READY 9 /* data: none */ |
|
#define CHAT_EVT_STATUS_REFRESH 10 /* data: status text */ |
|
#define CHAT_EVT_KEYS_GENERATED 11 /* [pub_hex:64] */ |
|
#define CHAT_EVT_SERVICE_STARTED 12 /* data: none */ |
|
#define CHAT_EVT_SERVICE_STOPPED 13 /* data: none */ |
|
#define CHAT_EVT_ATTACHMENT_DOWNLOADED 14 /* [ch_id_len:1][ch_id:var][msg_id:8] */ |
|
#define CHAT_EVT_DOWNLOAD_PROGRESS 15 /* [ch_id_len:1][ch_id:var][msg_id:8][blocks_done:4][num_blocks:4] */ |
|
#define CHAT_EVT_NODEINFO_UPDATED 16 /* [node_id:8][conn_presence:1][conn_up:1][best_rtt:2][bgp_rtt:2][bgp_nodes:2] */ |
|
#define CHAT_EVT_LINK_STATUS_CHANGED 17 /* [peer_id:8][link_id:1][state:1][status:1][links_up:1][initialized:1] */ |
|
#define CHAT_EVT_INVITE_RECEIVED 18 /* [ch_id_len:1][ch_id][name_len:1][name][inviter_node_id:8][inviter_name_len:1][inviter_name] */ |
|
#define CHAT_EVT_LOCAL_SOCKETS 19 /* JSON: [{"si":id,"nm":"...","ad":"...","po":port,"pt":"TCP|UDP","st":0|1|2,"lk":n},...] */ |
|
#define CHAT_EVT_CONN_LIST 20 /* [count:2][entry:46B]* — список ETCP-соединений */ |
|
#define CHAT_EVT_CONN_METRICS 21 /* текст — полный дамп метрик выбранного соединения */ |
|
#define CHAT_EVT_MEMBER_DETAIL 22 /* [node_id:8][flags:1][own_tcp_active:2][links...][socks...] — live-снапшот для панели деталей участника */ |
|
#define CHAT_EVT_MEMBER_LIST 23 /* [ch_id_len:1][ch_id:var][count:2][member:79B]* — полный список мемберов канала */ |
|
#define CHAT_EVT_MEMBER_UPDATED 24 /* [ch_id_len:1][ch_id:var][count:1][member:79B] — обновление одного мембера */ |
|
#define CHAT_EVT_MEMBER_REMOVED 25 /* [ch_id_len:1][ch_id:var][node_id:8] — мембер удалён из канала */ |
|
#define CHAT_EVT_BGP_INFO 26 /* текст: "rtt:XXms hop:X via bgp: [XXXX] name1 [XXXX] name2" */ |
|
#define CHAT_EVT_CONNECTING_NODES 27 /* [ch_id_len:1][ch_id:var][count:2][node_id:8]* */ |
|
#define CHAT_EVT_ADMIN_KEY_RECEIVED 28 /* [ch_id_len:1][ch_id:var][from_node_id:8] — получен канальный ключ (стал совладельцем) */ |
|
#define CHAT_EVT_INVITE_LINK_READY 29 /* [ch_id_len:1][ch_id:var][request_id:8][link_len:2][link:var] — пустой link = ошибка */ |
|
#define CHAT_EVT_INVITE_CANDIDATES 30 /* [ch_id_len:1][ch_id:var][auto_node_id:8][count:2][node_id:8]* — достижимые узлы для invite */ |
|
#define CHAT_EVT_CHANNEL_DELETED 31 /* [ch_id_len:1][ch_id:var] — канал удалён локально */ |
|
#define CHAT_EVT_DM_MSG_RECEIVED 32 /* [conv_id_len:1][conv_id:var][author_node_id:8] */ |
|
#define CHAT_EVT_DM_CONV_UPDATED 33 /* [conv_id_len:1][conv_id:var] — беседа создана/изменена */ |
|
#define CHAT_EVT_CALL_INCOMING 34 /* [ch_id_len:1][ch_id:var][caller_node_id:8][call_id:8] */ |
|
#define CHAT_EVT_CALL_RINGING 35 /* [call_id:8] */ |
|
#define CHAT_EVT_CALL_ACCEPTED 36 /* [call_id:8] */ |
|
#define CHAT_EVT_CALL_ENDED 37 /* [call_id:8][reason:1] */ |
|
#define CHAT_EVT_CALL_DECLINED 38 /* [call_id:8][reason:1] */ |
|
#define CHAT_EVT_CALL_STATS 39 /* [call_id:8][rtt:2][buffer:2][tempo:2][dropped:2][underruns:2][min:2][max:2][reserve:2] */ |
|
#define CHAT_EVT_CALL_ERROR 40 /* [call_id:8][err:1][text:var] */ |
|
#define CHAT_EVT_DM_MESSAGES 41 /* [conv_id_len:1][conv_id:var][JSON:utf8] — сообщения беседы и состояния доставки */ |
|
#define CHAT_EVT_CALL_PATH 42 /* [call_id:8][text:var] — BGP-маршрут до пира звонка */ |
|
#define CHAT_EVT_RADIO_TALK 43 /* [group_id:8][src_node_id:8][stream_id:2][on:1] — кто-то начал/закончил говорить */ |
|
#define CHAT_EVT_CALL_CONNECTION 44 /* [call_id:8][CONN_TYPE:1][next_hop_node_id:8] — текущий путь отправки звонка */ |
|
#define CHAT_EVT_DM_CONVERSATIONS 45 /* [JSON:utf8] — последние 200 личных бесед */ |
|
#define CHAT_EVT_ATTACHMENT_PREPARATION 46 /* [target_len:1][target:var][job_uuid:16][state:1], 0=start 1=ready 2=failed */ |
|
|
|
#define CHAT_EVT_DM_CALL_ROUTE 47 /* [conv_id_len:1][conv_id:var][peer_node_id:8][group_id:8], 0 = нет BGP-пути */ |
|
|
|
typedef void (*chat_event_handler_fn)(struct UTUN_INSTANCE* inst, int type, const uint8_t* data, int len); |
|
|
|
void chat_event_set_handler(struct UTUN_INSTANCE* inst, chat_event_handler_fn handler); |
|
void chat_event_post(struct UTUN_INSTANCE* inst, int type, const uint8_t* data, int len); |
|
void chat_event_attachment(struct UTUN_INSTANCE* inst, int is_dm, const char* target, const uint8_t id[16], int state); |
|
|
|
#ifdef __cplusplus |
|
} |
|
#endif |
|
#endif /* CHAT_EVENT_H */
|
|
|