net_stream/server/
actor_handle.rs1use super::actor::Message;
2use super::peer_uid::PeerUid;
3use crate::message_types::MessageTypes;
4use futures::channel::mpsc;
5use futures::channel::oneshot;
6use std::sync::Arc;
7use tokio::task::JoinHandle;
8
9#[derive(Debug, Clone)]
11pub struct ActorHandle<M: MessageTypes> {
12 sender: mpsc::UnboundedSender<Message<M>>,
13 _join_handle: Arc<JoinHandle<()>>,
14}
15
16impl<M> ActorHandle<M>
17where
18 M: MessageTypes,
19{
20 pub(crate) fn new(join_handle: JoinHandle<()>, sender: mpsc::UnboundedSender<Message<M>>) -> ActorHandle<M> {
22 Self {
23 _join_handle: Arc::new(join_handle),
24 sender,
25 }
26 }
27
28 pub fn message_peer_tcp(&self, peer_uid: PeerUid, msg: M::TcpFromServer) {
30 log::debug!("Message {peer_uid:?} TCP");
31 self.sender
32 .unbounded_send(Message::ToPeerTcp { peer_uid, msg })
33 .expect("Actor is not accepting any new messages")
34 }
35
36 pub fn message_peer_udp(&self, peer_uid: PeerUid, msg: M::UdpFromServer) {
38 log::debug!("Message {peer_uid:?} UDP");
39 self.sender
40 .unbounded_send(Message::ToPeerUdp { peer_uid, msg })
41 .expect("Actor is not accepting any new messages")
42 }
43
44 pub fn announce_tcp(&self, msg: M::TcpFromServer) {
46 log::debug!("Announce TCP");
47 self.sender
48 .unbounded_send(Message::AnnounceTcp { msg })
49 .expect("Actor is not accepting any new messages")
50 }
51
52 pub fn announce_udp(&self, msg: M::UdpFromServer) {
54 log::debug!("Announce UDP");
55 self.sender
56 .unbounded_send(Message::AnnounceUdp { msg })
57 .expect("Actor is not accepting any new messages")
58 }
59
60 pub async fn get_number_of_connected_peers(&self) -> usize {
62 let (tx, rx) = oneshot::channel();
63 self.sender
64 .unbounded_send(Message::GetNumberOfConnectedPeers { tx })
65 .expect("Actor is not accepting any new messages");
66
67 rx.await.expect("Expected response from actor")
68 }
69}