M Cargo.lock => Cargo.lock +22 -0
@@ 62,7 62,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
name = "client"
version = "0.1.0"
dependencies = [
+ "js-sys",
"wasm-bindgen",
+ "web-sys",
]
[[package]]
@@ 331,6 333,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
[[package]]
+name = "js-sys"
+version = "0.3.61"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
name = "lazy_static"
version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ 531,6 542,7 @@ version = "0.1.0"
dependencies = [
"futures",
"hyper",
+ "lazy_static",
"log",
"protocol",
"rmp-serde",
@@ 896,6 908,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d"
[[package]]
+name = "web-sys"
+version = "0.3.61"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
name = "winapi"
version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
M client/Cargo.toml => client/Cargo.toml +3 -1
@@ 9,4 9,6 @@ edition = "2021"
crate-type = ["cdylib"]
[dependencies]
-wasm-bindgen = "0.2">
\ No newline at end of file
+wasm-bindgen = "0.2"
+js-sys = "0.3"
+web-sys = { version = "0.3", features = ["CanvasRenderingContext2d", "Document", "Element", "HtmlCanvasElement", "Window"]}<
\ No newline at end of file
M client/src/lib.rs => client/src/lib.rs +4 -3
@@ 6,6 6,7 @@ extern {
}
#[wasm_bindgen]
-pub fn greet(name: &str) {
- alert(&format!("Hello, {}!", name))
-}>
\ No newline at end of file
+pub fn send_chat(chat: &str) {
+ println!("sending chat: {}", chat);
+}
+
M server/Cargo.toml => server/Cargo.toml +2 -1
@@ 15,4 15,5 @@ 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" }>
\ No newline at end of file
+protocol = { version = "0.1.0", path = "../protocol" }
+lazy_static = "1.4.0"<
\ No newline at end of file
M server/src/main.rs => server/src/main.rs +14 -9
@@ 6,10 6,11 @@ use hyper::service::{make_service_fn, service_fn};
use tokio_tungstenite::WebSocketStream;
use tungstenite::{handshake, Error};
use futures::stream::StreamExt;
+use lazy_static::lazy_static;
use log::{error, info};
use tokio::sync::RwLock;
use protocol::State;
-use crate::handler::{ClientData, ClientHandler, ClientManager};
+use crate::handler::{ClientHandler, ClientManager};
use crate::wsserver::handle_client;
pub mod wsserver;
@@ 99,14 100,17 @@ async fn handle_request(mut request: Request<Body>, remote_addr: SocketAddr, mgr
}
}
}
-#[tokio::main]
-async fn main() {
- simple_logger::init_with_env().expect("Unable to start logging service");
- info!("Creating client handler");
- let mut mgr: ClientManager = ClientManager {
+lazy_static! {
+ static ref cmgr: ClientManager = ClientManager {
clients: Arc::new(RwLock::new(Default::default())),
+ usernames: Arc::new(RwLock::new(Default::default())),
};
+}
+
+#[tokio::main]
+async fn main() {
+ simple_logger::init_with_env().expect("Unable to start logging service");
let addr = SocketAddr::from(([127, 0, 0, 1], 3000));
@@ 115,10 119,11 @@ async fn main() {
let make_svc = make_service_fn(|conn: &AddrStream| {
let remote_addr = conn.remote_addr();
- let mgr_for_this_thread = mgr.clone();
async move {
- Ok::<_, Infallible>(service_fn(move |request: Request<Body>| {
- handle_request(request, remote_addr, mgr_for_this_thread)
+ Ok::<_, Infallible>(service_fn({
+ move |request: Request<Body>| {
+ handle_request(request, remote_addr, cmgr.clone())
+ }
}))
}
});
M server/src/timer.rs => server/src/timer.rs +1 -1
@@ 9,7 9,7 @@ pub async fn timer_main(mgr: ClientManager) {
loop {
sleep(Duration::from_millis(5)).await;
- for client_thread in mgr.clients.read().await.iter() {
+ for (addr, client_thread) in mgr.clients.read().await.iter() {
match client_thread.tx.send(ClientHandlerMessage::Tick).await {
Ok(_) => (),
Err(e) => {
A web/play.html => web/play.html +31 -0
@@ 0,0 1,31 @@
+<!DOCTYPE html>
+<html lang="en-US">
+<head>
+ <title>StarKingdoms.TK</title>
+ <link rel="stylesheet" href="/static/css/stylemain.css"></link>
+ <link rel="favicon" href="/static/img/favicon.ico"></link>
+ <meta charset="utf-8">
+ <script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
+</head>
+
+ <body>
+ <div class="chatbox">
+ <div id="chats">
+ <p>hello: blsdkjf</p>
+ </div>
+ <input type="text" placeholder="chat text goes here" />
+ <button id="chat-submit">submit</button>
+ </div>
+
+ <script type="module">
+ // If you're getting build errors here | you need to run `just build_client_bundle` first, to compile client code
+ // v
+ import init, { send_chat } from "./dist/client.js";
+ init().then(() => {
+ document.getElementById("chat-submit").addEventListener("click", e => {
+ send_chat(e.target.value);
+ })
+ })
+ </script>
+ </body>
+</html><
\ No newline at end of file
A web/static/css/stylemain.css => web/static/css/stylemain.css +0 -0