pub struct Peer { /* private fields */ }Implementations§
Source§impl Peer
impl Peer
Sourcepub fn new(api: Arc<API>, options: PeerOptions) -> Self
pub fn new(api: Arc<API>, options: PeerOptions) -> Self
Examples found in repository?
examples/p2p.rs (lines 35-41)
14async fn main() -> Result<(), webrtc::Error> {
15 let mut m = MediaEngine::default();
16 let registry = register_default_interceptors(Registry::new(), &mut m)?;
17
18 let api = Arc::new(
19 APIBuilder::new()
20 .with_media_engine(m)
21 .with_interceptor_registry(registry)
22 .build(),
23 );
24
25 let options = PeerOptions {
26 connection_config: Some(RTCConfiguration {
27 ice_servers: vec![RTCIceServer {
28 ..Default::default()
29 }],
30 ..Default::default()
31 }),
32 ..Default::default()
33 };
34
35 let peer1 = Peer::new(
36 api.clone(),
37 PeerOptions {
38 id: Some("peer1".to_string()),
39 ..options.clone()
40 },
41 );
42 let peer2 = Peer::new(
43 api,
44 PeerOptions {
45 id: Some("peer2".to_string()),
46 ..options
47 },
48 );
49
50 let on_signal_peer2 = peer2.clone();
51 peer1.on_signal(Box::new(move |singal| {
52 let pinned_peer2 = on_signal_peer2.clone();
53 Box::pin(async move {
54 pinned_peer2
55 .signal(singal)
56 .await
57 .expect("failed to signal peer2");
58 })
59 }));
60
61 let on_signal_peer1 = peer1.clone();
62 peer2.on_signal(Box::new(move |singal| {
63 let pinned_peer1 = on_signal_peer1.clone();
64 Box::pin(async move {
65 pinned_peer1
66 .signal(singal)
67 .await
68 .expect("failed to signal peer1");
69 })
70 }));
71
72 let (connect_sender, mut connect_receiver) = tokio::sync::mpsc::channel::<()>(1);
73 peer2.on_connect(Box::new(move || {
74 let pinned_connect_sender = connect_sender.clone();
75 Box::pin(async move {
76 pinned_connect_sender
77 .send(())
78 .await
79 .expect("failed to send connect");
80 })
81 }));
82
83 let (message_sender, mut message_receiver) = tokio::sync::mpsc::channel::<Vec<u8>>(1);
84 peer1.on_data(Box::new(move |data| {
85 let pinned_message_sender = message_sender.clone();
86 Box::pin(async move {
87 pinned_message_sender
88 .send(data)
89 .await
90 .expect("failed to send connect");
91 })
92 }));
93
94 peer1.init().await?;
95
96 let _ = connect_receiver.recv().await;
97 if let Some(data_channel) = peer2.get_data_channel() {
98 data_channel.send_text("Hello, world!").await?;
99 }
100
101 let data = message_receiver
102 .recv()
103 .await
104 .expect("failed to receive message from peer2");
105
106 assert_eq!(String::from_utf8_lossy(data.as_ref()), "Hello, world!");
107
108 peer1.close().await?;
109 peer2.close().await?;
110
111 Ok(())
112}pub fn get_id(&self) -> &str
Sourcepub fn get_data_channel(&self) -> Option<Arc<RTCDataChannel>>
pub fn get_data_channel(&self) -> Option<Arc<RTCDataChannel>>
Examples found in repository?
examples/p2p.rs (line 97)
14async fn main() -> Result<(), webrtc::Error> {
15 let mut m = MediaEngine::default();
16 let registry = register_default_interceptors(Registry::new(), &mut m)?;
17
18 let api = Arc::new(
19 APIBuilder::new()
20 .with_media_engine(m)
21 .with_interceptor_registry(registry)
22 .build(),
23 );
24
25 let options = PeerOptions {
26 connection_config: Some(RTCConfiguration {
27 ice_servers: vec![RTCIceServer {
28 ..Default::default()
29 }],
30 ..Default::default()
31 }),
32 ..Default::default()
33 };
34
35 let peer1 = Peer::new(
36 api.clone(),
37 PeerOptions {
38 id: Some("peer1".to_string()),
39 ..options.clone()
40 },
41 );
42 let peer2 = Peer::new(
43 api,
44 PeerOptions {
45 id: Some("peer2".to_string()),
46 ..options
47 },
48 );
49
50 let on_signal_peer2 = peer2.clone();
51 peer1.on_signal(Box::new(move |singal| {
52 let pinned_peer2 = on_signal_peer2.clone();
53 Box::pin(async move {
54 pinned_peer2
55 .signal(singal)
56 .await
57 .expect("failed to signal peer2");
58 })
59 }));
60
61 let on_signal_peer1 = peer1.clone();
62 peer2.on_signal(Box::new(move |singal| {
63 let pinned_peer1 = on_signal_peer1.clone();
64 Box::pin(async move {
65 pinned_peer1
66 .signal(singal)
67 .await
68 .expect("failed to signal peer1");
69 })
70 }));
71
72 let (connect_sender, mut connect_receiver) = tokio::sync::mpsc::channel::<()>(1);
73 peer2.on_connect(Box::new(move || {
74 let pinned_connect_sender = connect_sender.clone();
75 Box::pin(async move {
76 pinned_connect_sender
77 .send(())
78 .await
79 .expect("failed to send connect");
80 })
81 }));
82
83 let (message_sender, mut message_receiver) = tokio::sync::mpsc::channel::<Vec<u8>>(1);
84 peer1.on_data(Box::new(move |data| {
85 let pinned_message_sender = message_sender.clone();
86 Box::pin(async move {
87 pinned_message_sender
88 .send(data)
89 .await
90 .expect("failed to send connect");
91 })
92 }));
93
94 peer1.init().await?;
95
96 let _ = connect_receiver.recv().await;
97 if let Some(data_channel) = peer2.get_data_channel() {
98 data_channel.send_text("Hello, world!").await?;
99 }
100
101 let data = message_receiver
102 .recv()
103 .await
104 .expect("failed to receive message from peer2");
105
106 assert_eq!(String::from_utf8_lossy(data.as_ref()), "Hello, world!");
107
108 peer1.close().await?;
109 peer2.close().await?;
110
111 Ok(())
112}pub fn get_connection(&self) -> Option<&RTCPeerConnection>
Sourcepub async fn init(&self) -> Result<(), Error>
pub async fn init(&self) -> Result<(), Error>
Examples found in repository?
examples/p2p.rs (line 94)
14async fn main() -> Result<(), webrtc::Error> {
15 let mut m = MediaEngine::default();
16 let registry = register_default_interceptors(Registry::new(), &mut m)?;
17
18 let api = Arc::new(
19 APIBuilder::new()
20 .with_media_engine(m)
21 .with_interceptor_registry(registry)
22 .build(),
23 );
24
25 let options = PeerOptions {
26 connection_config: Some(RTCConfiguration {
27 ice_servers: vec![RTCIceServer {
28 ..Default::default()
29 }],
30 ..Default::default()
31 }),
32 ..Default::default()
33 };
34
35 let peer1 = Peer::new(
36 api.clone(),
37 PeerOptions {
38 id: Some("peer1".to_string()),
39 ..options.clone()
40 },
41 );
42 let peer2 = Peer::new(
43 api,
44 PeerOptions {
45 id: Some("peer2".to_string()),
46 ..options
47 },
48 );
49
50 let on_signal_peer2 = peer2.clone();
51 peer1.on_signal(Box::new(move |singal| {
52 let pinned_peer2 = on_signal_peer2.clone();
53 Box::pin(async move {
54 pinned_peer2
55 .signal(singal)
56 .await
57 .expect("failed to signal peer2");
58 })
59 }));
60
61 let on_signal_peer1 = peer1.clone();
62 peer2.on_signal(Box::new(move |singal| {
63 let pinned_peer1 = on_signal_peer1.clone();
64 Box::pin(async move {
65 pinned_peer1
66 .signal(singal)
67 .await
68 .expect("failed to signal peer1");
69 })
70 }));
71
72 let (connect_sender, mut connect_receiver) = tokio::sync::mpsc::channel::<()>(1);
73 peer2.on_connect(Box::new(move || {
74 let pinned_connect_sender = connect_sender.clone();
75 Box::pin(async move {
76 pinned_connect_sender
77 .send(())
78 .await
79 .expect("failed to send connect");
80 })
81 }));
82
83 let (message_sender, mut message_receiver) = tokio::sync::mpsc::channel::<Vec<u8>>(1);
84 peer1.on_data(Box::new(move |data| {
85 let pinned_message_sender = message_sender.clone();
86 Box::pin(async move {
87 pinned_message_sender
88 .send(data)
89 .await
90 .expect("failed to send connect");
91 })
92 }));
93
94 peer1.init().await?;
95
96 let _ = connect_receiver.recv().await;
97 if let Some(data_channel) = peer2.get_data_channel() {
98 data_channel.send_text("Hello, world!").await?;
99 }
100
101 let data = message_receiver
102 .recv()
103 .await
104 .expect("failed to receive message from peer2");
105
106 assert_eq!(String::from_utf8_lossy(data.as_ref()), "Hello, world!");
107
108 peer1.close().await?;
109 peer2.close().await?;
110
111 Ok(())
112}Sourcepub fn on_signal(&self, callback: OnSignal)
pub fn on_signal(&self, callback: OnSignal)
Examples found in repository?
examples/p2p.rs (lines 51-59)
14async fn main() -> Result<(), webrtc::Error> {
15 let mut m = MediaEngine::default();
16 let registry = register_default_interceptors(Registry::new(), &mut m)?;
17
18 let api = Arc::new(
19 APIBuilder::new()
20 .with_media_engine(m)
21 .with_interceptor_registry(registry)
22 .build(),
23 );
24
25 let options = PeerOptions {
26 connection_config: Some(RTCConfiguration {
27 ice_servers: vec![RTCIceServer {
28 ..Default::default()
29 }],
30 ..Default::default()
31 }),
32 ..Default::default()
33 };
34
35 let peer1 = Peer::new(
36 api.clone(),
37 PeerOptions {
38 id: Some("peer1".to_string()),
39 ..options.clone()
40 },
41 );
42 let peer2 = Peer::new(
43 api,
44 PeerOptions {
45 id: Some("peer2".to_string()),
46 ..options
47 },
48 );
49
50 let on_signal_peer2 = peer2.clone();
51 peer1.on_signal(Box::new(move |singal| {
52 let pinned_peer2 = on_signal_peer2.clone();
53 Box::pin(async move {
54 pinned_peer2
55 .signal(singal)
56 .await
57 .expect("failed to signal peer2");
58 })
59 }));
60
61 let on_signal_peer1 = peer1.clone();
62 peer2.on_signal(Box::new(move |singal| {
63 let pinned_peer1 = on_signal_peer1.clone();
64 Box::pin(async move {
65 pinned_peer1
66 .signal(singal)
67 .await
68 .expect("failed to signal peer1");
69 })
70 }));
71
72 let (connect_sender, mut connect_receiver) = tokio::sync::mpsc::channel::<()>(1);
73 peer2.on_connect(Box::new(move || {
74 let pinned_connect_sender = connect_sender.clone();
75 Box::pin(async move {
76 pinned_connect_sender
77 .send(())
78 .await
79 .expect("failed to send connect");
80 })
81 }));
82
83 let (message_sender, mut message_receiver) = tokio::sync::mpsc::channel::<Vec<u8>>(1);
84 peer1.on_data(Box::new(move |data| {
85 let pinned_message_sender = message_sender.clone();
86 Box::pin(async move {
87 pinned_message_sender
88 .send(data)
89 .await
90 .expect("failed to send connect");
91 })
92 }));
93
94 peer1.init().await?;
95
96 let _ = connect_receiver.recv().await;
97 if let Some(data_channel) = peer2.get_data_channel() {
98 data_channel.send_text("Hello, world!").await?;
99 }
100
101 let data = message_receiver
102 .recv()
103 .await
104 .expect("failed to receive message from peer2");
105
106 assert_eq!(String::from_utf8_lossy(data.as_ref()), "Hello, world!");
107
108 peer1.close().await?;
109 peer2.close().await?;
110
111 Ok(())
112}Sourcepub fn on_data(&self, callback: OnData)
pub fn on_data(&self, callback: OnData)
Examples found in repository?
examples/p2p.rs (lines 84-92)
14async fn main() -> Result<(), webrtc::Error> {
15 let mut m = MediaEngine::default();
16 let registry = register_default_interceptors(Registry::new(), &mut m)?;
17
18 let api = Arc::new(
19 APIBuilder::new()
20 .with_media_engine(m)
21 .with_interceptor_registry(registry)
22 .build(),
23 );
24
25 let options = PeerOptions {
26 connection_config: Some(RTCConfiguration {
27 ice_servers: vec![RTCIceServer {
28 ..Default::default()
29 }],
30 ..Default::default()
31 }),
32 ..Default::default()
33 };
34
35 let peer1 = Peer::new(
36 api.clone(),
37 PeerOptions {
38 id: Some("peer1".to_string()),
39 ..options.clone()
40 },
41 );
42 let peer2 = Peer::new(
43 api,
44 PeerOptions {
45 id: Some("peer2".to_string()),
46 ..options
47 },
48 );
49
50 let on_signal_peer2 = peer2.clone();
51 peer1.on_signal(Box::new(move |singal| {
52 let pinned_peer2 = on_signal_peer2.clone();
53 Box::pin(async move {
54 pinned_peer2
55 .signal(singal)
56 .await
57 .expect("failed to signal peer2");
58 })
59 }));
60
61 let on_signal_peer1 = peer1.clone();
62 peer2.on_signal(Box::new(move |singal| {
63 let pinned_peer1 = on_signal_peer1.clone();
64 Box::pin(async move {
65 pinned_peer1
66 .signal(singal)
67 .await
68 .expect("failed to signal peer1");
69 })
70 }));
71
72 let (connect_sender, mut connect_receiver) = tokio::sync::mpsc::channel::<()>(1);
73 peer2.on_connect(Box::new(move || {
74 let pinned_connect_sender = connect_sender.clone();
75 Box::pin(async move {
76 pinned_connect_sender
77 .send(())
78 .await
79 .expect("failed to send connect");
80 })
81 }));
82
83 let (message_sender, mut message_receiver) = tokio::sync::mpsc::channel::<Vec<u8>>(1);
84 peer1.on_data(Box::new(move |data| {
85 let pinned_message_sender = message_sender.clone();
86 Box::pin(async move {
87 pinned_message_sender
88 .send(data)
89 .await
90 .expect("failed to send connect");
91 })
92 }));
93
94 peer1.init().await?;
95
96 let _ = connect_receiver.recv().await;
97 if let Some(data_channel) = peer2.get_data_channel() {
98 data_channel.send_text("Hello, world!").await?;
99 }
100
101 let data = message_receiver
102 .recv()
103 .await
104 .expect("failed to receive message from peer2");
105
106 assert_eq!(String::from_utf8_lossy(data.as_ref()), "Hello, world!");
107
108 peer1.close().await?;
109 peer2.close().await?;
110
111 Ok(())
112}Sourcepub fn on_connect(&self, callback: OnConnect)
pub fn on_connect(&self, callback: OnConnect)
Examples found in repository?
examples/p2p.rs (lines 73-81)
14async fn main() -> Result<(), webrtc::Error> {
15 let mut m = MediaEngine::default();
16 let registry = register_default_interceptors(Registry::new(), &mut m)?;
17
18 let api = Arc::new(
19 APIBuilder::new()
20 .with_media_engine(m)
21 .with_interceptor_registry(registry)
22 .build(),
23 );
24
25 let options = PeerOptions {
26 connection_config: Some(RTCConfiguration {
27 ice_servers: vec![RTCIceServer {
28 ..Default::default()
29 }],
30 ..Default::default()
31 }),
32 ..Default::default()
33 };
34
35 let peer1 = Peer::new(
36 api.clone(),
37 PeerOptions {
38 id: Some("peer1".to_string()),
39 ..options.clone()
40 },
41 );
42 let peer2 = Peer::new(
43 api,
44 PeerOptions {
45 id: Some("peer2".to_string()),
46 ..options
47 },
48 );
49
50 let on_signal_peer2 = peer2.clone();
51 peer1.on_signal(Box::new(move |singal| {
52 let pinned_peer2 = on_signal_peer2.clone();
53 Box::pin(async move {
54 pinned_peer2
55 .signal(singal)
56 .await
57 .expect("failed to signal peer2");
58 })
59 }));
60
61 let on_signal_peer1 = peer1.clone();
62 peer2.on_signal(Box::new(move |singal| {
63 let pinned_peer1 = on_signal_peer1.clone();
64 Box::pin(async move {
65 pinned_peer1
66 .signal(singal)
67 .await
68 .expect("failed to signal peer1");
69 })
70 }));
71
72 let (connect_sender, mut connect_receiver) = tokio::sync::mpsc::channel::<()>(1);
73 peer2.on_connect(Box::new(move || {
74 let pinned_connect_sender = connect_sender.clone();
75 Box::pin(async move {
76 pinned_connect_sender
77 .send(())
78 .await
79 .expect("failed to send connect");
80 })
81 }));
82
83 let (message_sender, mut message_receiver) = tokio::sync::mpsc::channel::<Vec<u8>>(1);
84 peer1.on_data(Box::new(move |data| {
85 let pinned_message_sender = message_sender.clone();
86 Box::pin(async move {
87 pinned_message_sender
88 .send(data)
89 .await
90 .expect("failed to send connect");
91 })
92 }));
93
94 peer1.init().await?;
95
96 let _ = connect_receiver.recv().await;
97 if let Some(data_channel) = peer2.get_data_channel() {
98 data_channel.send_text("Hello, world!").await?;
99 }
100
101 let data = message_receiver
102 .recv()
103 .await
104 .expect("failed to receive message from peer2");
105
106 assert_eq!(String::from_utf8_lossy(data.as_ref()), "Hello, world!");
107
108 peer1.close().await?;
109 peer2.close().await?;
110
111 Ok(())
112}pub fn on_close(&self, callback: OnClose)
pub fn on_negotiated(&self, callback: OnNegotiated)
Sourcepub async fn close(&self) -> Result<(), Error>
pub async fn close(&self) -> Result<(), Error>
Examples found in repository?
examples/p2p.rs (line 108)
14async fn main() -> Result<(), webrtc::Error> {
15 let mut m = MediaEngine::default();
16 let registry = register_default_interceptors(Registry::new(), &mut m)?;
17
18 let api = Arc::new(
19 APIBuilder::new()
20 .with_media_engine(m)
21 .with_interceptor_registry(registry)
22 .build(),
23 );
24
25 let options = PeerOptions {
26 connection_config: Some(RTCConfiguration {
27 ice_servers: vec![RTCIceServer {
28 ..Default::default()
29 }],
30 ..Default::default()
31 }),
32 ..Default::default()
33 };
34
35 let peer1 = Peer::new(
36 api.clone(),
37 PeerOptions {
38 id: Some("peer1".to_string()),
39 ..options.clone()
40 },
41 );
42 let peer2 = Peer::new(
43 api,
44 PeerOptions {
45 id: Some("peer2".to_string()),
46 ..options
47 },
48 );
49
50 let on_signal_peer2 = peer2.clone();
51 peer1.on_signal(Box::new(move |singal| {
52 let pinned_peer2 = on_signal_peer2.clone();
53 Box::pin(async move {
54 pinned_peer2
55 .signal(singal)
56 .await
57 .expect("failed to signal peer2");
58 })
59 }));
60
61 let on_signal_peer1 = peer1.clone();
62 peer2.on_signal(Box::new(move |singal| {
63 let pinned_peer1 = on_signal_peer1.clone();
64 Box::pin(async move {
65 pinned_peer1
66 .signal(singal)
67 .await
68 .expect("failed to signal peer1");
69 })
70 }));
71
72 let (connect_sender, mut connect_receiver) = tokio::sync::mpsc::channel::<()>(1);
73 peer2.on_connect(Box::new(move || {
74 let pinned_connect_sender = connect_sender.clone();
75 Box::pin(async move {
76 pinned_connect_sender
77 .send(())
78 .await
79 .expect("failed to send connect");
80 })
81 }));
82
83 let (message_sender, mut message_receiver) = tokio::sync::mpsc::channel::<Vec<u8>>(1);
84 peer1.on_data(Box::new(move |data| {
85 let pinned_message_sender = message_sender.clone();
86 Box::pin(async move {
87 pinned_message_sender
88 .send(data)
89 .await
90 .expect("failed to send connect");
91 })
92 }));
93
94 peer1.init().await?;
95
96 let _ = connect_receiver.recv().await;
97 if let Some(data_channel) = peer2.get_data_channel() {
98 data_channel.send_text("Hello, world!").await?;
99 }
100
101 let data = message_receiver
102 .recv()
103 .await
104 .expect("failed to receive message from peer2");
105
106 assert_eq!(String::from_utf8_lossy(data.as_ref()), "Hello, world!");
107
108 peer1.close().await?;
109 peer2.close().await?;
110
111 Ok(())
112}Sourcepub async fn signal(&self, msg: SignalMessage) -> Result<(), Error>
pub async fn signal(&self, msg: SignalMessage) -> Result<(), Error>
Examples found in repository?
examples/p2p.rs (line 55)
14async fn main() -> Result<(), webrtc::Error> {
15 let mut m = MediaEngine::default();
16 let registry = register_default_interceptors(Registry::new(), &mut m)?;
17
18 let api = Arc::new(
19 APIBuilder::new()
20 .with_media_engine(m)
21 .with_interceptor_registry(registry)
22 .build(),
23 );
24
25 let options = PeerOptions {
26 connection_config: Some(RTCConfiguration {
27 ice_servers: vec![RTCIceServer {
28 ..Default::default()
29 }],
30 ..Default::default()
31 }),
32 ..Default::default()
33 };
34
35 let peer1 = Peer::new(
36 api.clone(),
37 PeerOptions {
38 id: Some("peer1".to_string()),
39 ..options.clone()
40 },
41 );
42 let peer2 = Peer::new(
43 api,
44 PeerOptions {
45 id: Some("peer2".to_string()),
46 ..options
47 },
48 );
49
50 let on_signal_peer2 = peer2.clone();
51 peer1.on_signal(Box::new(move |singal| {
52 let pinned_peer2 = on_signal_peer2.clone();
53 Box::pin(async move {
54 pinned_peer2
55 .signal(singal)
56 .await
57 .expect("failed to signal peer2");
58 })
59 }));
60
61 let on_signal_peer1 = peer1.clone();
62 peer2.on_signal(Box::new(move |singal| {
63 let pinned_peer1 = on_signal_peer1.clone();
64 Box::pin(async move {
65 pinned_peer1
66 .signal(singal)
67 .await
68 .expect("failed to signal peer1");
69 })
70 }));
71
72 let (connect_sender, mut connect_receiver) = tokio::sync::mpsc::channel::<()>(1);
73 peer2.on_connect(Box::new(move || {
74 let pinned_connect_sender = connect_sender.clone();
75 Box::pin(async move {
76 pinned_connect_sender
77 .send(())
78 .await
79 .expect("failed to send connect");
80 })
81 }));
82
83 let (message_sender, mut message_receiver) = tokio::sync::mpsc::channel::<Vec<u8>>(1);
84 peer1.on_data(Box::new(move |data| {
85 let pinned_message_sender = message_sender.clone();
86 Box::pin(async move {
87 pinned_message_sender
88 .send(data)
89 .await
90 .expect("failed to send connect");
91 })
92 }));
93
94 peer1.init().await?;
95
96 let _ = connect_receiver.recv().await;
97 if let Some(data_channel) = peer2.get_data_channel() {
98 data_channel.send_text("Hello, world!").await?;
99 }
100
101 let data = message_receiver
102 .recv()
103 .await
104 .expect("failed to receive message from peer2");
105
106 assert_eq!(String::from_utf8_lossy(data.as_ref()), "Hello, world!");
107
108 peer1.close().await?;
109 peer2.close().await?;
110
111 Ok(())
112}Trait Implementations§
Auto Trait Implementations§
Blanket Implementations§
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more