57 lines
1.8 KiB
Rust
Raw Normal View History

2022-01-14 20:52:03 +08:00
use crate::ws::connection::{FlowyRawWebSocket, FlowyWebSocket};
2022-01-07 17:37:11 +08:00
use flowy_error::internal_error;
pub use flowy_error::FlowyError;
use lib_infra::future::FutureResult;
pub use lib_ws::{WSConnectState, WSMessageReceiver, WebSocketRawMessage};
use lib_ws::{WSController, WSSender};
use std::sync::Arc;
use tokio::sync::broadcast::Receiver;
impl FlowyRawWebSocket for Arc<WSController> {
2022-01-07 23:00:23 +08:00
fn initialize(&self) -> FutureResult<(), FlowyError> { FutureResult::new(async { Ok(()) }) }
fn start_connect(&self, addr: String, _user_id: String) -> FutureResult<(), FlowyError> {
2022-01-07 17:37:11 +08:00
let cloned_ws = self.clone();
FutureResult::new(async move {
let _ = cloned_ws.start(addr).await.map_err(internal_error)?;
Ok(())
})
}
fn stop_connect(&self) -> FutureResult<(), FlowyError> {
let controller = self.clone();
FutureResult::new(async move {
controller.stop().await;
Ok(())
})
}
fn subscribe_connect_state(&self) -> Receiver<WSConnectState> { self.subscribe_state() }
fn reconnect(&self, count: usize) -> FutureResult<(), FlowyError> {
let cloned_ws = self.clone();
FutureResult::new(async move {
let _ = cloned_ws.retry(count).await.map_err(internal_error)?;
Ok(())
})
}
fn add_receiver(&self, receiver: Arc<dyn WSMessageReceiver>) -> Result<(), FlowyError> {
let _ = self.add_ws_message_receiver(receiver).map_err(internal_error)?;
Ok(())
}
2022-01-14 20:52:03 +08:00
fn sender(&self) -> Result<Arc<dyn FlowyWebSocket>, FlowyError> {
2022-01-07 17:37:11 +08:00
let sender = self.ws_message_sender().map_err(internal_error)?;
Ok(sender)
}
}
2022-01-14 20:52:03 +08:00
impl FlowyWebSocket for WSSender {
2022-01-07 17:37:11 +08:00
fn send(&self, msg: WebSocketRawMessage) -> Result<(), FlowyError> {
let _ = self.send_msg(msg).map_err(internal_error)?;
Ok(())
}
}