calimero_network/handlers/commands/
open_stream.rs1use actix::{Context, Handler, Message, ResponseFuture};
2use calimero_network_primitives::messages::OpenStream;
3use calimero_network_primitives::stream::{Stream, CALIMERO_STREAM_PROTOCOL};
4use eyre::bail;
5
6use crate::NetworkManager;
7
8impl Handler<OpenStream> for NetworkManager {
9 type Result = ResponseFuture<<OpenStream as Message>::Result>;
10
11 fn handle(
12 &mut self,
13 OpenStream(peer_id): OpenStream,
14 _ctx: &mut Context<Self>,
15 ) -> Self::Result {
16 let mut stream_control = self.swarm.behaviour().stream.new_control();
17
18 Box::pin(async move {
19 let stream = match stream_control
20 .open_stream(peer_id, CALIMERO_STREAM_PROTOCOL)
21 .await
22 {
23 Ok(stream) => stream,
24 Err(err) => {
25 bail!("Failed to open stream: {:?}", err);
26 }
27 };
28
29 Ok(Stream::new(stream))
30 })
31 }
32}