diff options
| -rw-r--r-- | mullvad-daemon/src/lib.rs | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/mullvad-daemon/src/lib.rs b/mullvad-daemon/src/lib.rs index e9a5c12447..0e9783b232 100644 --- a/mullvad-daemon/src/lib.rs +++ b/mullvad-daemon/src/lib.rs @@ -299,6 +299,31 @@ impl DaemonExecutionState { } } +pub struct DaemonCommandChannel { + sender: DaemonCommandSender, + receiver: UnboundedReceiver<InternalDaemonEvent>, +} + +impl DaemonCommandChannel { + pub fn new() -> Self { + let (untracked_sender, receiver) = futures::sync::mpsc::unbounded(); + let sender = DaemonCommandSender(Arc::new(untracked_sender)); + + Self { sender, receiver } + } + + pub fn sender(&self) -> DaemonCommandSender { + self.sender.clone() + } + + fn destructure(self) -> (DaemonEventSender, UnboundedReceiver<InternalDaemonEvent>) { + let event_sender = DaemonEventSender::new(Arc::downgrade(&self.sender.0)); + + (event_sender, self.receiver) + } +} + +#[derive(Clone)] pub struct DaemonCommandSender(Arc<UnboundedSender<InternalDaemonEvent>>); impl DaemonCommandSender { |
