demo code, needs some work to be more stable

This commit is contained in:
2025-05-27 18:43:02 -06:00
parent 88ce6db3aa
commit ef4602a062
7 changed files with 46 additions and 28 deletions
+1
View File
@@ -26,6 +26,7 @@ gleam_http = ">= 4.0.0 and < 5.0.0"
gleam_otp = ">= 0.16.1 and < 1.0.0"
gleam_crypto = ">= 1.5.0 and < 2.0.0"
gleam_json = ">= 2.3.0 and < 3.0.0"
gleescript = ">= 1.4.0 and < 2.0.0"
[dev-dependencies]
gleeunit = ">= 1.0.0 and < 2.0.0"
+2
View File
@@ -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_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 = "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 = "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" },
@@ -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_otp = { version = ">= 0.16.1 and < 1.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" }
glint = { version = ">= 1.2.1 and < 2.0.0" }
mist = { version = ">= 4.0.7 and < 5.0.0" }
+32 -12
View File
@@ -11,7 +11,7 @@ import gleam/int
import gleam/io
import gleam/json
import gleam/list
import gleam/option.{None, Some}
import gleam/option.{type Option, None, Some}
import gleam/otp/actor
import player
import player_session
@@ -225,11 +225,16 @@ fn get_player_session_from_id(
fn get_player_session_subject(
ctx: Context,
player: player_session.PlayerSession,
) -> process.Subject(String) {
let assert Some(id) = player.socket_id
let assert Ok(subject) =
socket_manager.get_socket_subj_by_id(ctx.socket_manager, id)
subject
) -> Option(process.Subject(String)) {
case player.socket_id {
None -> None
Some(id) -> {
let assert Ok(subject) =
socket_manager.get_socket_subj_by_id(ctx.socket_manager, id)
Some(subject)
}
}
}
pub fn broadcast_message_to_players(
@@ -240,6 +245,7 @@ pub fn broadcast_message_to_players(
dict.keys(session.players)
|> list.map(get_player_session_from_id(ctx, _))
|> list.map(get_player_session_subject(ctx, _))
|> list.filter_map(fn(subject) { option.to_result(subject, "Missing") })
|> list.each(fn(subject) {
let client_msg = player_client.encode_player_server_messages(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)
get_player_session_from_id(ctx, id)
|> get_player_session_subject(ctx, _)
|> actor.send(json.to_string(client_msg))
let subject =
get_player_session_from_id(ctx, id)
|> get_player_session_subject(ctx, _)
case subject {
None -> Nil
Some(subject) -> {
actor.send(subject, json.to_string(client_msg))
}
}
}
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)
get_player_session_from_id(ctx, id)
|> get_player_session_subject(ctx, _)
|> actor.send(json.to_string(client_msg))
let subject =
get_player_session_from_id(ctx, id)
|> get_player_session_subject(ctx, _)
case subject {
None -> Nil
Some(subject) -> {
actor.send(subject, json.to_string(client_msg))
}
}
}
fn reset_player_buzzer(