1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
use std::net::SocketAddr;
use tokio::net::TcpListener;
use crate::actor::prelude::*;
use crate::traits::actor::RPCBridgeActor;
mod listen;
mod request;
mod response;
mod rpc;
mod session;
use listen::{RPCListenActor, RPCTcpConnectMessage};
pub use rpc::RPCActor;
pub fn rpc_start<A: RPCBridgeActor>(rpc_socket: SocketAddr) -> Addr<RPCActor<A>> {
let rpc_addr = RPCActor::create(|ctx: &mut Context<RPCActor<A>>| {
ctx.set_mailbox_capacity(100);
RPCActor::load()
});
let listener =
TcpListener::bind(&rpc_socket).expect(&format!("RPC Socket bind: {} fail!", rpc_socket));
let new_rpc_addr = rpc_addr.clone();
println!("DEBUG: RPC listen: {}", rpc_socket);
RPCListenActor::create(|ctx| {
ctx.set_mailbox_capacity(100);
ctx.add_message_stream(listener.incoming().map_err(|_| ()).map(|st| {
let addr = st.peer_addr().unwrap();
RPCTcpConnectMessage(st, addr)
}));
RPCListenActor {
rpc_addr: new_rpc_addr,
}
});
rpc_addr
}