diff --git a/src/document/session.rs b/src/document/session.rs index ef6acfa..df38eb2 100644 --- a/src/document/session.rs +++ b/src/document/session.rs @@ -5,7 +5,7 @@ use crate::{ create::IndexType, definition::{DocDef, DocFuncType}, }, - message::wrapper::Message, + message::{wrapper::Message, MessageID}, name::{Name, NameType}, queue::{ data_director::{Include, Path, RegMsg, Register}, @@ -45,6 +45,23 @@ impl Session { names } + pub fn start(mut queue: Queue) { + let (tx, rx) = channel(); + let msg_id = MessageID::new(); + let sender_id = queue.add_sender(tx); + let path = Path::new( + Include::Just(msg_id.clone()), + Include::All, + Include::Just(Action::DocumentCreated), + ); + let reg_msg = Register::new(sender_id.clone(), RegMsg::AddRoute(path.clone())); + queue.send(Message::with_id(msg_id.clone(), reg_msg)); + rx.recv().unwrap(); // Wait for completion. + queue.send(Message::with_id(msg_id, Self::document_definition())); + rx.recv().unwrap(); // Wait for completion. + queue.remove_sender(&sender_id); + } + pub fn document_definition() -> DocDef { let name_id = Self::id_field_names()[0].clone(); let name_expire = Self::expire_field_names()[0].clone(); diff --git a/src/lib.rs b/src/lib.rs index 94990a3..ef0f695 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -218,15 +218,10 @@ pub struct MoreThanText { impl MoreThanText { pub fn new() -> Self { let queue = Queue::new(); - let mut output = Self { - queue: queue.clone(), - }; + CreateDoc::start(queue.clone()); // needs to be first. Clock::start(queue.clone()); - CreateDoc::start(queue.clone()); - output - .create_document(Session::document_definition()) - .unwrap(); - output + Session::start(queue.clone()); + Self { queue: queue } } pub fn client(&self) -> MTTClient { @@ -241,6 +236,7 @@ impl MoreThanText { MTTClient::new(self.queue.clone(), Some(id), lang) } + // /* fn new_session(lang: Option) -> ClientAction { let mut output = Addition::new(Session::doc_names()[0].clone()); match lang { @@ -380,7 +376,7 @@ impl MoreThanText { self.queue.remove_sender(&sender_id); output } - + // */ pub fn get_document(&self, name: &str, id: &str) -> Result { if name == "page" { Ok("something".to_string())