Make swssion pass on any additional information.

This commit is contained in:
2025-04-15 09:53:38 -04:00
parent 744f2077f4
commit a5b4398eab
6 changed files with 105 additions and 50 deletions

View File

@ -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);
}