demo code, needs some work to be more stable
This commit is contained in:
parent
88ce6db3aa
commit
ef4602a062
@ -26,6 +26,7 @@ gleam_http = ">= 4.0.0 and < 5.0.0"
|
|||||||
gleam_otp = ">= 0.16.1 and < 1.0.0"
|
gleam_otp = ">= 0.16.1 and < 1.0.0"
|
||||||
gleam_crypto = ">= 1.5.0 and < 2.0.0"
|
gleam_crypto = ">= 1.5.0 and < 2.0.0"
|
||||||
gleam_json = ">= 2.3.0 and < 3.0.0"
|
gleam_json = ">= 2.3.0 and < 3.0.0"
|
||||||
|
gleescript = ">= 1.4.0 and < 2.0.0"
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
gleeunit = ">= 1.0.0 and < 2.0.0"
|
gleeunit = ">= 1.0.0 and < 2.0.0"
|
||||||
|
@ -16,6 +16,7 @@ packages = [
|
|||||||
{ name = "gleam_regexp", version = "1.1.1", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleam_regexp", source = "hex", outer_checksum = "9C215C6CA84A5B35BB934A9B61A9A306EC743153BE2B0425A0D032E477B062A9" },
|
{ name = "gleam_regexp", version = "1.1.1", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleam_regexp", source = "hex", outer_checksum = "9C215C6CA84A5B35BB934A9B61A9A306EC743153BE2B0425A0D032E477B062A9" },
|
||||||
{ name = "gleam_stdlib", version = "0.59.0", build_tools = ["gleam"], requirements = [], otp_app = "gleam_stdlib", source = "hex", outer_checksum = "F8FEE9B35797301994B81AF75508CF87C328FE1585558B0FFD188DC2B32EAA95" },
|
{ name = "gleam_stdlib", version = "0.59.0", build_tools = ["gleam"], requirements = [], otp_app = "gleam_stdlib", source = "hex", outer_checksum = "F8FEE9B35797301994B81AF75508CF87C328FE1585558B0FFD188DC2B32EAA95" },
|
||||||
{ name = "gleam_yielder", version = "1.1.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleam_yielder", source = "hex", outer_checksum = "8E4E4ECFA7982859F430C57F549200C7749823C106759F4A19A78AEA6687717A" },
|
{ name = "gleam_yielder", version = "1.1.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleam_yielder", source = "hex", outer_checksum = "8E4E4ECFA7982859F430C57F549200C7749823C106759F4A19A78AEA6687717A" },
|
||||||
|
{ name = "gleescript", version = "1.4.0", build_tools = ["gleam"], requirements = ["argv", "filepath", "gleam_erlang", "gleam_stdlib", "simplifile", "snag", "tom"], otp_app = "gleescript", source = "hex", outer_checksum = "8CDDD29F91064E69950A91A40061785F10275ADB70A0520075591F61A724C455" },
|
||||||
{ name = "gleeunit", version = "1.3.1", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleeunit", source = "hex", outer_checksum = "A7DD6C07B7DA49A6E28796058AA89E651D233B357D5607006D70619CD89DAAAB" },
|
{ name = "gleeunit", version = "1.3.1", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleeunit", source = "hex", outer_checksum = "A7DD6C07B7DA49A6E28796058AA89E651D233B357D5607006D70619CD89DAAAB" },
|
||||||
{ name = "glint", version = "1.2.1", build_tools = ["gleam"], requirements = ["gleam_community_ansi", "gleam_community_colour", "gleam_stdlib", "snag"], otp_app = "glint", source = "hex", outer_checksum = "2214C7CEFDE457CEE62140C3D4899B964E05236DA74E4243DFADF4AF29C382BB" },
|
{ name = "glint", version = "1.2.1", build_tools = ["gleam"], requirements = ["gleam_community_ansi", "gleam_community_colour", "gleam_stdlib", "snag"], otp_app = "glint", source = "hex", outer_checksum = "2214C7CEFDE457CEE62140C3D4899B964E05236DA74E4243DFADF4AF29C382BB" },
|
||||||
{ name = "glisten", version = "7.0.1", build_tools = ["gleam"], requirements = ["gleam_erlang", "gleam_otp", "gleam_stdlib", "logging", "telemetry"], otp_app = "glisten", source = "hex", outer_checksum = "1A53CF9FB3231A93FF7F1BD519A43DC968C1722F126CDD278403A78725FC5189" },
|
{ name = "glisten", version = "7.0.1", build_tools = ["gleam"], requirements = ["gleam_erlang", "gleam_otp", "gleam_stdlib", "logging", "telemetry"], otp_app = "glisten", source = "hex", outer_checksum = "1A53CF9FB3231A93FF7F1BD519A43DC968C1722F126CDD278403A78725FC5189" },
|
||||||
@ -40,6 +41,7 @@ gleam_http = { version = ">= 4.0.0 and < 5.0.0" }
|
|||||||
gleam_json = { version = ">= 2.3.0 and < 3.0.0" }
|
gleam_json = { version = ">= 2.3.0 and < 3.0.0" }
|
||||||
gleam_otp = { version = ">= 0.16.1 and < 1.0.0" }
|
gleam_otp = { version = ">= 0.16.1 and < 1.0.0" }
|
||||||
gleam_stdlib = { version = ">= 0.44.0 and < 2.0.0" }
|
gleam_stdlib = { version = ">= 0.44.0 and < 2.0.0" }
|
||||||
|
gleescript = { version = ">= 1.4.0 and < 2.0.0" }
|
||||||
gleeunit = { version = ">= 1.0.0 and < 2.0.0" }
|
gleeunit = { version = ">= 1.0.0 and < 2.0.0" }
|
||||||
glint = { version = ">= 1.2.1 and < 2.0.0" }
|
glint = { version = ">= 1.2.1 and < 2.0.0" }
|
||||||
mist = { version = ">= 4.0.7 and < 5.0.0" }
|
mist = { version = ">= 4.0.7 and < 5.0.0" }
|
||||||
|
@ -11,7 +11,7 @@ import gleam/int
|
|||||||
import gleam/io
|
import gleam/io
|
||||||
import gleam/json
|
import gleam/json
|
||||||
import gleam/list
|
import gleam/list
|
||||||
import gleam/option.{None, Some}
|
import gleam/option.{type Option, None, Some}
|
||||||
import gleam/otp/actor
|
import gleam/otp/actor
|
||||||
import player
|
import player
|
||||||
import player_session
|
import player_session
|
||||||
@ -225,11 +225,16 @@ fn get_player_session_from_id(
|
|||||||
fn get_player_session_subject(
|
fn get_player_session_subject(
|
||||||
ctx: Context,
|
ctx: Context,
|
||||||
player: player_session.PlayerSession,
|
player: player_session.PlayerSession,
|
||||||
) -> process.Subject(String) {
|
) -> Option(process.Subject(String)) {
|
||||||
let assert Some(id) = player.socket_id
|
case player.socket_id {
|
||||||
|
None -> None
|
||||||
|
Some(id) -> {
|
||||||
let assert Ok(subject) =
|
let assert Ok(subject) =
|
||||||
socket_manager.get_socket_subj_by_id(ctx.socket_manager, id)
|
socket_manager.get_socket_subj_by_id(ctx.socket_manager, id)
|
||||||
subject
|
|
||||||
|
Some(subject)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn broadcast_message_to_players(
|
pub fn broadcast_message_to_players(
|
||||||
@ -240,6 +245,7 @@ pub fn broadcast_message_to_players(
|
|||||||
dict.keys(session.players)
|
dict.keys(session.players)
|
||||||
|> list.map(get_player_session_from_id(ctx, _))
|
|> list.map(get_player_session_from_id(ctx, _))
|
||||||
|> list.map(get_player_session_subject(ctx, _))
|
|> list.map(get_player_session_subject(ctx, _))
|
||||||
|
|> list.filter_map(fn(subject) { option.to_result(subject, "Missing") })
|
||||||
|> list.each(fn(subject) {
|
|> list.each(fn(subject) {
|
||||||
let client_msg = player_client.encode_player_server_messages(msg)
|
let client_msg = player_client.encode_player_server_messages(msg)
|
||||||
actor.send(subject, json.to_string(client_msg))
|
actor.send(subject, json.to_string(client_msg))
|
||||||
@ -253,9 +259,16 @@ pub fn send_message_to_player(
|
|||||||
) {
|
) {
|
||||||
let client_msg = player_client.encode_player_server_messages(msg)
|
let client_msg = player_client.encode_player_server_messages(msg)
|
||||||
|
|
||||||
|
let subject =
|
||||||
get_player_session_from_id(ctx, id)
|
get_player_session_from_id(ctx, id)
|
||||||
|> get_player_session_subject(ctx, _)
|
|> get_player_session_subject(ctx, _)
|
||||||
|> actor.send(json.to_string(client_msg))
|
|
||||||
|
case subject {
|
||||||
|
None -> Nil
|
||||||
|
Some(subject) -> {
|
||||||
|
actor.send(subject, json.to_string(client_msg))
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn send_message_to_host(
|
pub fn send_message_to_host(
|
||||||
@ -265,9 +278,16 @@ pub fn send_message_to_host(
|
|||||||
) {
|
) {
|
||||||
let client_msg = host_client.encode_host_server_messages(msg)
|
let client_msg = host_client.encode_host_server_messages(msg)
|
||||||
|
|
||||||
|
let subject =
|
||||||
get_player_session_from_id(ctx, id)
|
get_player_session_from_id(ctx, id)
|
||||||
|> get_player_session_subject(ctx, _)
|
|> get_player_session_subject(ctx, _)
|
||||||
|> actor.send(json.to_string(client_msg))
|
|
||||||
|
case subject {
|
||||||
|
None -> Nil
|
||||||
|
Some(subject) -> {
|
||||||
|
actor.send(subject, json.to_string(client_msg))
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn reset_player_buzzer(
|
fn reset_player_buzzer(
|
||||||
|
@ -36,7 +36,7 @@
|
|||||||
var xhr = new XMLHttpRequest();
|
var xhr = new XMLHttpRequest();
|
||||||
xhr.open("POST", "./login/" + join_type);
|
xhr.open("POST", "./login/" + join_type);
|
||||||
xhr.onload = function (event) {
|
xhr.onload = function (event) {
|
||||||
console.log("Starting game...", event.target);
|
console.log("Starting game...", event);
|
||||||
document.getElementById("run-container").remove();
|
document.getElementById("run-container").remove();
|
||||||
document
|
document
|
||||||
.getElementById("glcanvas")
|
.getElementById("glcanvas")
|
||||||
@ -46,7 +46,7 @@
|
|||||||
};
|
};
|
||||||
// or onerror, onabort
|
// or onerror, onabort
|
||||||
var formData = new FormData(document.getElementById("login"));
|
var formData = new FormData(document.getElementById("login"));
|
||||||
xhr.send(JSON.stringify(Object.fromEntries(formData));
|
xhr.send(JSON.stringify(Object.fromEntries(formData)));
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
<div
|
<div
|
||||||
@ -62,8 +62,8 @@
|
|||||||
<form id="login">
|
<form id="login">
|
||||||
<label for="username">Username:</label><br />
|
<label for="username">Username:</label><br />
|
||||||
<input type="text" id="username" name="username" /><br />
|
<input type="text" id="username" name="username" /><br />
|
||||||
<label for="gamecode">Gamecode:</label><br />
|
<label for="game_code">Gamecode:</label><br />
|
||||||
<input type="text" id="gamecode" name="gamecode" /><br />
|
<input type="text" id="game_code" name="game_code" /><br />
|
||||||
</form>
|
</form>
|
||||||
<button onclick="run('join')">Join Game</button>
|
<button onclick="run('join')">Join Game</button>
|
||||||
<button onclick="run('host')">Host Game</button>
|
<button onclick="run('host')">Host Game</button>
|
||||||
|
@ -16,6 +16,7 @@ pub struct Context {
|
|||||||
|
|
||||||
impl Context {
|
impl Context {
|
||||||
pub fn new(url: &str, cfg: Cfg) -> Context {
|
pub fn new(url: &str, cfg: Cfg) -> Context {
|
||||||
|
info!("Connecting to web socket server @ {}", url);
|
||||||
let (sender, reciever) = ewebsock::connect(url, ewebsock::Options::default()).unwrap();
|
let (sender, reciever) = ewebsock::connect(url, ewebsock::Options::default()).unwrap();
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
@ -42,11 +43,7 @@ impl Context {
|
|||||||
None
|
None
|
||||||
}
|
}
|
||||||
WsEvent::Message(ws_message) => match ws_message {
|
WsEvent::Message(ws_message) => match ws_message {
|
||||||
ewebsock::WsMessage::Text(msg) => {
|
ewebsock::WsMessage::Text(msg) => serde_json::from_str(&msg).ok(),
|
||||||
let game_resp: T = serde_json::from_str(&msg).unwrap();
|
|
||||||
|
|
||||||
Some(game_resp)
|
|
||||||
}
|
|
||||||
_ => None,
|
_ => None,
|
||||||
},
|
},
|
||||||
WsEvent::Error(err) => {
|
WsEvent::Error(err) => {
|
||||||
|
@ -29,7 +29,7 @@ pub enum NewUserServerMessages {
|
|||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
pub struct LoginScreen {
|
pub struct LoginScreen {
|
||||||
sent_join: bool,
|
sent_join: bool,
|
||||||
retry_count: usize,
|
retry_time: f64,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Screen for LoginScreen {
|
impl Screen for LoginScreen {
|
||||||
@ -60,6 +60,7 @@ impl Screen for LoginScreen {
|
|||||||
|
|
||||||
info!("Sending join request...");
|
info!("Sending join request...");
|
||||||
ctx.send_msg(&msg);
|
ctx.send_msg(&msg);
|
||||||
|
self.retry_time = get_time() + 2.0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -78,11 +79,8 @@ impl Screen for LoginScreen {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
self.retry_count += 1;
|
if get_time() > self.retry_time {
|
||||||
|
|
||||||
if self.retry_count > (get_fps() as usize * 100) {
|
|
||||||
warn!("Join failed, try again...");
|
warn!("Join failed, try again...");
|
||||||
self.retry_count = 0;
|
|
||||||
self.sent_join = false;
|
self.sent_join = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -112,7 +112,7 @@ fn get_ws_url() -> String {
|
|||||||
"ws"
|
"ws"
|
||||||
};
|
};
|
||||||
|
|
||||||
format!("{}://{}/ws", protocol, location.host().unwrap())
|
format!("wss://{}/ws", location.host().unwrap())
|
||||||
}
|
}
|
||||||
|
|
||||||
mod modname {}
|
mod modname {}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user