Struct tdn::prelude::HandleResult
source · pub struct HandleResult {
pub owns: Vec<SendType>,
pub rpcs: Vec<Value>,
pub groups: Vec<SendType>,
pub layers: Vec<(u64, SendType)>,
pub networks: Vec<NetworkType>,
}
Expand description
Helper: this is the group/layer/rpc handle result in the network.
Fields§
§owns: Vec<SendType>
P2P network with same PeerId.
rpcs: Vec<Value>
rpc tasks: [(method, params)].
groups: Vec<SendType>
group tasks: [GroupSendMessage]
layers: Vec<(u64, SendType)>
layer tasks: [LayerSendMessage]
networks: Vec<NetworkType>
network tasks: NetworkType
Implementations§
source§impl<'a> HandleResult
impl<'a> HandleResult
pub fn new() -> HandleResult
pub fn own(m: SendType) -> HandleResult
sourcepub fn rpc(p: Value) -> HandleResult
pub fn rpc(p: Value) -> HandleResult
Examples found in repository?
examples/simple.rs (line 18)
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 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
async fn main() {
let (peer_addr, send, mut out_recv) = start().await.unwrap();
println!("Example: peer id: {:?}", peer_addr);
let mut rpc_handler = RpcHandler::new(State(1));
rpc_handler.add_method(
"echo",
|params: Vec<RpcParam>, state: Arc<State>| async move {
let _value = params[0].as_str().ok_or(RpcError::ParseError)?;
assert_eq!(1, state.0);
Ok(HandleResult::rpc(json!(params)))
},
);
rpc_handler.add_method("say_hello", |_params, state: Arc<State>| async move {
assert_eq!(1, state.0);
Ok(HandleResult::rpc(json!("hello")))
});
while let Some(message) = out_recv.recv().await {
match message {
ReceiveMessage::Own(msg) => match msg {
RecvType::Connect(peer, _data) => {
println!("receive own peer {} join", peer.id.short_show());
}
RecvType::Leave(peer) => {
println!("receive own peer {} leave", peer.id.short_show());
}
RecvType::Event(peer_id, _data) => {
println!("receive own event from {}", peer_id.short_show());
}
_ => {
println!("nerver here!")
}
},
ReceiveMessage::Group(msg) => match msg {
RecvType::Connect(peer, _data) => {
println!("receive group peer {} join", peer.id.short_show());
}
RecvType::Result(..) => {
//
}
RecvType::Leave(peer) => {
println!("receive group peer {} leave", peer.id.short_show());
}
RecvType::Event(peer_id, _data) => {
println!("receive group event from {}", peer_id.short_show());
}
_ => {}
},
ReceiveMessage::Layer(fgid, _tgid, msg) => match msg {
RecvType::Connect(peer, _data) => {
println!("Layer Join: {}, Addr: {}.", fgid, peer.id.short_show());
}
RecvType::Result(..) => {
//
}
_ => {}
},
ReceiveMessage::Rpc(uid, params, is_ws) => {
if let Ok(HandleResult {
mut rpcs,
owns: _,
groups: _,
layers: _,
networks: _,
}) = rpc_handler.handle(params).await
{
loop {
if rpcs.len() != 0 {
let msg = rpcs.remove(0);
send.send(SendMessage::Rpc(uid, msg, is_ws))
.await
.expect("TDN channel closed");
} else {
break;
}
}
}
}
ReceiveMessage::NetworkLost => {
println!("No network connections");
}
}
}
}
pub fn group(m: SendType) -> HandleResult
pub fn layer(gid: u64, m: SendType) -> HandleResult
pub fn network(m: NetworkType) -> HandleResult
Auto Trait Implementations§
impl Freeze for HandleResult
impl !RefUnwindSafe for HandleResult
impl Send for HandleResult
impl Sync for HandleResult
impl Unpin for HandleResult
impl !UnwindSafe for HandleResult
Blanket Implementations§
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