websocket.rs 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. use serde::{Serialize, Deserialize};
  2. use actix::prelude::*;
  3. use actix::Message;
  4. use actix_web::{web, Error, HttpRequest, HttpResponse};
  5. use actix_web_actors::ws;
  6. use crate::game;
  7. use crate::server;
  8. pub async fn ws_initiate(server: web::Data<Addr<server::Server>>, r: HttpRequest, stream: web::Payload) -> Result<HttpResponse, Error> {
  9. println!("{:?}", r);
  10. let (addr, res) = ws::start_with_addr(server::GameConnection::new(server.as_ref().clone()), &r, stream)?;
  11. println!("{:?}", res);
  12. Ok(res)
  13. }
  14. #[derive(Serialize, Deserialize)]
  15. #[serde(rename_all = "snake_case")]
  16. pub enum ClientMessage {
  17. CreateGame{ game_id: String, nick: String },
  18. Join{ game_id: String, nick: String },
  19. SubmitWord{ word: String },
  20. SubmitGuess{ guesses: Vec<(String, String)> },
  21. }
  22. #[derive(Serialize, Deserialize)]
  23. #[serde(rename_all = "snake_case")]
  24. pub enum GameStateData {
  25. Starting,
  26. Creating{ question: String, available_chars: Vec<char> },
  27. Guessing{ submitted_words: Vec<(String, Vec<char>)>, questions: Vec<String> },
  28. Revealing{ },
  29. }
  30. #[derive(Serialize, Deserialize)]
  31. #[serde(rename_all = "snake_case")]
  32. pub struct PlayerData {
  33. pub nick: String,
  34. pub points: i32
  35. }
  36. #[derive(Serialize, Deserialize)]
  37. #[serde(rename_all = "snake_case")]
  38. pub struct GameData {
  39. pub players: Vec<PlayerData>,
  40. pub state_data: GameStateData
  41. }
  42. #[derive(Serialize)]
  43. #[serde(rename_all = "snake_case")]
  44. pub enum UpdateMessage {
  45. GameNotFound{ game_id: String },
  46. GameAlreadyExists{ game_id: String },
  47. GameState(GameData),
  48. }