use serde::{Serialize, Deserialize}; use actix::prelude::*; use actix::Message; use actix_web::{web, Error, HttpRequest, HttpResponse}; use actix_web_actors::ws; use crate::game; use crate::server; pub async fn ws_initiate(server: web::Data>, r: HttpRequest, stream: web::Payload) -> Result { println!("{:?}", r); let (addr, res) = ws::start_with_addr(server::GameConnection::new(server.as_ref().clone()), &r, stream)?; println!("{:?}", res); Ok(res) } #[derive(Serialize, Deserialize)] #[serde(rename_all = "snake_case")] pub enum ClientMessage { CreateGame{ game_id: String, nick: String }, Join{ game_id: String, nick: String }, SubmitWord{ word: String }, SubmitGuess{ guesses: Vec<(String, String)> }, } #[derive(Serialize, Deserialize)] #[serde(rename_all = "snake_case")] pub enum GameStateData { Starting, Creating{ question: String, available_chars: Vec }, Guessing{ submitted_words: Vec<(String, Vec)>, questions: Vec }, Revealing{ }, } #[derive(Serialize, Deserialize)] #[serde(rename_all = "snake_case")] pub struct PlayerData { pub nick: String, pub points: i32 } #[derive(Serialize, Deserialize)] #[serde(rename_all = "snake_case")] pub struct GameData { pub players: Vec, pub state_data: GameStateData } #[derive(Serialize)] #[serde(rename_all = "snake_case")] pub enum UpdateMessage { GameNotFound{ game_id: String }, GameAlreadyExists{ game_id: String }, GameState(GameData), }