Multiplayer #1
3 changed files with 26 additions and 9 deletions
4
server/config.json
Normal file
4
server/config.json
Normal file
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"dictionary_path": "../resources/dictionary.csv",
|
||||
"static_path": "../ui/dist"
|
||||
}
|
|
@ -2,16 +2,12 @@ use rocket::serde::{Deserialize, Serialize};
|
|||
use rocket::tokio::sync::broadcast::Sender;
|
||||
use rocket::tokio::sync::RwLock;
|
||||
use std::collections::HashMap;
|
||||
use std::sync::{LazyLock, Weak};
|
||||
use std::sync::Weak;
|
||||
use word_grid::api::{APIGame, ApiState, Update};
|
||||
use word_grid::dictionary::{Dictionary, DictionaryImpl};
|
||||
use word_grid::game::{Error, PlayedTile};
|
||||
use word_grid::player_interaction::ai::Difficulty;
|
||||
use ws::frame::{CloseCode, CloseFrame};
|
||||
|
||||
pub static DICTIONARY: LazyLock<DictionaryImpl> =
|
||||
LazyLock::new(|| DictionaryImpl::create_from_path("../resources/dictionary.csv"));
|
||||
|
||||
pub fn escape_characters(x: &str) -> String {
|
||||
let x = x
|
||||
.replace("&", "&")
|
||||
|
|
|
@ -6,18 +6,21 @@ use rand::prelude::SmallRng;
|
|||
use rand::SeedableRng;
|
||||
use rocket::fs::FileServer;
|
||||
use rocket::futures::{SinkExt, StreamExt};
|
||||
use rocket::serde::Deserialize;
|
||||
use rocket::tokio::sync::broadcast::Sender;
|
||||
use rocket::tokio::sync::{Mutex, RwLock};
|
||||
use rocket::tokio::time::interval;
|
||||
use rocket::{tokio, State};
|
||||
use server::{
|
||||
escape_characters, reject_websocket_with_reason, ClientToServerMessage, GameEvent, GameMove,
|
||||
InnerRoomMessage, Player, Room, RoomEvent, RoomMap, ServerToClientMessage, DICTIONARY,
|
||||
InnerRoomMessage, Player, Room, RoomEvent, RoomMap, ServerToClientMessage,
|
||||
};
|
||||
use std::sync::Arc;
|
||||
use std::fs;
|
||||
use std::sync::{Arc, OnceLock};
|
||||
use std::time::Duration;
|
||||
use tokio::select;
|
||||
use word_grid::api::{APIGame, Update};
|
||||
use word_grid::dictionary::{Dictionary, DictionaryImpl};
|
||||
use word_grid::game::Game;
|
||||
use ws::frame::CloseCode;
|
||||
use ws::stream::DuplexStream;
|
||||
|
@ -88,7 +91,7 @@ async fn incoming_message_handler<E: std::fmt::Display>(
|
|||
);
|
||||
} else {
|
||||
let rng = SmallRng::from_entropy();
|
||||
let dictionary = DICTIONARY.clone();
|
||||
let dictionary = DICTIONARY.get().unwrap().clone();
|
||||
let player_names = room
|
||||
.party_info
|
||||
.players
|
||||
|
@ -393,10 +396,24 @@ async fn room(
|
|||
})
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
struct Config {
|
||||
dictionary_path: String,
|
||||
static_path: String,
|
||||
}
|
||||
|
||||
pub static DICTIONARY: OnceLock<DictionaryImpl> = OnceLock::new();
|
||||
|
||||
#[launch]
|
||||
fn rocket() -> _ {
|
||||
let config_str = fs::read_to_string("config.json").unwrap();
|
||||
let config: Config = serde_json::from_str(&config_str).unwrap();
|
||||
|
||||
let dictionary = DictionaryImpl::create_from_path(&config.dictionary_path);
|
||||
DICTIONARY.set(dictionary).unwrap();
|
||||
|
||||
rocket::build()
|
||||
.manage(Mutex::new(RoomMap::new()))
|
||||
.mount("/", FileServer::from("../ui/dist"))
|
||||
.mount("/", FileServer::from(config.static_path))
|
||||
.mount("/", routes![room])
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue