aboutsummaryrefslogtreecommitdiff
path: root/src/igd_actor.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/igd_actor.rs')
-rw-r--r--src/igd_actor.rs26
1 files changed, 14 insertions, 12 deletions
diff --git a/src/igd_actor.rs b/src/igd_actor.rs
index 6624ab3..4e2f4b6 100644
--- a/src/igd_actor.rs
+++ b/src/igd_actor.rs
@@ -1,31 +1,33 @@
use igd::aio::*;
use log::*;
-use tokio::sync::broadcast;
use anyhow::{Result, Context};
-use std::cell::Cell;
+use tokio::sync::watch;
+use crate::messages;
-use crate::diplonat::*;
-use crate::node_state::*;
-
-pub struct IgdAdapter<'a> {
- state: &'a Cell<NodeState>,
+pub struct IgdActor {
+ rx_ports: watch::Receiver<messages::PublicExposedPorts>,
gateway: Gateway,
}
-impl<'a> IgdAdapter<'a> {
- pub async fn new(ns: &'a Cell<NodeState>, send: &broadcast::Sender<()>) -> Result<IgdAdapter<'a>> {
+
+impl IgdActor {
+ pub async fn new(rxp: &watch::Receiver<messages::PublicExposedPorts>) -> Result<Self> {
let gw = search_gateway(Default::default())
.await
.context("Failed to find gateway")?;
info!("Gateway: {}", gw);
let ctx = Self {
- state: ns,
- gateway: gw
+ gateway: gw,
+ rx_ports: rxp.clone()
};
+
return Ok(ctx);
}
- fn run(&self) -> Result<()> {
+ pub async fn listen(&mut self) -> Result<()> {
+ while let Some(ports) = self.rx_ports.recv().await {
+ println!("received = {:#?}", ports);
+ }
return Ok(());
}
}