diff --git a/Cargo.lock b/Cargo.lock index b8c0c57..ea034a8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,5 +1,11 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. +[[package]] +name = "ahash" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8fd72866655d1904d6b0997d0b07ba561047d070fbe29de039031c641b61217" + [[package]] name = "aho-corasick" version = "0.7.13" @@ -33,21 +39,6 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" -[[package]] -name = "bit-set" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e11e16035ea35e4e5997b393eacbf6f63983188f7a2ad25bfb13465f5ad59de" -dependencies = [ - "bit-vec", -] - -[[package]] -name = "bit-vec" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f0dc55f2d8a1a85650ac47858bb001b4c0dd73d79e3c455a842925e68d29cd3" - [[package]] name = "bitflags" version = "1.2.1" @@ -95,9 +86,9 @@ checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" [[package]] name = "cloudabi" -version = "0.1.0" +version = "0.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4344512281c643ae7638bbabc3af17a11307803ec8f0fcad9fae512a8bf36467" +checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" dependencies = [ "bitflags", ] @@ -187,17 +178,6 @@ dependencies = [ "lazy_static", ] -[[package]] -name = "derivative" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb582b60359da160a9477ee80f15c8d784c477e69c217ef2cdd4169c24ea380f" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "digest" version = "0.9.0" @@ -207,27 +187,12 @@ dependencies = [ "generic-array", ] -[[package]] -name = "downcast-rs" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" - [[package]] name = "either" version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" -[[package]] -name = "erased-serde" -version = "0.3.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ca8b296792113e1500fd935ae487be6e00ce318952a6880555554824d6ebf38" -dependencies = [ - "serde 1.0.116", -] - [[package]] name = "fnv" version = "1.0.7" @@ -321,6 +286,16 @@ dependencies = [ "wasi", ] +[[package]] +name = "hashbrown" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96282e96bfcd3da0d3aa9938bedf1e50df3269b6db08b4876d2da0bb1a0841cf" +dependencies = [ + "ahash", + "autocfg", +] + [[package]] name = "hermit-abi" version = "0.1.16" @@ -367,15 +342,6 @@ dependencies = [ "bytes", ] -[[package]] -name = "instant" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63312a18f7ea8760cdd0a7c5aac1a619752a246b833545e3e36d1f81f7cd9e66" -dependencies = [ - "cfg-if", -] - [[package]] name = "iovec" version = "0.1.4" @@ -385,15 +351,6 @@ dependencies = [ "libc", ] -[[package]] -name = "itertools" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b" -dependencies = [ - "either", -] - [[package]] name = "itoa" version = "0.4.6" @@ -416,40 +373,6 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" -[[package]] -name = "legion" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aa40f1a5f64dfdc1830657e0e7dd2c28087c4e32a2a85fcf63a286c429edefc" -dependencies = [ - "bit-set", - "crossbeam-channel", - "derivative", - "downcast-rs", - "erased-serde", - "itertools", - "legion_codegen", - "parking_lot", - "paste", - "rayon", - "serde 1.0.116", - "smallvec", - "thiserror", - "uuid", -] - -[[package]] -name = "legion_codegen" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c24e58060e656eae6b87f83f14f41080656a930fba7ef299122e40eb8ccd307f" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "thiserror", -] - [[package]] name = "lexical-core" version = "0.7.4" @@ -487,9 +410,9 @@ checksum = "8dd5a6d5999d9907cda8ed67bbd137d3af8085216c2ac62de5be860bd41f304a" [[package]] name = "lock_api" -version = "0.4.1" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28247cc5a5be2f05fbcd76dd0cf2c7d3b5400cb978a28042abcd4fa0b3f8261c" +checksum = "c4da24a77a3d8a6d4862d95f72e6fdb9c09a643ecdb402d754004a557f2bec75" dependencies = [ "scopeguard", ] @@ -668,10 +591,10 @@ version = "0.1.0" dependencies = [ "config", "futures-util", - "legion", "log", "serde 1.0.116", "serde_derive", + "shipyard", "tokio", "tokio-tungstenite", "tungstenite", @@ -725,36 +648,28 @@ dependencies = [ [[package]] name = "parking_lot" -version = "0.11.0" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4893845fa2ca272e647da5d0e46660a314ead9c2fdd9a883aabc32e481a8733" +checksum = "d3a704eb390aafdc107b0e392f56a82b668e3a71366993b5340f5833fd62505e" dependencies = [ - "instant", "lock_api", "parking_lot_core", ] [[package]] name = "parking_lot_core" -version = "0.8.0" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c361aa727dd08437f2f1447be8b59a33b0edd15e0fcee698f935613d9efbca9b" +checksum = "d58c7c768d4ba344e3e8d72518ac13e259d7c7ade24167003b8488e10b6740a3" dependencies = [ "cfg-if", "cloudabi", - "instant", "libc", "redox_syscall", "smallvec", "winapi 0.3.9", ] -[[package]] -name = "paste" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0520af26d4cf99643dbbe093a61507922b57232d9978d8491fdc8f7b44573c8c" - [[package]] name = "percent-encoding" version = "2.1.0" @@ -1054,6 +969,19 @@ dependencies = [ "opaque-debug", ] +[[package]] +name = "shipyard" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d3f05dded110259370cf2bb98206cc8489422a43d836ff9270be9213caf0044" +dependencies = [ + "hashbrown", + "num_cpus", + "parking_lot", + "rayon", + "serde 1.0.116", +] + [[package]] name = "signal-hook-registry" version = "1.2.1" @@ -1119,26 +1047,6 @@ dependencies = [ "winapi 0.3.9", ] -[[package]] -name = "thiserror" -version = "1.0.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dfdd070ccd8ccb78f4ad66bf1982dc37f620ef696c6b5028fe2ed83dd3d0d08" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd80fc12f73063ac132ac92aceea36734f04a1d93c1240c6944e23a3b8841793" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "thread_local" version = "1.0.1" @@ -1288,16 +1196,6 @@ version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05e42f7c18b8f902290b009cde6d651262f956c98bc51bca4cd1d511c9cd85c7" -[[package]] -name = "uuid" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fde2f6a4bea1d6e007c4ad38c6839fa71cbb63b6dbf5b595aa38dc9b1093c11" -dependencies = [ - "rand", - "serde 1.0.116", -] - [[package]] name = "vcpkg" version = "0.2.10" diff --git a/Cargo.toml b/Cargo.toml index c45928b..c7e2557 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,7 +6,7 @@ edition = "2018" [dependencies] tungstenite = "0.11" -legion = "0.3" +shipyard = { version = "0.4", features = ["parallel", "serde"] } config = "0.10" serde = { version = "1", features = ["derive"] } serde_derive = "1" diff --git a/src/components/mod.rs b/src/components/mod.rs index 36ccd47..cb02087 100644 --- a/src/components/mod.rs +++ b/src/components/mod.rs @@ -1,2 +1,3 @@ +pub mod network; pub mod transform; pub mod viewport; diff --git a/src/components/network.rs b/src/components/network.rs new file mode 100644 index 0000000..44132c4 --- /dev/null +++ b/src/components/network.rs @@ -0,0 +1,23 @@ +use tokio::net::TcpStream; +use tokio_tungstenite::WebSocketStream; + +#[derive(Debug, PartialEq)] +pub struct Network { + pub stream: NetworkConnection, +} + +#[derive(Debug)] +pub struct NetworkConnection { + conn_id: u64, + stream: WebSocketStream, +} + +impl PartialEq for NetworkConnection { + fn eq(&self, other: &Self) -> bool { + self.conn_id == other.conn_id + } +} + +impl NetworkConnection { + //TODO Recv/Send wrappers +} diff --git a/src/main.rs b/src/main.rs index 7d6d13c..3adc3f4 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,8 +4,8 @@ mod systems; use crate::config::Settings; use futures_util::StreamExt; -use legion::*; use log::info; +use shipyard::World; use std::io::Error; use tokio::net::{TcpListener, TcpStream}; @@ -13,21 +13,34 @@ use tokio::net::{TcpListener, TcpStream}; async fn main() -> Result<(), Error> { let settings = Settings::new().unwrap(); - let mut world = World::default(); - let mut schedule = Schedule::builder().build(); - let mut resources = legion::Resources::default(); + // Create world + let world = World::default(); + + // Create workload + world.add_workload("update").build(); + + tokio::spawn(update_loop(world)); // Create the event loop and TCP listener we'll accept connections on. - let try_socket = TcpListener::bind(&settings.bind).await; + tokio::spawn(listen_websocket(settings.bind)).await.unwrap(); + + Ok(()) +} + +async fn update_loop(world: World) { + loop { + world.run_workload("update"); + } +} + +async fn listen_websocket(bind: String) { + let try_socket = TcpListener::bind(&bind).await; let mut listener = try_socket.expect("Failed to bind"); - info!("Listening on: {}", settings.bind); + info!("Listening on: {}", bind); while let Ok((stream, _)) = listener.accept().await { tokio::spawn(accept_connection(stream)); } - - schedule.execute(&mut world, &mut resources); - Ok(()) } async fn accept_connection(stream: TcpStream) {