diff --git a/src/gateway/wasm/heartbeat.rs b/src/gateway/wasm/heartbeat.rs index 6916db4..80f863e 100644 --- a/src/gateway/wasm/heartbeat.rs +++ b/src/gateway/wasm/heartbeat.rs @@ -1,4 +1,40 @@ -use tokio::task::JoinHandle; +use tokio::task::{self, JoinHandle}; use ws_stream_wasm::*; use super::*; + +#[async_trait] +impl HeartbeatHandlerCapable for HeartbeatHandler { + fn get_send(&self) -> &Sender { + &self.send + } + + fn get_heartbeat_interval(&self) -> Duration { + self.heartbeat_interval + } + + fn new( + heartbeat_interval: Duration, + websocket_tx: Arc>>, + kill_rc: tokio::sync::broadcast::Receiver<()>, + ) -> HeartbeatHandler { + let (send, receive) = tokio::sync::mpsc::channel(32); + let kill_receive = kill_rc.resubscribe(); + + let handle: JoinHandle<()> = task::spawn(async move { + HeartbeatHandler::heartbeat_task( + websocket_tx, + heartbeat_interval, + receive, + kill_receive, + ) + .await; + }); + + Self { + heartbeat_interval, + send, + handle, + } + } +}