ws_server.rs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. use crate::service::ws::{
  2. entities::{Connect, Disconnect, Session, SessionId},
  3. WsMessageAdaptor,
  4. };
  5. use actix::{Actor, Context, Handler};
  6. use backend_service::errors::ServerError;
  7. use dashmap::DashMap;
  8. pub struct WsServer {
  9. sessions: DashMap<SessionId, Session>,
  10. }
  11. impl std::default::Default for WsServer {
  12. fn default() -> Self {
  13. Self {
  14. sessions: DashMap::new(),
  15. }
  16. }
  17. }
  18. impl WsServer {
  19. pub fn new() -> Self { WsServer::default() }
  20. pub fn send(&self, _msg: WsMessageAdaptor) { unimplemented!() }
  21. }
  22. impl Actor for WsServer {
  23. type Context = Context<Self>;
  24. fn started(&mut self, _ctx: &mut Self::Context) {}
  25. }
  26. impl Handler<Connect> for WsServer {
  27. type Result = Result<(), ServerError>;
  28. fn handle(&mut self, msg: Connect, _ctx: &mut Context<Self>) -> Self::Result {
  29. let session: Session = msg.into();
  30. self.sessions.insert(session.id.clone(), session);
  31. Ok(())
  32. }
  33. }
  34. impl Handler<Disconnect> for WsServer {
  35. type Result = Result<(), ServerError>;
  36. fn handle(&mut self, msg: Disconnect, _: &mut Context<Self>) -> Self::Result {
  37. self.sessions.remove(&msg.sid);
  38. Ok(())
  39. }
  40. }
  41. impl Handler<WsMessageAdaptor> for WsServer {
  42. type Result = ();
  43. fn handle(&mut self, _msg: WsMessageAdaptor, _ctx: &mut Context<Self>) -> Self::Result { unimplemented!() }
  44. }
  45. impl actix::Supervised for WsServer {
  46. fn restarting(&mut self, _ctx: &mut Context<WsServer>) {
  47. log::warn!("restarting");
  48. }
  49. }