http_ws.rs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. use crate::ws::connection::{FlowyRawWebSocket, FlowyWSSender};
  2. use flowy_error::internal_error;
  3. pub use flowy_error::FlowyError;
  4. use lib_infra::future::FutureResult;
  5. pub use lib_ws::{WSConnectState, WSMessageReceiver, WebSocketRawMessage};
  6. use lib_ws::{WSController, WSSender};
  7. use std::sync::Arc;
  8. use tokio::sync::broadcast::Receiver;
  9. impl FlowyRawWebSocket for Arc<WSController> {
  10. fn initialize(&self) -> FutureResult<(), FlowyError> { FutureResult::new(async { Ok(()) }) }
  11. fn start_connect(&self, addr: String, _user_id: String) -> FutureResult<(), FlowyError> {
  12. let cloned_ws = self.clone();
  13. FutureResult::new(async move {
  14. let _ = cloned_ws.start(addr).await.map_err(internal_error)?;
  15. Ok(())
  16. })
  17. }
  18. fn stop_connect(&self) -> FutureResult<(), FlowyError> {
  19. let controller = self.clone();
  20. FutureResult::new(async move {
  21. controller.stop().await;
  22. Ok(())
  23. })
  24. }
  25. fn subscribe_connect_state(&self) -> Receiver<WSConnectState> { self.subscribe_state() }
  26. fn reconnect(&self, count: usize) -> FutureResult<(), FlowyError> {
  27. let cloned_ws = self.clone();
  28. FutureResult::new(async move {
  29. let _ = cloned_ws.retry(count).await.map_err(internal_error)?;
  30. Ok(())
  31. })
  32. }
  33. fn add_receiver(&self, receiver: Arc<dyn WSMessageReceiver>) -> Result<(), FlowyError> {
  34. let _ = self.add_ws_message_receiver(receiver).map_err(internal_error)?;
  35. Ok(())
  36. }
  37. fn sender(&self) -> Result<Arc<dyn FlowyWSSender>, FlowyError> {
  38. let sender = self.ws_message_sender().map_err(internal_error)?;
  39. Ok(sender)
  40. }
  41. }
  42. impl FlowyWSSender for WSSender {
  43. fn send(&self, msg: WebSocketRawMessage) -> Result<(), FlowyError> {
  44. let _ = self.send_msg(msg).map_err(internal_error)?;
  45. Ok(())
  46. }
  47. }