From 7c68bdb983c2f52fb09e1a5418e5bc44d3b44b30 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Wed, 14 Sep 2022 23:03:52 +0200 Subject: rift works ™™ MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client-native-lib/src/state.rs | 36 ++++++++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 10 deletions(-) (limited to 'client-native-lib/src/state.rs') diff --git a/client-native-lib/src/state.rs b/client-native-lib/src/state.rs index 57c4b29..c5e9365 100644 --- a/client-native-lib/src/state.rs +++ b/client-native-lib/src/state.rs @@ -1,5 +1,6 @@ -use std::{collections::HashMap, sync::Arc}; +use std::{collections::HashMap, pin::Pin, sync::Arc}; +use futures_util::Future; use log::warn; use tokio::sync::{mpsc::UnboundedSender, RwLock}; use webrtc::api::API; @@ -7,18 +8,31 @@ use webrtc::api::API; use crate::{ crypto::Key, peer::Peer, - protocol::{self, ClientboundPacket, RelayMessage, RelayMessageWrapper, ServerboundPacket}, Config, + protocol::{self, ClientboundPacket, RelayMessage, RelayMessageWrapper, ServerboundPacket}, + Config, }; -pub struct State { +pub trait HasPeer { + fn peer(&self) -> &Arc; +} +pub trait PeerInit

{ + fn add_peer( + &self, + p: Arc, + ) -> Pin> + 'static + Send + Sync>>; +} + +pub struct State> { + pub sup: Arc, pub config: Config, pub api: API, pub key: Key, pub my_id: RwLock>, pub sender: UnboundedSender, - pub peers: RwLock>>, + pub peers: RwLock>>, + pub relay_tx: UnboundedSender<(usize, RelayMessage)>, } -impl State { +impl> State { pub async fn my_id(&self) -> usize { self.my_id.read().await.expect("not initialized yet") } @@ -35,10 +49,12 @@ impl State { if id == self.my_id().await { // we joined - YAY! } else { - self.peers - .write() - .await - .insert(id, Peer::create(self.clone(), id).await); + self.peers.write().await.insert( + id, + self.sup + .add_peer(Peer::create(self.clone(), self.relay_tx.clone(), id).await) + .await, + ); } } protocol::ClientboundPacket::ClientLeave { id: _ } => {} @@ -52,7 +68,7 @@ impl State { pub async fn on_relay(&self, sender: usize, p: RelayMessage) { if let Some(peer) = self.peers.read().await.get(&sender).cloned() { - peer.on_relay(p).await + peer.peer().on_relay(p).await } else { warn!("got a packet from a non-existent peer") } -- cgit v1.2.3-70-g09d2