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
44
45
#![feature(vec_drain_as_slice)]

use std::net::SocketAddr;

mod config;
mod network_bridge;

pub mod actor;
pub mod crypto;
pub mod p2p;
pub mod primitives;
pub mod rpc;
pub mod storage;
pub mod traits;

use actor::prelude::{Actor, Addr, System, SystemRunner};
use crypto::keypair::PrivateKey;
use p2p::p2p_start;
use rpc::rpc_start;
use traits::actor::BridgeActor;

pub use config::Configure;
pub use network_bridge::NetworkBridgeActor;

pub fn system_init() -> SystemRunner {
    System::new("Teatree")
}

pub fn system_run(runner: SystemRunner) {
    let _ = runner.run();
}

pub fn network_start<A: BridgeActor>(
    p2p_socket: SocketAddr,
    rpc_socket: SocketAddr,
    psk: Option<PrivateKey>,
) -> Addr<NetworkBridgeActor<A>> {
    let p2p_addr = p2p_start::<NetworkBridgeActor<A>>(p2p_socket, psk);
    let rpc_addr = rpc_start::<NetworkBridgeActor<A>>(rpc_socket);

    NetworkBridgeActor::create(|ctx| {
        ctx.set_mailbox_capacity(100);
        NetworkBridgeActor::load(p2p_addr, rpc_addr)
    })
}