#![allow(unused_imports)]
use std::thread;
use std::time::Duration;
use queen::{Socket, Node, Port, NonHook};
use queen::net::NsonCodec;
use queen::dict::*;
use queen::nson::{MessageId, msg};
use queen::error::Code;
fn main() {
let socket = Socket::new(MessageId::new(), NonHook).unwrap();
let wire1 = socket.connect(MessageId::new(), false, msg!{}, None, None).unwrap();
wire1.send(msg!{
CHAN: PING
}).unwrap();
let ret = wire1.wait(Some(Duration::from_secs(1))).unwrap();
println!("wire 1 ping ret: {:?}", ret);
let wire2 = socket.connect(MessageId::new(), false, msg!{}, None, None).unwrap();
wire2.send(msg!{
CHAN: PING
}).unwrap();
let ret = wire2.wait(Some(Duration::from_secs(1))).unwrap();
println!("wire 2 ping ret: {:?}", ret);
wire1.send(msg!{
CHAN: ATTACH,
VALUE: "hello"
}).unwrap();
let ret = wire1.wait(Some(Duration::from_secs(1))).unwrap();
if let Some(err) = Code::get(&ret) {
if err != Code::Ok {
println!("wire 1 attach error: {:?}", err);
return
}
}
println!("wire 1 attach ret: {:?}", ret);
thread::spawn(move || {
loop {
if let Ok(ret) = wire1.wait(Some(Duration::from_secs(1))) {
if let Some(err) = Code::get(&ret) {
if err != Code::Ok {
println!("wire 1 recv error: {:?}", err);
return
}
}
println!("wire 1 recv ret: {:?}", ret);
if let Some(_) = ret.get("aaa") {
wire1.send(msg!{
CHAN: "hello",
CODE: 0i32,
TO: ret.get_message_id(FROM).unwrap(),
"lalala": "wawawa"
}).unwrap();
}
}
}
});
wire2.send(msg!{
ID: MessageId::new(),
CHAN: "hello",
"aaa": true,
"hello": "world"
}).unwrap();
let ret = wire2.wait(Some(Duration::from_secs(1))).unwrap();
if let Some(err) = Code::get(&ret) {
if err != Code::Ok {
println!("wire 2 send error: {:?}", err);
return
}
}
println!("wire 2 send ret: {:?}", ret);
}