call/
call.rs

1#![allow(unused_imports)]
2use std::thread;
3use std::time::Duration;
4
5use queen::{Socket, Node, Port, NonHook};
6use queen::net::NsonCodec;
7use queen::dict::*;
8use queen::nson::{MessageId, msg};
9use queen::error::Code;
10
11fn main() {
12    let socket = Socket::new(MessageId::new(), NonHook).unwrap();
13
14    // start wire 1
15    let wire1 = socket.connect(MessageId::new(), false, msg!{}, None, None).unwrap();
16
17    wire1.send(msg!{
18        CHAN: PING
19    }).unwrap();
20
21    let ret = wire1.wait(Some(Duration::from_secs(1))).unwrap();
22    println!("wire 1 ping ret: {:?}", ret);
23
24    // start wire 2
25    let wire2 = socket.connect(MessageId::new(), false, msg!{}, None, None).unwrap();
26
27    wire2.send(msg!{
28        CHAN: PING
29    }).unwrap();
30
31    let ret = wire2.wait(Some(Duration::from_secs(1))).unwrap();
32    println!("wire 2 ping ret: {:?}", ret);
33
34
35    // wire 1 attach
36    wire1.send(msg!{
37        CHAN: ATTACH,
38        VALUE: "hello"
39    }).unwrap();
40
41    let ret = wire1.wait(Some(Duration::from_secs(1))).unwrap();
42    if let Some(err) = Code::get(&ret) {
43        if err != Code::Ok {
44            println!("wire 1 attach error: {:?}", err);
45            return
46        }
47    }
48
49    println!("wire 1 attach ret: {:?}", ret);
50
51    thread::spawn(move || {
52        loop {
53            if let Ok(ret) = wire1.wait(Some(Duration::from_secs(1))) {
54                if let Some(err) = Code::get(&ret) {
55                    if err != Code::Ok {
56                        println!("wire 1 recv error: {:?}", err);
57                        return
58                    }
59                }
60
61                println!("wire 1 recv ret: {:?}", ret);
62
63                if let Some(_) = ret.get("aaa") {
64                    wire1.send(msg!{
65                        CHAN: "hello",
66                        CODE: 0i32,
67                        TO: ret.get_message_id(FROM).unwrap(),
68                        "lalala": "wawawa"
69                    }).unwrap();
70                }
71            }
72        }
73    });
74
75
76    // wire 2 send
77    wire2.send(msg!{
78        ID: MessageId::new(),
79        CHAN: "hello",
80        "aaa": true,
81        "hello": "world"
82    }).unwrap();
83
84    let ret = wire2.wait(Some(Duration::from_secs(1))).unwrap();
85    if let Some(err) = Code::get(&ret) {
86        if err != Code::Ok {
87            println!("wire 2 send error: {:?}", err);
88            return
89        }
90    }
91
92    println!("wire 2 send ret: {:?}", ret);
93}