Add kill send to WasmGateway

This commit is contained in:
bitfl0wer 2023-11-19 16:42:05 +01:00
parent 129e72dbf0
commit 4dc8dd9433
No known key found for this signature in database
GPG Key ID: 0ACD574FCF5226CF
1 changed files with 18 additions and 3 deletions

View File

@ -3,18 +3,19 @@ use std::u8;
use super::events::Events; use super::events::Events;
use super::*; use super::*;
use futures_util::stream::SplitStream;
use futures_util::StreamExt; use futures_util::StreamExt;
use tokio::task; use tokio::task;
use tokio_stream::StreamExt;
use ws_stream_wasm::*; use ws_stream_wasm::*;
use crate::types::{self, GatewayReceivePayload, WebSocketEvent}; use crate::types::{self, GatewayReceivePayload};
#[derive(Debug)] #[derive(Debug)]
pub struct WasmGateway { pub struct WasmGateway {
events: Arc<Mutex<Events>>, events: Arc<Mutex<Events>>,
heartbeat_handler: HeartbeatHandler, heartbeat_handler: HeartbeatHandler,
websocket_send: Arc<Mutex<SplitSink<WsStream, WsMessage>>>, websocket_send: Arc<Mutex<SplitSink<WsStream, WsMessage>>>,
websocket_receive: SplitStream<WsStream>, websocket_receive: SplitStream<WsStream>,
kill_send: tokio::sync::broadcast::Sender<()>,
store: GatewayStore, store: GatewayStore,
url: String, url: String,
} }
@ -84,10 +85,15 @@ impl GatewayCapable<WsMessage, WsStream> for WasmGateway {
let mut gateway = WasmGateway { let mut gateway = WasmGateway {
events: shared_events.clone(), events: shared_events.clone(),
heartbeat_handler: todo!(), heartbeat_handler: HeartbeatHandler::new(
Duration::from_millis(gateway_hello.heartbeat_interval),
shared_websocket_send.clone(),
kill_send.subscribe(),
),
websocket_send: shared_websocket_send.clone(), websocket_send: shared_websocket_send.clone(),
websocket_receive, websocket_receive,
store: store.clone(), store: store.clone(),
kill_send: kill_send.clone(),
url: websocket_url.clone(), url: websocket_url.clone(),
}; };
@ -103,6 +109,15 @@ impl GatewayCapable<WsMessage, WsStream> for WasmGateway {
store, store,
)) ))
} }
fn get_heartbeat_handler(&self) -> &HeartbeatHandler {
&self.heartbeat_handler
}
async fn close(&mut self) {
self.kill_send.send(()).unwrap();
self.websocket_send.lock().await.close().await.unwrap();
}
} }
impl WasmGateway { impl WasmGateway {