Async Handling

This commit is contained in:
Alex Emmet 2025-11-25 22:33:29 +00:00
commit 30cb6c5fa5
4 changed files with 36 additions and 36 deletions

View file

@ -33,7 +33,8 @@ pub async fn get_call_groups(user_id: Uuid) -> Vec<Arc<CallGroup>> {
}
pub async fn get_call_token(user_id: Uuid, call_id: Uuid) -> Option<String> {
let call_groups = CALL_GROUPS.read().await;
let call_groups = { CALL_GROUPS.read().await.clone() };
for cg in call_groups.iter() {
if cg.call_id == call_id {
for member in cg.members.read().await.iter() {

View file

@ -6,15 +6,14 @@ mod rho;
mod util;
use async_tungstenite::accept_hdr_async;
use dotenv::dotenv;
use futures::StreamExt;
use livekit_api::services::room::{CreateRoomOptions, RoomClient};
use std::sync::Arc;
use tokio::net::TcpListener;
use tokio_util::compat::TokioAsyncReadCompatExt;
use tungstenite::handshake::server::{Request, Response};
use crate::{
calls::call_util,
omega::omega_connection::OmegaConnection,
rho::{client_connection::ClientConnection, iota_connection::IotaConnection},
util::{
@ -25,6 +24,7 @@ use crate::{
#[tokio::main]
async fn main() {
dotenv().ok();
tokio::spawn(async move {
OmegaConnection::new().connect().await;
});

View file

@ -110,44 +110,44 @@ impl ClientConnection {
/// Handle incoming message from client
pub async fn handle_message(self: Arc<Self>, message: Utf8Bytes) {
let cv = CommunicationValue::from_json(&message);
// Handle identification
if cv.is_type(CommunicationType::identification) && !self.is_identified().await {
self.handle_identification(Arc::clone(&self), cv).await;
return;
}
if !self.is_identified().await {
return;
}
// Handle ping
if cv.is_type(CommunicationType::ping) {
self.handle_ping(cv).await;
return;
}
line(PrintType::ClientIn, &cv.to_json().to_string());
// Handle client status changes
if cv.is_type(CommunicationType::client_changed) {
self.handle_client_changed(cv).await;
return;
}
// Handle call invites
if cv.is_type(CommunicationType::call_invite) {
self.handle_call_invite(cv).await;
return;
}
// Handle get call requests
if cv.is_type(CommunicationType::call_token) {
self.handle_get_call(cv).await;
return;
}
// Forward other messages to Iota
tokio::spawn(async move {
let cv = CommunicationValue::from_json(&message);
// Handle identification
if cv.is_type(CommunicationType::identification) && !self.is_identified().await {
self.handle_identification(Arc::clone(&self), cv).await;
return;
}
if !self.is_identified().await {
return;
}
// Handle ping
if cv.is_type(CommunicationType::ping) {
self.handle_ping(cv).await;
return;
}
line(PrintType::ClientIn, &cv.to_json().to_string());
// Handle client status changes
if cv.is_type(CommunicationType::client_changed) {
self.handle_client_changed(cv).await;
return;
}
// Handle call invites
if cv.is_type(CommunicationType::call_invite) {
self.handle_call_invite(cv).await;
return;
}
// Handle get call requests
if cv.is_type(CommunicationType::call_token) {
self.handle_get_call(cv).await;
return;
}
// Forward other messages to Iota
self.forward_to_iota(cv).await;
});
}

View file

@ -1,7 +1,6 @@
use super::rho_connection::RhoConnection;
use crate::util::print::PrintType;
use crate::util::print::line;
use crate::util::print::line_err;
use std::{
collections::HashMap,
sync::{Arc, LazyLock},