basic things, get the server to run, start working on rooms
This commit is contained in:
parent
f86e4bb9e1
commit
58303b3769
File diff suppressed because it is too large
Load Diff
|
@ -6,3 +6,8 @@ edition = "2021"
|
||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
rocket = "0.5.0-rc.1"
|
||||||
|
lazy_static = "1.4.0"
|
||||||
|
clap = { version = "3.0.6", features = ["derive"] }
|
||||||
|
rocket_dyn_templates = {version="0.1.0-rc.1", features= ["handlebars"] }
|
||||||
|
rand = "0.8.4"
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,8 @@
|
||||||
|
pub struct Board {
|
||||||
|
x : usize,
|
||||||
|
y : usize,
|
||||||
|
id : String,
|
||||||
|
player_one: String,
|
||||||
|
player_two: String,
|
||||||
|
full : bool
|
||||||
|
}
|
45
src/main.rs
45
src/main.rs
|
@ -1,3 +1,44 @@
|
||||||
fn main() {
|
#[macro_use]
|
||||||
println!("Hello, world!");
|
extern crate rocket;
|
||||||
|
#[macro_use]
|
||||||
|
extern crate lazy_static;
|
||||||
|
|
||||||
|
use clap::Parser;
|
||||||
|
use rocket::fs::{relative, FileServer};
|
||||||
|
use rocket_dyn_templates::Template;
|
||||||
|
|
||||||
|
mod names;
|
||||||
|
mod rooms;
|
||||||
|
|
||||||
|
lazy_static! {
|
||||||
|
static ref ARGS: Args = Args::parse();
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Parser, Debug)]
|
||||||
|
#[clap(about, version, author)]
|
||||||
|
struct Args {
|
||||||
|
// Port number for server
|
||||||
|
#[clap(short, long, default_value_t = 8000)]
|
||||||
|
port: u16,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[launch]
|
||||||
|
fn rocket() -> _ {
|
||||||
|
let mut config = rocket::Config::default();
|
||||||
|
config.port = ARGS.port;
|
||||||
|
rocket::custom(config)
|
||||||
|
.attach(Template::fairing())
|
||||||
|
.mount("/static", FileServer::from(relative!("static")))
|
||||||
|
.mount("/", routes![join])
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tries to join a room for the according id, fails if someone with the same id has already joined
|
||||||
|
**/
|
||||||
|
#[get("/join/<room_id>/<name>")]
|
||||||
|
async fn join(room_id: &str, name: &str) -> String {
|
||||||
|
format!(
|
||||||
|
"Hey, {}! You're joining '{}', please give us a second!",
|
||||||
|
name, room_id
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
use std::io::{BufReader, BufRead};
|
||||||
|
use std::fs::File;
|
||||||
|
use rand::seq::SliceRandom;
|
||||||
|
|
||||||
|
lazy_static!{
|
||||||
|
static ref NOUNS: Vec<String> = get_word_list("resources/nouns.txt");
|
||||||
|
static ref ADJECTIVES: Vec<String> = get_word_list("resources/adjectives.txt");
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn get_random_name() -> String{
|
||||||
|
let rng = &mut rand::thread_rng();
|
||||||
|
let noun: &String = NOUNS.choose(rng).expect("picking name failed");
|
||||||
|
let adjective: &String = ADJECTIVES.choose(rng).expect("picking name failed");
|
||||||
|
adjective.to_owned() + noun
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_word_list(path: &str) -> Vec<String> {
|
||||||
|
let file = File::open(path).unwrap();
|
||||||
|
let reader = BufReader::new(file);
|
||||||
|
let mut words: Vec<String> = vec![];
|
||||||
|
for line in reader.lines() {
|
||||||
|
words.push(line.unwrap());
|
||||||
|
}
|
||||||
|
words
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
use std::sync::Mutex;
|
||||||
|
|
||||||
|
lazy_static! {
|
||||||
|
static ref ARRAY: Mutex<Vec<String>> = Mutex::new(vec![]);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct Room {
|
||||||
|
id: String,
|
||||||
|
players: Vec<String>,
|
||||||
|
full: bool
|
||||||
|
}
|
|
@ -0,0 +1,23 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<link
|
||||||
|
rel="stylesheet"
|
||||||
|
type="text/css"
|
||||||
|
href="static/style.css"
|
||||||
|
media="all"
|
||||||
|
/>
|
||||||
|
<script src="/script.js" charset="utf-8" defer></script>
|
||||||
|
<title>Reversi Online</title>
|
||||||
|
<meta
|
||||||
|
charset="utf-8"
|
||||||
|
name="viewport"
|
||||||
|
content="width=device-width, initial-scale=1"
|
||||||
|
/>
|
||||||
|
<link rel="icon" type="image/x-icon" href="./static/think.svg" />
|
||||||
|
</head>
|
||||||
|
</html>
|
||||||
|
<body>
|
||||||
|
<div id="board"></div>
|
||||||
|
</body>
|
|
@ -0,0 +1 @@
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
|
Loading…
Reference in New Issue