diff --git a/Cargo.lock b/Cargo.lock index ee1f15c..f8ff215 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -164,6 +164,12 @@ version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" +[[package]] +name = "case" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd6c0e7b807d60291f42f33f58480c0bfafe28ed08286446f45e463728cf9c1c" + [[package]] name = "cc" version = "1.1.11" @@ -248,6 +254,7 @@ dependencies = [ "clap", "dotenvy", "rustls-pemfile", + "servify", "thiserror", "tokio", "tokio-rustls", @@ -388,9 +395,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.155" +version = "0.2.169" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" +checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" [[package]] name = "libloading" @@ -560,9 +567,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.36" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" dependencies = [ "proc-macro2", ] @@ -694,6 +701,28 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[package]] +name = "servify" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1616b0a3ac3614fc41358a3aeabcf02f663c61cd85139b0d3796aa56fbdb101" +dependencies = [ + "servify_macro", + "tokio", +] + +[[package]] +name = "servify_macro" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ebf724505acc8c78b25b7bdcb375bdf5c22e1d01fcf5439ef70e96bc7398ee" +dependencies = [ + "case", + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "sharded-slab" version = "0.1.7" @@ -795,9 +824,9 @@ dependencies = [ [[package]] name = "tokio" -version = "1.39.2" +version = "1.43.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daa4fb1bc778bd6f04cbfc4bb2d06a7396a8f299dc33ea1900cedaa316f467b1" +checksum = "3d61fa4ffa3de412bfea335c6ecff681de2b609ba3c77ef3e00e521813a9ed9e" dependencies = [ "backtrace", "bytes", @@ -813,9 +842,9 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" +checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", diff --git a/clocking-server/Cargo.toml b/clocking-server/Cargo.toml index 75d863d..601120d 100644 --- a/clocking-server/Cargo.toml +++ b/clocking-server/Cargo.toml @@ -7,6 +7,7 @@ edition = "2021" clap = { version = "4.5.15", features = ["derive", "env"] } dotenvy = "0.15.7" rustls-pemfile = "2.1.3" +servify = "0.1.1" thiserror = "1.0.64" tokio = { version = "1", features = ["full"] } tokio-rustls = "0.26.0" diff --git a/clocking-server/src/instance.rs b/clocking-server/src/instance.rs new file mode 100644 index 0000000..b1a58c5 --- /dev/null +++ b/clocking-server/src/instance.rs @@ -0,0 +1,31 @@ +use servify; + +#[derive(Debug, Clone, Copy)] +pub struct InstanceID(u32); + +#[derive(Debug, Clone, Copy)] +pub struct PlayerID(u32); + +#[derive(Debug)] +pub enum InstanceMessage { + JoinInstance(PlayerID), +} + +#[servify::service( + impls = [ + Instance_join, + ] +)] +#[derive(Debug)] +pub struct Instance { + instance_id: InstanceID, + players: Vec, +} + +#[servify::export] +impl Instance { + fn join(&mut self, player_id: PlayerID) -> Vec { + self.players.push(player_id); + self.players.clone() + } +} diff --git a/clocking-server/src/instance_manager.rs b/clocking-server/src/instance_manager.rs new file mode 100644 index 0000000..cd4bbd4 --- /dev/null +++ b/clocking-server/src/instance_manager.rs @@ -0,0 +1,26 @@ +use servify; + +use crate::instance::{Instance, InstanceID, PlayerID}; +use std::collections::HashMap; + +#[derive(Debug)] +pub enum InstanceManagerMessage { + NewInstance(InstanceID), + JoinInstance(PlayerID), +} + +#[servify::service( + impls = [ + InstanceManager_new_instance, + ] +)] +pub struct InstanceManager { + instances: HashMap, +} + +#[servify::export] +impl InstanceManager { + fn new_instance(&mut self, id: InstanceID) { + let instance = Instance::new(id); + } +} diff --git a/clocking-server/src/main.rs b/clocking-server/src/main.rs index 81969d3..7f780e3 100644 --- a/clocking-server/src/main.rs +++ b/clocking-server/src/main.rs @@ -1,5 +1,7 @@ mod cert; mod err; +mod instance; +mod instance_manager; use cert::{read_cert_file, read_private_key_file}; use clap::Parser;