|
|
|
@ -99,6 +99,7 @@ static const char* cs_msg_name(uint8_t type) { |
|
|
|
case CS_MSG_JOIN_INFO_RESP: return "JOIN_INFO_RESP"; |
|
|
|
case CS_MSG_JOIN_INFO_RESP: return "JOIN_INFO_RESP"; |
|
|
|
case CS_MSG_JOIN_REQUEST: return "JOIN_REQUEST"; |
|
|
|
case CS_MSG_JOIN_REQUEST: return "JOIN_REQUEST"; |
|
|
|
case CS_MSG_JOIN_READY: return "JOIN_READY"; |
|
|
|
case CS_MSG_JOIN_READY: return "JOIN_READY"; |
|
|
|
|
|
|
|
case CS_MSG_SOUND_SETTING: return "SOUND_SETTING"; |
|
|
|
default: return "???"; |
|
|
|
default: return "???"; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
@ -239,6 +240,10 @@ static void chat_sync_recv_cb(struct ETCP_CONN* conn, struct ll_entry* entry) { |
|
|
|
break; |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
case CS_MSG_CHANNEL_INVITE: cs_handle_channel_invite(cs, peer, ch_id, pl, plen); break; |
|
|
|
case CS_MSG_CHANNEL_INVITE: cs_handle_channel_invite(cs, peer, ch_id, pl, plen); break; |
|
|
|
|
|
|
|
case CS_MSG_SOUND_SETTING: |
|
|
|
|
|
|
|
if (plen >= 1) |
|
|
|
|
|
|
|
db_sync_set_peer_sound(cs->inst, group_id, peer, pl[0] ? 1 : 0); |
|
|
|
|
|
|
|
break; |
|
|
|
default: DEBUG_WARN(DEBUG_CATEGORY_MEMBER_SYNC, "%s: UNKNOWN msg type=%02x from=%016llx", CS_ID, type, (unsigned long long)peer); break; |
|
|
|
default: DEBUG_WARN(DEBUG_CATEGORY_MEMBER_SYNC, "%s: UNKNOWN msg type=%02x from=%016llx", CS_ID, type, (unsigned long long)peer); break; |
|
|
|
} |
|
|
|
} |
|
|
|
u_free(entry->dgram); queue_entry_free(entry); |
|
|
|
u_free(entry->dgram); queue_entry_free(entry); |
|
|
|
@ -408,6 +413,35 @@ static void cs_on_peer_sleep(struct UTUN_INSTANCE* inst, uint64_t peer_node_id, |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* ── Per-chat «play sound on message» (троттлинг db_sync на сервере) ── */ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static void cs_send_sound_setting(struct chat_sync* cs, const char* ch_id, uint64_t dst, int on) { |
|
|
|
|
|
|
|
uint8_t p[2] = { CS_MSG_SOUND_SETTING, (uint8_t)(on ? 1 : 0) }; |
|
|
|
|
|
|
|
cs_send(cs, ch_id, dst, p, sizeof(p)); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void chat_sync_broadcast_sound_setting(struct UTUN_INSTANCE* inst, const char* ch_id, int on) { |
|
|
|
|
|
|
|
struct chat_sync* cs = cs_of(inst); |
|
|
|
|
|
|
|
if (!cs || !cs->initialized || !ch_id || !ch_id[0]) return; |
|
|
|
|
|
|
|
for (int i = 0; i < cs->channel_count; i++) { |
|
|
|
|
|
|
|
if (strcmp(cs->channels[i].channel_id, ch_id) != 0) continue; |
|
|
|
|
|
|
|
for (int j = 0; j < cs->channels[i].peer_count; j++) { |
|
|
|
|
|
|
|
uint64_t pid = cs->channels[i].peer_ids[j]; |
|
|
|
|
|
|
|
if (pid == inst->node_id || !cs_is_peer_online(inst, pid)) continue; |
|
|
|
|
|
|
|
cs_send_sound_setting(cs, ch_id, pid, on); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* На поднятии соединения: отправить пиру свои per-chat настройки звука (начальная синхронизация). */ |
|
|
|
|
|
|
|
static void cs_send_all_sound_settings(struct chat_sync* cs, uint64_t peer) { |
|
|
|
|
|
|
|
for (int i = 0; i < cs->channel_count; i++) { |
|
|
|
|
|
|
|
int on = chat_core_get_sound_on_message(cs->inst, cs->channels[i].channel_id); |
|
|
|
|
|
|
|
cs_send_sound_setting(cs, cs->channels[i].channel_id, peer, on); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/* ── Peer status change (GUI + online-бар + schedule_sync; онлайн в БД не хранится) ── */ |
|
|
|
/* ── Peer status change (GUI + online-бар + schedule_sync; онлайн в БД не хранится) ── */ |
|
|
|
|
|
|
|
|
|
|
|
static void cs_on_peer_status_changed(struct chat_sync* cs, uint64_t peer, int online) { |
|
|
|
static void cs_on_peer_status_changed(struct chat_sync* cs, uint64_t peer, int online) { |
|
|
|
@ -536,6 +570,7 @@ static void cs_on_conn_up(struct ETCP_CONN* conn, int event, void* arg) { (void) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
cs_on_peer_status_changed(cs, peer, 1); |
|
|
|
cs_on_peer_status_changed(cs, peer, 1); |
|
|
|
|
|
|
|
cs_send_all_sound_settings(cs, peer); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static void cs_on_conn_down(struct ETCP_CONN* conn, int event, void* arg) { (void)event; |
|
|
|
static void cs_on_conn_down(struct ETCP_CONN* conn, int event, void* arg) { (void)event; |
|
|
|
|