TLS 1.3, channel persistence, membership signaling

- TLS 1.3 on TCP (rustls + tokio-rustls, optional self-signed cert)
- Server-side channel CRUD with SQLite persistence
- Gateway → voice-node membership bridge via broadcast channel
This commit is contained in:
loki5512344 2026-07-09 12:48:18 +02:00
parent 523680e05d
commit 5534cd01f7
Signed by: boba
GPG key ID: 253067914055423B
37 changed files with 771 additions and 160 deletions

View file

@ -1,7 +1,12 @@
mod voice_membership;
use anyhow::Result;
use std::sync::Arc;
use tokio::sync::broadcast;
use tracing::info;
#[tokio::main]
async fn main() -> Result<()> {
tracing_subscriber::fmt()
@ -28,12 +33,34 @@ async fn main() -> Result<()> {
let voice_bind = cfg.voice.bind.clone();
let gate_cfg = Arc::new(cfg);
let (voice_member_tx, _) = broadcast::channel::<String>(256);
let mut voice_member_rx = voice_member_tx.subscribe();
let voice_handle = tokio::spawn(async move {
tokio::spawn(async move {
while let Ok(event_str) = voice_member_rx.recv().await {
if let Ok(event) = serde_json::from_str::<serde_json::Value>(&event_str) {
let event_type = event["type"].as_str().unwrap_or("");
let channel_id = event["channel_id"].as_str().unwrap_or("");
let user_id = event["user_id"].as_str().unwrap_or("");
match event_type {
"joined" => {
info!("voice member joined channel {}: {}", channel_id, user_id);
}
"left" => {
info!("voice member left channel {}: {}", channel_id, user_id);
}
_ => {}
}
}
}
});
vnox_voice_node::runner::run_bind(&node_name, &voice_bind).await
});
let gate_handle = tokio::spawn(async move {
vnox_gateway::run(gate_cfg).await
vnox_gateway::run(gate_cfg, Some(voice_member_tx)).await
});
tokio::select! {