Browse Source

chat: запуск BGP-обмена при подключении узла к группе (invite + auto-connect)

v2
evgeny 4 weeks ago
parent
commit
23fbdf4584
  1. 2
      src/routing_layer/topo_group_connect.c
  2. 14
      src/routing_layer/topo_group_invite.c

2
src/routing_layer/topo_group_connect.c

@ -284,6 +284,8 @@ static void tgc_callback(struct NODE_CONN_DIRECT* h, enum ncd_event event, void*
if (ok) {
struct TOPO_GROUP_NODE* nq = topo_node_find_by_id(gc->group, node_id);
if (nq) nq->handle = h;
/* запуск BGP: узел соединён с группой */
if (conn) topo_group_new_conn(gc->group, conn);
} else if (event == NCD_EVENT_TIMEOUT) {
struct TOPO_GROUP_NODE* nq = topo_node_find_by_id(gc->group, node_id);
if (nq) nq->handle = NULL;

14
src/routing_layer/topo_group_invite.c

@ -181,6 +181,13 @@ static void tgi_handle_info_req(struct ETCP_CONN* conn, const uint8_t* data, siz
/* ── создаём инфраструктуру группы СРАЗУ ── */
chat_core_ensure_channel_ready(ch_id);
/* запуск BGP: узел соединён с группой, членство подтверждено (inviter, INFO_REQ) */
{
struct TOPO_GROUP* bgp_grp = topo_groups_find(inst->topo_groups, req->group_id);
if (bgp_grp && bgp_grp->group_type == TOPO_GROUP_TYPE_CHAT)
topo_group_new_conn(bgp_grp, conn);
}
/* ── сериализуем ответ ── */
size_t ch_nl = strlen(ch_name); if (ch_nl > 255) ch_nl = 255;
uint8_t inv_flags = (my_join_sig[0] || my_join_ts) ? PEERS_FLAG_HAS_JOIN : 0;
@ -324,6 +331,13 @@ static void tgi_handle_info_resp(struct ETCP_CONN* conn, const uint8_t* data, si
DEBUG_INFO(DEBUG_CATEGORY_GENERAL, "invite: membership CONFIRMED by 0x%016llx name=\"%.*s\" ch=%s — full channel ready",
(unsigned long long)inv->node_id, (int)nnl, nnl ? (const char*)resp->node_name : "?", ch_id);
/* запуск BGP: узел соединён с группой и членство подтверждено */
{
struct TOPO_GROUP* bgp_grp = topo_groups_find(inv->inst->topo_groups, inv->group_id);
if (bgp_grp && bgp_grp->group_type == TOPO_GROUP_TYPE_CHAT)
topo_group_new_conn(bgp_grp, conn);
}
/* ── успех: переводим ncd-handle во владение узла, доставляем JOIN ── */
{
uint64_t node_id = inv->node_id, group_id = inv->group_id;

Loading…
Cancel
Save