M Cargo.lock => Cargo.lock +91 -37
@@ 64,31 64,44 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
[[package]]
-name = "cfg-if"
-version = "1.0.0"
+name = "camino"
+version = "1.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+checksum = "c530edf18f37068ac2d977409ed5cd50d53d73bc653c7647b48eb78976ac9ae2"
+dependencies = [
+ "serde",
+]
[[package]]
-name = "client"
-version = "0.1.0"
+name = "cargo-platform"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cbdb825da8a5df079a43676dbe042702f1707b1109f713a01420fbb4cc71fa27"
dependencies = [
- "console_log",
- "futures",
- "js-sys",
- "lazy_static",
- "log",
- "protocol",
- "rmp-serde",
"serde",
- "url",
- "wasm-bindgen",
- "wasm-bindgen-futures",
- "web-sys",
- "ws_stream_wasm",
]
[[package]]
+name = "cargo_metadata"
+version = "0.15.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eee4243f1f26fc7a42710e7439c149e2b10b05472f88090acce52632f231a73a"
+dependencies = [
+ "camino",
+ "cargo-platform",
+ "semver",
+ "serde",
+ "serde_json",
+ "thiserror",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
name = "colored"
version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ 523,14 536,6 @@ dependencies = [
]
[[package]]
-name = "protocol"
-version = "0.1.0"
-dependencies = [
- "rmp-serde",
- "serde",
-]
-
-[[package]]
name = "quote"
version = "1.0.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ 601,10 606,19 @@ dependencies = [
]
[[package]]
+name = "ryu"
+version = "1.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
+
+[[package]]
name = "semver"
version = "1.0.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed"
+dependencies = [
+ "serde",
+]
[[package]]
name = "send_wrapper"
@@ 633,20 647,14 @@ dependencies = [
]
[[package]]
-name = "server"
-version = "0.1.0"
+name = "serde_json"
+version = "1.0.95"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d721eca97ac802aa7777b701877c8004d950fc142651367300d21c1cc0194744"
dependencies = [
- "futures",
- "hyper",
- "lazy_static",
- "log",
- "protocol",
- "rmp-serde",
+ "itoa",
+ "ryu",
"serde",
- "simple_logger",
- "tokio",
- "tokio-tungstenite",
- "tungstenite",
]
[[package]]
@@ 693,6 701,52 @@ dependencies = [
]
[[package]]
+name = "starkingdoms-client"
+version = "0.1.0"
+dependencies = [
+ "console_log",
+ "futures",
+ "js-sys",
+ "lazy_static",
+ "log",
+ "rmp-serde",
+ "serde",
+ "starkingdoms-protocol",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "ws_stream_wasm",
+]
+
+[[package]]
+name = "starkingdoms-protocol"
+version = "0.1.0"
+dependencies = [
+ "rmp-serde",
+ "serde",
+]
+
+[[package]]
+name = "starkingdoms-server"
+version = "0.0.1"
+dependencies = [
+ "cargo_metadata",
+ "futures",
+ "hyper",
+ "lazy_static",
+ "log",
+ "rmp-serde",
+ "serde",
+ "serde_json",
+ "simple_logger",
+ "starkingdoms-protocol",
+ "tokio",
+ "tokio-tungstenite",
+ "tungstenite",
+]
+
+[[package]]
name = "syn"
version = "1.0.109"
source = "registry+https://github.com/rust-lang/crates.io-index"
M client/Cargo.toml => client/Cargo.toml +2 -2
@@ 1,5 1,5 @@
[package]
-name = "client"
+name = "starkingdoms-client"
version = "0.1.0"
edition = "2021"
@@ 17,7 17,7 @@ log = "0.4"
futures = { version = "0.3", default-features = false }
wasm-bindgen-futures = "0.4"
url = "2.3"
-protocol = { version = "0.1.0", path = "../protocol" }
+starkingdoms-protocol = { version = "0.1.0", path = "../protocol" }
rmp-serde = "1.1"
ws_stream_wasm = "0.7"
serde = { version = "1", features = ["derive"] }
M client/src/chat.rs => client/src/chat.rs +1 -1
@@ 1,5 1,5 @@
use wasm_bindgen::prelude::*;
-use protocol::MessageC2S;
+use starkingdoms_protocol::MessageC2S;
use crate::CLIENT;
use futures::SinkExt;
M client/src/lib.rs => client/src/lib.rs +4 -4
@@ 4,10 4,10 @@ use futures::StreamExt;
use log::{debug, error, info, Level, trace, warn};
use wasm_bindgen::prelude::*;
use ws_stream_wasm::{WsMessage, WsMeta, WsStream};
-use protocol::State;
-use protocol::PROTOCOL_VERSION;
-use protocol::MessageS2C;
-use protocol::MessageC2S;
+use starkingdoms_protocol::State;
+use starkingdoms_protocol::PROTOCOL_VERSION;
+use starkingdoms_protocol::MessageS2C;
+use starkingdoms_protocol::MessageC2S;
use futures::SinkExt;
use lazy_static::lazy_static;
use std::sync::Arc;
M protocol/Cargo.toml => protocol/Cargo.toml +1 -1
@@ 1,5 1,5 @@
[package]
-name = "protocol"
+name = "starkingdoms-protocol"
version = "0.1.0"
edition = "2021"
M server/Cargo.toml => server/Cargo.toml +12 -4
@@ 1,19 1,27 @@
[package]
-name = "server"
-version = "0.1.0"
+name = "starkingdoms-server"
+version = "0.0.1"
edition = "2021"
+[metadata]
+version-name = "Super Duper Ultra Alpha"
+slp-description = "A StarKingdoms.TK server"
+
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
tokio = { version = "1.27", features = ["macros", "sync", "rt-multi-thread"] }
serde = { version = "1", features = ["derive"] }
rmp-serde = { version = "1" }
+serde_json = "1"
futures = { version = "0.3", default-features = false }
hyper = { version = "0.14", features = ["server", "http1", "http2", "tcp"] }
tungstenite = { version = "0.18", default-features = false }
tokio-tungstenite = { version = "0.18" }
log = "0.4"
simple_logger = "4.1"
-protocol = { version = "0.1.0", path = "../protocol" }
-lazy_static = "1.4.0">
\ No newline at end of file
+starkingdoms-protocol = { version = "0.1.0", path = "../protocol" }
+lazy_static = "1.4.0"
+
+[build-dependencies]
+cargo_metadata = "0.15"<
\ No newline at end of file
A server/build.rs => server/build.rs +22 -0
@@ 0,0 1,22 @@
+use cargo_metadata::MetadataCommand;
+
+fn main() {
+ let path = std::env::var("CARGO_MANIFEST_DIR").unwrap();
+
+ let meta = MetadataCommand::new()
+ .manifest_path("./Cargo.toml")
+ .current_dir(&path)
+ .exec()
+ .unwrap();
+
+ let root = meta.root_package().unwrap();
+
+ let version = root.version.to_string();
+ let version_name = root.metadata["version-name"].to_string();
+ let description = root.metadata["slp-description"].to_string();
+
+ println!("cargo:rustc-env=STK_VERSION={}", version);
+ println!("cargo:rustc-env=STK_VERSION_NAME={}", version_name);
+ println!("cargo:rustc-env=STK_SLP_DESCRIPTION={}", description);
+ println!("cargo:rerun-if-changed:Cargo.toml");
+}<
\ No newline at end of file
M server/src/client_handler.rs => server/src/client_handler.rs +1 -1
@@ 7,7 7,7 @@ use log::{error, info};
use tokio::sync::mpsc::Receiver;
use tokio_tungstenite::WebSocketStream;
use tungstenite::Message;
-use protocol::{GoodbyeReason, MessageC2S, MessageS2C, PROTOCOL_VERSION, ps2c, State};
+use starkingdoms_protocol::{GoodbyeReason, MessageC2S, MessageS2C, PROTOCOL_VERSION, ps2c, State};
use crate::handler::{ClientHandlerMessage, ClientManager};
use crate::{send, recv};
M server/src/handler.rs => server/src/handler.rs +1 -1
@@ 6,7 6,7 @@ use serde::Serialize;
use tokio::sync::mpsc::Sender;
use tokio::sync::RwLock;
use tungstenite::Message;
-use protocol::State;
+use starkingdoms_protocol::State;
#[derive(Clone)]
pub struct ClientManager {
M server/src/main.rs => server/src/main.rs +30 -1
@@ 8,8 8,10 @@ use tungstenite::{Error, handshake};
use futures::stream::StreamExt;
use lazy_static::lazy_static;
use log::{error, info, Level};
+use serde::{Deserialize, Serialize};
use tokio::sync::RwLock;
-use protocol::State;
+use protocol::{PROTOCOL_VERSION, State};
+use starkingdoms_protocol::PROTOCOL_VERSION;
use crate::handler::{ClientHandler, ClientManager};
use crate::client_handler::handle_client;
use crate::timer::timer_main;
@@ 96,6 98,19 @@ async fn handle_request(mut request: Request<Body>, remote_addr: SocketAddr, mgr
("/ws", false) => {
Ok(Response::builder().status(400).body(Body::from("Connection-Upgrade header missing")).unwrap())
},
+ ("/ping", false) => {
+ Ok(Response::builder().status(200).body(Body::from(
+ serde_json::to_string(&ServerPingResponse {
+ version: ServerPingResponseVersion {
+ name: env!("STK_VERSION_NAME").to_string(), // Set by build.rs
+ number: env!("STK_VERSION").to_string(), // Set by build.rs
+ protocol: PROTOCOL_VERSION,
+ },
+ players: cmgr.usernames.read().await.len() as u32,
+ description: env!("STK_SLP_DESCRIPTION").to_string(),
+ }).unwrap()
+ )).unwrap())
+ },
(url@_, false) => {
// typical HTTP file request
// TODO
@@ 146,3 161,17 @@ async fn main() {
error!("error in server thread: {}", e);
}
}
+
+#[derive(Serialize, Deserialize)]
+pub struct ServerPingResponse {
+ pub version: ServerPingResponseVersion,
+ pub players: u32,
+ pub description: String
+}
+
+#[derive(Serialize, Deserialize)]
+pub struct ServerPingResponseVersion {
+ pub name: String,
+ pub number: String,
+ pub protocol: u32
+}<
\ No newline at end of file