ws_server.rs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. use crate::services::web_socket::{
  2. entities::{Connect, Disconnect, Session, SessionId},
  3. WebSocketMessage,
  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 {
  20. WSServer::default()
  21. }
  22. pub fn send(&self, _msg: WebSocketMessage) {
  23. unimplemented!()
  24. }
  25. }
  26. impl Actor for WSServer {
  27. type Context = Context<Self>;
  28. fn started(&mut self, _ctx: &mut Self::Context) {}
  29. }
  30. impl Handler<Connect> for WSServer {
  31. type Result = Result<(), ServerError>;
  32. fn handle(&mut self, msg: Connect, _ctx: &mut Context<Self>) -> Self::Result {
  33. let session: Session = msg.into();
  34. self.sessions.insert(session.id.clone(), session);
  35. Ok(())
  36. }
  37. }
  38. impl Handler<Disconnect> for WSServer {
  39. type Result = Result<(), ServerError>;
  40. fn handle(&mut self, msg: Disconnect, _: &mut Context<Self>) -> Self::Result {
  41. self.sessions.remove(&msg.sid);
  42. Ok(())
  43. }
  44. }
  45. impl Handler<WebSocketMessage> for WSServer {
  46. type Result = ();
  47. fn handle(&mut self, _msg: WebSocketMessage, _ctx: &mut Context<Self>) -> Self::Result {
  48. unimplemented!()
  49. }
  50. }
  51. impl actix::Supervised for WSServer {
  52. fn restarting(&mut self, _ctx: &mut Context<WSServer>) {
  53. log::warn!("restarting");
  54. }
  55. }