Untitled

mail@pastecode.io avatar
unknown
rust
2 years ago
1.2 kB
2
Indexable
impl LogThread 
{
    fn thread_create() -> LogThread
    {
        let (sender, mut receiver) = mpsc::channel::<Command>(32);
        let thread = tokio::spawn(async move 
        {
            while let Some(cmd) = receiver.recv().await 
            {
                // -- here i need log_data queue -- //
            }
        });

        LogThread { thread, sender }
    }

    async fn thread_close(self) -> Result<(), tokio::task::JoinError> 
    {
        self.thread.await
    }    
}

pub struct Log
{
    log_data:       VecDeque<LogData>,
    database:       MongoDBConnection,
    thread:         LogThread,
}

impl Log
{
    pub fn log(&mut self, category: &str, subcategory: &str, logtext: &str)
    {
        let log_data_value = LogData::log_data(category, subcategory, logtext);
        self.log_data.push_front(log_data_value);
        self.send_signal();
    }

    fn send_signal(&self)
    {
        block_on(self.thread.sender.send(Command::SendData)).unwrap_or_default()
    }

    fn get_logdata(&self) -> Iter<LogData>
    {
        self.log_data.iter()
    }

    pub async fn close(self)
    {
        let close = self.thread.thread_close();
    }
}