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:
parent
523680e05d
commit
5534cd01f7
37 changed files with 771 additions and 160 deletions
|
|
@ -21,3 +21,4 @@ tracing-subscriber.workspace = true
|
|||
anyhow.workspace = true
|
||||
toml.workspace = true
|
||||
serde.workspace = true
|
||||
serde_json.workspace = true
|
||||
|
|
|
|||
|
|
@ -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! {
|
||||
|
|
|
|||
22
serverd/src/voice_membership.rs
Normal file
22
serverd/src/voice_membership.rs
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
use tokio::sync::broadcast;
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
pub enum VoiceMembershipEvent {
|
||||
Joined {
|
||||
channel_id: String,
|
||||
session_id: String,
|
||||
user_id: String,
|
||||
},
|
||||
Left {
|
||||
channel_id: String,
|
||||
session_id: String,
|
||||
user_id: String,
|
||||
},
|
||||
}
|
||||
|
||||
pub fn voice_membership_channel() -> (
|
||||
broadcast::Sender<VoiceMembershipEvent>,
|
||||
broadcast::Receiver<VoiceMembershipEvent>,
|
||||
) {
|
||||
broadcast::channel(256)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue