diff options
author | metamuffin <metamuffin@disroot.org> | 2022-10-15 12:37:28 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2022-10-15 12:37:28 +0200 |
commit | 77f6b0d44c2d653cfcdb511a9f91f11aab81ddc5 (patch) | |
tree | 5028a357c4cae08824d1d402c6561121be531329 /client-native-lib/src/peer.rs | |
parent | d081461dd7fe2a6db94b196324bc485c10a77c7a (diff) | |
download | keks-meet-77f6b0d44c2d653cfcdb511a9f91f11aab81ddc5.tar keks-meet-77f6b0d44c2d653cfcdb511a9f91f11aab81ddc5.tar.bz2 keks-meet-77f6b0d44c2d653cfcdb511a9f91f11aab81ddc5.tar.zst |
sending files works
Diffstat (limited to 'client-native-lib/src/peer.rs')
-rw-r--r-- | client-native-lib/src/peer.rs | 40 |
1 files changed, 31 insertions, 9 deletions
diff --git a/client-native-lib/src/peer.rs b/client-native-lib/src/peer.rs index 36b1754..fa4de25 100644 --- a/client-native-lib/src/peer.rs +++ b/client-native-lib/src/peer.rs @@ -6,12 +6,12 @@ use crate::{ instance::Instance, protocol::{self, ProvideInfo, RelayMessage, Sdp}, + LocalResource, }; use log::{info, warn}; use std::{collections::HashMap, sync::Arc}; use tokio::sync::RwLock; use webrtc::{ - data::data_channel::DataChannel, data_channel::RTCDataChannel, ice_transport::{ ice_candidate::{RTCIceCandidate, RTCIceCandidateInit}, @@ -27,7 +27,7 @@ use webrtc::{ pub struct Peer { pub inst: Arc<Instance>, pub peer_connection: RTCPeerConnection, - pub resources_provided: RwLock<HashMap<String, ProvideInfo>>, + pub remote_provided: RwLock<HashMap<String, ProvideInfo>>, pub id: usize, } @@ -42,6 +42,7 @@ pub struct Peer { // Connected(Arc<TransportChannel>), // AwaitDisconnect, // } + pub enum TransportChannel { Track(Arc<TrackRemote>), DataChannel(Arc<RTCDataChannel>), @@ -60,7 +61,7 @@ impl Peer { let peer_connection = inst.api.new_peer_connection(config).await.unwrap(); let peer = Arc::new(Self { - resources_provided: Default::default(), + remote_provided: Default::default(), inst: inst.clone(), peer_connection, id, @@ -103,7 +104,7 @@ impl Peer { let peer = weak.upgrade().unwrap(); Box::pin(async move { if let Some(res) = peer - .resources_provided + .remote_provided .read() .await .get(&dc.label().to_string()) @@ -119,7 +120,7 @@ impl Peer { .await; } else { warn!("got unassociated data channel; closed connection"); - dc.close().await; + dc.close().await.unwrap(); } }) }) @@ -128,6 +129,16 @@ impl Peer { peer } + pub async fn init_remote(&self) { + self.send_relay(RelayMessage::Identify { + username: self.inst.config.username.clone(), + }) + .await; + for res in self.inst.local_resources.read().await.values() { + self.send_relay(RelayMessage::Provide(res.info())).await; + } + } + pub async fn request_resource(&self, id: String) { self.send_relay(RelayMessage::Request { id }).await; } @@ -139,7 +150,7 @@ impl Peer { self.inst.send_relay(self.id, inner).await } - pub async fn on_relay(self: Arc<Self>, p: RelayMessage) { + pub async fn on_relay(self: &Arc<Self>, p: RelayMessage) { match p { RelayMessage::Offer(o) => self.on_offer(o).await, RelayMessage::Answer(a) => self.on_answer(a).await, @@ -149,7 +160,7 @@ impl Peer { "remote resource provided: ({:?}) {:?} {:?}", info.id, info.kind, info.label ); - self.resources_provided + self.remote_provided .write() .await .insert(info.id.clone(), info.clone()); @@ -160,13 +171,24 @@ impl Peer { } RelayMessage::ProvideStop { id } => { info!("remote resource removed: ({:?}) ", id); - self.resources_provided.write().await.remove(&id); + self.remote_provided.write().await.remove(&id); self.inst .event_handler .resource_removed(self.clone(), id) .await; } - _ => (), + RelayMessage::Chat(_) => (), + RelayMessage::Identify { username } => { + info!("peer {} is known as {username:?}", self.id) + } + RelayMessage::Request { id } => { + if let Some(res) = self.inst.local_resources.read().await.get(&id) { + res.on_request(self.clone()).await; + } else { + warn!("({}) requested unknown local resource", self.id) + } + } + RelayMessage::RequestStop { id } => {} } } |