From b38615b5ddc6450d9c4abf87463ac2fbc34673b0 Mon Sep 17 00:00:00 2001 From: some body Date: Thu, 16 Sep 2021 16:47:52 -0500 Subject: [PATCH] RircdState::run() result channel --- src/endpoint.rs | 4 ++-- src/event.rs | 10 +++++++++- src/irc_endpoint.rs | 43 +++++++++++++++++++++++++++++++------------ src/state.rs | 12 ++++++++---- 4 files changed, 50 insertions(+), 19 deletions(-) diff --git a/src/endpoint.rs b/src/endpoint.rs index effd3c0..2763c59 100644 --- a/src/endpoint.rs +++ b/src/endpoint.rs @@ -9,6 +9,6 @@ use crate::event::Event; pub trait Endpoint { fn name(&self) -> String; fn is_active(&self) -> bool; - async fn listen(self: Arc, success_status_send: oneshot::Sender>, - event_receiver: mpsc::Sender); + async fn listen(self: Arc, event_sender: oneshot::Sender>>, + event_handler: mpsc::Sender); } diff --git a/src/event.rs b/src/event.rs index 8c403e7..85fbb64 100644 --- a/src/event.rs +++ b/src/event.rs @@ -2,6 +2,7 @@ use tokio::sync::oneshot; use eyre::Result; pub enum InternalEvent { + Test, } pub enum EventKind { @@ -12,5 +13,12 @@ pub enum EventKind { pub struct Event { pub kind: EventKind, - pub result_sender: oneshot::Sender>, + pub result_sender: oneshot::Sender, +} + +pub enum EventResponse { + Success, + SuccessQuery(String), + //use Error type + Failed(String), } diff --git a/src/irc_endpoint.rs b/src/irc_endpoint.rs index 9b08f67..8a93ead 100644 --- a/src/irc_endpoint.rs +++ b/src/irc_endpoint.rs @@ -1,13 +1,20 @@ -use crate::endpoint::Endpoint; +use crate::{endpoint::Endpoint, event::InternalEvent}; use async_trait::async_trait; -use tokio::sync::{mpsc,oneshot}; +use tokio::sync::{mpsc,oneshot,Mutex}; use std::sync::Arc; use eyre::Result; -use crate::event::{EventKind,Event}; +use crate::event::{EventKind,Event, EventResponse}; pub struct IrcEndpoint { } +impl IrcEndpoint { + fn new() -> Result { + Ok( IrcEndpoint { + }) + } +} + #[async_trait] impl Endpoint for IrcEndpoint { fn name(&self) -> String { @@ -18,15 +25,27 @@ impl Endpoint for IrcEndpoint { true } - async fn listen(self: Arc, success_status_send: oneshot::Sender>, - event_receiver: mpsc::Sender) { - success_status_send.send(Ok(())); + async fn listen(self: Arc, event_sink_sender: oneshot::Sender>>, + event_handler: mpsc::Sender) { + //TODO find apropiate defeault or size + let (s,r) = mpsc::channel(64); + event_sink_sender.send(Ok(s)); + + + loop { + let (event_response_send, event_response_recv) = oneshot::channel(); + event_handler.send( + Event { + kind: EventKind::Internal(InternalEvent::Test), + result_sender: event_response_send, + }).await; + + //TODO don't unwrap + match event_response_recv.await.unwrap() { + EventResponse::Success => {}, + _ => {}, + }; + } - let (s,r) = oneshot::channel(); - event_receiver.send( - Event { - kind: EventKind::Message, - event.result_sender.send(Ok(()), - }).await; } } diff --git a/src/state.rs b/src/state.rs index 2df9794..b5ecf4f 100644 --- a/src/state.rs +++ b/src/state.rs @@ -5,7 +5,7 @@ use std::time::Instant; use std::sync::Arc; use tokio::sync::oneshot; use tokio::sync::mpsc; -use crate::event::{EventKind,Event}; +use crate::event::{EventKind,Event,EventResponse}; use crate::endpoint::Endpoint; use crate::irc_endpoint::IrcEndpoint; @@ -50,7 +50,7 @@ impl RircdState { //try to start each endpoint self.endpoints.iter().filter(|ep| ep.is_active()).for_each(|endpoint| { let endpoint_name = endpoint.name(); - let (success_status_send,success_status_recv) = oneshot::channel::>(); + let (success_status_send,success_status_recv) = oneshot::channel::>>(); tokio::spawn(endpoint.clone().listen(success_status_send, event_sender.to_owned())); //TODO color err msg //TODO paralelize and sync at the end @@ -73,8 +73,12 @@ impl RircdState { tokio::select! { event = event_receiver.recv() => { //TODO don't unwrap() I guess - match event.unwrap().kind { - EventKind::Internal(ev) => {}, + let event = event.unwrap(); + match event.kind { + EventKind::Internal(ev) => { + //TODO impl + event.result_sender.send(EventResponse::Success); + }, EventKind::Message => {}, _ => {}, };