working with new login page, IOS is still a bit weird but it should just be HTML work
This commit is contained in:
@@ -6,8 +6,8 @@ pub type NewUserState {
|
||||
}
|
||||
|
||||
pub type NewUserClientMessages {
|
||||
JoinAsPlayer(token: String, user_id: Int, game_id: String)
|
||||
JoinAsHost(token: String, user_id: Int, game_id: String)
|
||||
JoinAsPlayer(token: String, user_id: Int, game_code: String)
|
||||
JoinAsHost(token: String, user_id: Int, game_code: String)
|
||||
}
|
||||
|
||||
pub fn new_user_client_messages_decoder() -> decode.Decoder(
|
||||
@@ -18,14 +18,14 @@ pub fn new_user_client_messages_decoder() -> decode.Decoder(
|
||||
"JoinAsPlayer" -> {
|
||||
use token <- decode.field("token", decode.string)
|
||||
use user_id <- decode.field("user_id", decode.int)
|
||||
use game_id <- decode.field("game_id", decode.string)
|
||||
decode.success(JoinAsPlayer(token:, user_id:, game_id:))
|
||||
use game_code <- decode.field("game_code", decode.string)
|
||||
decode.success(JoinAsPlayer(token:, user_id:, game_code:))
|
||||
}
|
||||
"JoinAsHost" -> {
|
||||
use token <- decode.field("token", decode.string)
|
||||
use user_id <- decode.field("user_id", decode.int)
|
||||
use game_id <- decode.field("game_id", decode.string)
|
||||
decode.success(JoinAsHost(token:, user_id:, game_id:))
|
||||
use game_code <- decode.field("game_code", decode.string)
|
||||
decode.success(JoinAsHost(token:, user_id:, game_code:))
|
||||
}
|
||||
_ -> decode.failure(JoinAsPlayer("", 0, ""), "NewUserClientMessages")
|
||||
}
|
||||
@@ -39,8 +39,10 @@ pub type NewUserServerMessages {
|
||||
pub fn encode_new_user_server_messages(
|
||||
new_user_server_messages: NewUserServerMessages,
|
||||
) -> json.Json {
|
||||
case new_user_server_messages {
|
||||
RegisterResponse -> json.string("register_response")
|
||||
HostRegisterResponse -> json.string("host_register_response")
|
||||
let msg_type = case new_user_server_messages {
|
||||
RegisterResponse -> json.string("RegisterResponse")
|
||||
HostRegisterResponse -> json.string("HostRegisterResponse")
|
||||
}
|
||||
|
||||
json.object([#("type", msg_type)])
|
||||
}
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import app/clients/host_client
|
||||
import app/clients/new_user_client
|
||||
import app/web
|
||||
import gleam/bit_array
|
||||
@@ -61,6 +62,8 @@ fn server_login(
|
||||
let key = storail.key(ctx.sessions, login_req.game_code)
|
||||
let session = session.Session(login_req.game_code, user_id, dict.new())
|
||||
let assert Ok(Nil) = storail.write(key, session)
|
||||
|
||||
Nil
|
||||
}
|
||||
JoinAsPlayer -> {
|
||||
let key = storail.key(ctx.sessions, login_req.game_code)
|
||||
@@ -80,6 +83,13 @@ fn server_login(
|
||||
)
|
||||
|
||||
let assert Ok(Nil) = storail.write(key, session)
|
||||
web.send_message_to_host(
|
||||
ctx,
|
||||
session.host_user_id,
|
||||
host_client.UpdatePlayerStates(session.players),
|
||||
)
|
||||
|
||||
Nil
|
||||
}
|
||||
}
|
||||
|
||||
@@ -87,22 +97,30 @@ fn server_login(
|
||||
JoinAsHost -> "host"
|
||||
JoinAsPlayer -> "player"
|
||||
}
|
||||
let cookie_attr =
|
||||
cookie.Attributes(..cookie.defaults(req.scheme), http_only: False)
|
||||
|
||||
response.new(200)
|
||||
|> response.set_cookie(
|
||||
"play_of_the_game/token",
|
||||
token,
|
||||
cookie.defaults(req.scheme),
|
||||
)
|
||||
|> response.set_cookie("play_of_the_game/token", token, cookie_attr)
|
||||
|> response.set_cookie(
|
||||
"play_of_the_game/client_type",
|
||||
join_type_name,
|
||||
cookie.defaults(req.scheme),
|
||||
cookie_attr,
|
||||
)
|
||||
|> response.set_cookie(
|
||||
"play_of_the_game/username",
|
||||
login_req.username,
|
||||
cookie.defaults(req.scheme),
|
||||
cookie_attr,
|
||||
)
|
||||
|> response.set_cookie(
|
||||
"play_of_the_game/user_id",
|
||||
int.to_string(user_id),
|
||||
cookie_attr,
|
||||
)
|
||||
|> response.set_cookie(
|
||||
"play_of_the_game/game_code",
|
||||
login_req.game_code,
|
||||
cookie_attr,
|
||||
)
|
||||
|> response.set_body(mist.Bytes(bytes_tree.new()))
|
||||
}
|
||||
|
||||
+22
-21
@@ -78,7 +78,7 @@ fn set_buzz_in(
|
||||
let assert Ok(_) = storail.write(key, session)
|
||||
|
||||
send_message_to_host(
|
||||
socket_state,
|
||||
socket_state.ctx,
|
||||
session.host_user_id,
|
||||
host_client.UpdatePlayerStates(session.players),
|
||||
)
|
||||
@@ -189,19 +189,20 @@ fn handle_new_user(
|
||||
#(
|
||||
SocketState(
|
||||
..socket_state,
|
||||
state: Player(player_client.PlayerState(user_id:, game_id:)),
|
||||
state: Host(host_client.HostState(user_id:, game_id:)),
|
||||
),
|
||||
new_user_client.HostRegisterResponse,
|
||||
)
|
||||
}
|
||||
new_user_client.JoinAsPlayer(token, user_id, game_id) -> {
|
||||
let assert Ok(_) = attach_socket_to_user(socket_state, user_id, token)
|
||||
|
||||
#(
|
||||
SocketState(
|
||||
..socket_state,
|
||||
state: Host(host_client.HostState(user_id:, game_id:)),
|
||||
state: Player(player_client.PlayerState(user_id:, game_id:)),
|
||||
),
|
||||
new_user_client.HostRegisterResponse,
|
||||
new_user_client.RegisterResponse,
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -231,41 +232,41 @@ fn get_player_session_subject(
|
||||
subject
|
||||
}
|
||||
|
||||
fn broadcast_message_to_players(
|
||||
socket_state: SocketState,
|
||||
pub fn broadcast_message_to_players(
|
||||
ctx: Context,
|
||||
session: session.Session,
|
||||
msg: player_client.PlayerServerMessages,
|
||||
) {
|
||||
dict.keys(session.players)
|
||||
|> list.map(get_player_session_from_id(socket_state.ctx, _))
|
||||
|> list.map(get_player_session_subject(socket_state.ctx, _))
|
||||
|> list.map(get_player_session_from_id(ctx, _))
|
||||
|> list.map(get_player_session_subject(ctx, _))
|
||||
|> list.each(fn(subject) {
|
||||
let client_msg = player_client.encode_player_server_messages(msg)
|
||||
actor.send(subject, json.to_string(client_msg))
|
||||
})
|
||||
}
|
||||
|
||||
fn send_message_to_player(
|
||||
socket_state: SocketState,
|
||||
pub fn send_message_to_player(
|
||||
ctx: Context,
|
||||
id: Int,
|
||||
msg: player_client.PlayerServerMessages,
|
||||
) {
|
||||
let client_msg = player_client.encode_player_server_messages(msg)
|
||||
|
||||
get_player_session_from_id(socket_state.ctx, id)
|
||||
|> get_player_session_subject(socket_state.ctx, _)
|
||||
get_player_session_from_id(ctx, id)
|
||||
|> get_player_session_subject(ctx, _)
|
||||
|> actor.send(json.to_string(client_msg))
|
||||
}
|
||||
|
||||
fn send_message_to_host(
|
||||
socket_state: SocketState,
|
||||
pub fn send_message_to_host(
|
||||
ctx: Context,
|
||||
id: Int,
|
||||
msg: host_client.HostServerMessages,
|
||||
) {
|
||||
let client_msg = host_client.encode_host_server_messages(msg)
|
||||
|
||||
get_player_session_from_id(socket_state.ctx, id)
|
||||
|> get_player_session_subject(socket_state.ctx, _)
|
||||
get_player_session_from_id(ctx, id)
|
||||
|> get_player_session_subject(ctx, _)
|
||||
|> actor.send(json.to_string(client_msg))
|
||||
}
|
||||
|
||||
@@ -286,7 +287,7 @@ fn reset_player_buzzer(
|
||||
let assert Ok(_) = storail.write(session_key, session)
|
||||
|
||||
send_message_to_host(
|
||||
socket_state,
|
||||
socket_state.ctx,
|
||||
session.host_user_id,
|
||||
host_client.UpdatePlayerStates(session.players),
|
||||
)
|
||||
@@ -311,7 +312,7 @@ fn handle_host(
|
||||
})
|
||||
|
||||
broadcast_message_to_players(
|
||||
socket_state,
|
||||
socket_state.ctx,
|
||||
session,
|
||||
player_client.ResetBuzzer,
|
||||
)
|
||||
@@ -319,7 +320,7 @@ fn handle_host(
|
||||
}
|
||||
host_client.ResetPlayerBuzzer(id) -> {
|
||||
reset_player_buzzer(socket_state, session_key, id)
|
||||
send_message_to_player(socket_state, id, player_client.ResetBuzzer)
|
||||
send_message_to_player(socket_state.ctx, id, player_client.ResetBuzzer)
|
||||
#(socket_state, host_client.Ack)
|
||||
}
|
||||
host_client.UpdateScore(id, score) -> {
|
||||
@@ -333,13 +334,13 @@ fn handle_host(
|
||||
let assert Ok(_) = storail.write(session_key, session)
|
||||
|
||||
send_message_to_player(
|
||||
socket_state,
|
||||
socket_state.ctx,
|
||||
id,
|
||||
player_client.UpdatePointTotal(player.score),
|
||||
)
|
||||
|
||||
send_message_to_host(
|
||||
socket_state,
|
||||
socket_state.ctx,
|
||||
session.host_user_id,
|
||||
host_client.UpdatePlayerStates(session.players),
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user