Make swssion pass on any additional information.
This commit is contained in:
@ -13,7 +13,7 @@ use std::{
|
||||
};
|
||||
use uuid::Uuid;
|
||||
|
||||
const RESPONS_TO: [MsgType; 1] = [MsgType::Session];
|
||||
const RESPONS_TO: [MsgType; 2] = [MsgType::Document, MsgType::Session];
|
||||
|
||||
pub struct Request {
|
||||
pub session: Option<Field>,
|
||||
@ -223,7 +223,7 @@ mod clientlinks {
|
||||
let req = Request::new(None);
|
||||
let rx_client = link.send(req);
|
||||
let msg = rx.recv_timeout(TIMEOUT).unwrap();
|
||||
match msg.get_class() {
|
||||
match msg.get_msg_type() {
|
||||
MsgType::ClientRequest => {}
|
||||
_ => unreachable!("should have been a client request"),
|
||||
}
|
||||
@ -269,19 +269,10 @@ impl Client {
|
||||
fn listen(&mut self) {
|
||||
loop {
|
||||
let msg = self.rx.recv().unwrap();
|
||||
match msg.get_class() {
|
||||
MsgType::ClientRequest => {
|
||||
let tx_id = msg.get_data("tx_id").unwrap().to_uuid().unwrap();
|
||||
self.return_to.insert(msg.get_id(), tx_id);
|
||||
self.queue
|
||||
.send(msg.reply(MsgType::SessionValidate))
|
||||
.unwrap();
|
||||
}
|
||||
MsgType::Session => {
|
||||
let rx_id = self.return_to.remove(&msg.get_id()).unwrap();
|
||||
let sess_id = msg.get_data("sess_id").unwrap().to_uuid().unwrap();
|
||||
self.registry.send(&rx_id, Reply::new(sess_id));
|
||||
}
|
||||
match msg.get_msg_type() {
|
||||
MsgType::ClientRequest => self.client_request(msg),
|
||||
MsgType::Document => {},
|
||||
MsgType::Session => self.session(msg),
|
||||
_ => unreachable!("Received message it did not understand"),
|
||||
}
|
||||
}
|
||||
@ -290,6 +281,25 @@ impl Client {
|
||||
fn get_registry(&self) -> ClientRegistry {
|
||||
self.registry.clone()
|
||||
}
|
||||
|
||||
fn client_request(&mut self, msg: Message) {
|
||||
let tx_id = msg.get_data("tx_id").unwrap().to_uuid().unwrap();
|
||||
self.return_to.insert(msg.get_id(), tx_id);
|
||||
self.queue
|
||||
.send(msg.reply(MsgType::SessionValidate))
|
||||
.unwrap();
|
||||
}
|
||||
|
||||
fn session(&mut self, msg: Message) {
|
||||
let rx_id = self.return_to.remove(&msg.get_id()).unwrap();
|
||||
let sess_id = msg.get_data("sess_id").unwrap().to_uuid().unwrap();
|
||||
/*
|
||||
self.queue
|
||||
.send(Message::new(MsgType::DocumentRequest))
|
||||
.unwrap();
|
||||
*/
|
||||
self.registry.send(&rx_id, Reply::new(sess_id));
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
@ -304,12 +314,15 @@ mod clients {
|
||||
fn start_client() {
|
||||
let (tx, rx) = channel();
|
||||
let queue = Queue::new();
|
||||
queue.add(tx, [MsgType::SessionValidate].to_vec());
|
||||
queue.add(
|
||||
tx,
|
||||
[MsgType::SessionValidate, MsgType::DocumentRequest].to_vec(),
|
||||
);
|
||||
let mut link = Client::start(queue.clone());
|
||||
let req = get_root_document();
|
||||
let reply_rx = link.send(req);
|
||||
let sess = rx.recv_timeout(TIMEOUT).unwrap();
|
||||
match sess.get_class() {
|
||||
match sess.get_msg_type() {
|
||||
MsgType::SessionValidate => {}
|
||||
_ => unreachable!("should request session validation"),
|
||||
}
|
||||
@ -317,6 +330,9 @@ mod clients {
|
||||
let mut sess_res = sess.reply(MsgType::Session);
|
||||
sess_res.add_data("sess_id", sess_id.clone());
|
||||
queue.send(sess_res).unwrap();
|
||||
|
||||
//let doc_req = rx.recv_timeout(TIMEOUT).unwrap();
|
||||
|
||||
let reply = reply_rx.recv_timeout(TIMEOUT).unwrap();
|
||||
assert_eq!(reply.get_session(), sess_id);
|
||||
}
|
||||
|
Reference in New Issue
Block a user