From 126f6bd0886a3ed4dc705165d51f431ac612eafc Mon Sep 17 00:00:00 2001 From: Alex Emmet <111742636+Alex-Emmet@users.noreply.github.com> Date: Sun, 19 Apr 2026 01:25:43 +0200 Subject: [PATCH] [Add] get call_data handling --- Cargo.lock | 4 +-- src/rho/client_connection.rs | 51 ++++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ed6393d..bb2e283 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3279,7 +3279,7 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "ttp-core" version = "0.1.0" -source = "git+https://git.methanium.net/Tensamin/TTP.git#d8d82e108ae4e25ad34947e03e917528407e43f3" +source = "git+https://git.methanium.net/Tensamin/TTP.git#01cefdf60d77b39565d662f5b585058a2b62decf" dependencies = [ "base64 0.22.1", "byteorder", @@ -3292,7 +3292,7 @@ dependencies = [ [[package]] name = "ttp-native" version = "0.1.0" -source = "git+https://git.methanium.net/Tensamin/TTP.git#d8d82e108ae4e25ad34947e03e917528407e43f3" +source = "git+https://git.methanium.net/Tensamin/TTP.git#01cefdf60d77b39565d662f5b585058a2b62decf" dependencies = [ "quinn", "rustls", diff --git a/src/rho/client_connection.rs b/src/rho/client_connection.rs index b923801..732374f 100644 --- a/src/rho/client_connection.rs +++ b/src/rho/client_connection.rs @@ -119,6 +119,11 @@ impl ClientConnection { return; } + if cv.is_type(CommunicationType::call_data) { + self.handle_get_call_data(cv).await; + return; + } + if cv.is_type(CommunicationType::call_disconnect_user) { self.handle_call_disconnect_user(cv).await; return; @@ -342,6 +347,52 @@ impl ClientConnection { return; } } + async fn handle_get_call_data(self: Arc, cv: CommunicationValue) { + let user_id = self.get_user_id().await; + + let call_id = match cv.get_data(DataTypes::call_id) { + DataValue::Str(id_str) => match Uuid::parse_str(id_str.as_str()) { + Ok(id) => id, + Err(_) => { + self.send_error_response(cv.get_id(), CommunicationType::error) + .await; + return; + } + }, + _ => { + self.send_error_response(cv.get_id(), CommunicationType::error) + .await; + return; + } + }; + + if let Some(call) = call_manager::get_call(call_id).await { + if let Some(_) = call.get_caller(user_id).await { + let mut user_ids: Vec = Vec::new(); + let members = call.members.read().await.clone(); + for member in members { + if member.user_id == user_id { + user_ids.push(DataValue::Number(member.user_id as i64)); + } + } + + let response = CommunicationValue::new(CommunicationType::call_data) + .with_id(cv.get_id()) + .with_receiver(user_id as u64) + .add_data(DataTypes::user_ids, DataValue::Array(user_ids)); + self.send_message(&response).await; + } else { + self.send_error_response(cv.get_id(), CommunicationType::error) + .await; + return; + } + } else { + self.send_error_response(cv.get_id(), CommunicationType::error) + .await; + return; + } + } + async fn handle_call_timeout_user(self: Arc, cv: CommunicationValue) { let call_id = Uuid::from_str(cv.get_data(DataTypes::call_id).as_str().unwrap_or("")).unwrap();