diff --git a/Cargo.lock b/Cargo.lock index 2ce3704..e361622 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,15 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "ahash" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0453232ace82dee0dd0b4c87a59bd90f7b53b314f3e0f61fe2ee7c8a16482289" +dependencies = [ + "const-random", +] + [[package]] name = "android-tzdata" version = "0.1.1" @@ -91,6 +100,26 @@ dependencies = [ "winapi", ] +[[package]] +name = "const-random" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aaf16c9c2c612020bcfd042e170f6e32de9b9d75adb5277cdbbd2e2c8c8299a" +dependencies = [ + "const-random-macro", +] + +[[package]] +name = "const-random-macro" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" +dependencies = [ + "getrandom", + "once_cell", + "tiny-keccak", +] + [[package]] name = "constant_time_eq" version = "0.1.5" @@ -103,6 +132,12 @@ version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + [[package]] name = "fastrand" version = "2.0.1" @@ -118,6 +153,17 @@ dependencies = [ "unicode-width", ] +[[package]] +name = "getrandom" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + [[package]] name = "iana-time-zone" version = "0.1.57" @@ -324,6 +370,15 @@ dependencies = [ "syn", ] +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + [[package]] name = "toml" version = "0.5.11" @@ -345,6 +400,12 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + [[package]] name = "wasm-bindgen" version = "0.2.87" @@ -502,6 +563,7 @@ dependencies = [ name = "xash3d-master" version = "0.1.0" dependencies = [ + "ahash", "bitflags 2.4.0", "blake2b_simd", "chrono", diff --git a/master/Cargo.toml b/master/Cargo.toml index bd5c158..90956db 100644 --- a/master/Cargo.toml +++ b/master/Cargo.toml @@ -19,6 +19,7 @@ fastrand = "2.0.1" serde = { version = "1.0.188", features = ["derive"] } toml = "0.5.11" blake2b_simd = "<0.6" +ahash = "<0.5" signal-hook = { version = "0.3.17", default-features = false } xash3d-protocol = { path = "../protocol", version = "0.1.0" } diff --git a/master/src/master_server.rs b/master/src/master_server.rs index 4231fe9..67a9c36 100644 --- a/master/src/master_server.rs +++ b/master/src/master_server.rs @@ -1,13 +1,13 @@ // SPDX-License-Identifier: GPL-3.0-only // SPDX-FileCopyrightText: 2023 Denis Drakhnia -use std::collections::{HashMap, HashSet}; use std::io; use std::net::{Ipv4Addr, SocketAddr, SocketAddrV4, ToSocketAddrs, UdpSocket}; use std::ops::Deref; use std::sync::atomic::{AtomicBool, Ordering}; use std::time::{Duration, Instant}; +use ahash::{AHashMap as HashMap, AHashSet as HashSet}; use blake2b_simd::Params; use fastrand::Rng; use log::{debug, error, info, trace, warn}; @@ -493,7 +493,8 @@ impl MasterServer { } fn add_server(&mut self, addr: SocketAddrV4, server: ServerInfo) { - match self.servers.insert(addr, Entry::new(self.now(), server)) { + let entry = Entry::new(self.now(), server); + match self.servers.insert(addr, entry) { Some(_) => trace!("{}: Updated GameServer", addr), None => trace!("{}: New GameServer", addr), }