lobby server broadcast clientlist everyone upon new registration

This commit is contained in:
j4nk 2025-03-17 23:52:31 -04:00
parent 97124b1e64
commit 6274c6b098
2 changed files with 29 additions and 2 deletions

View File

@ -16,6 +16,7 @@ oct_lobby_clientlist = {};
oct_lobby_timers = {}; oct_lobby_timers = {};
oct_lobby_timers["clientlist"] = 1000; -- Every 1000 calls to lobby_client broadcast client list oct_lobby_timers["clientlist"] = 1000; -- Every 1000 calls to lobby_client broadcast client list
server_needs_broadcast_client_list = false
function lobby_server(maxplayers) function lobby_server(maxplayers)
msg,addr,port = oct_recv(); msg,addr,port = oct_recv();
if (msg ~= "") then if (msg ~= "") then
@ -51,9 +52,23 @@ function lobby_server(maxplayers)
OCT_LOG_INFO("Registered new client: " .. req_name .. " @ " .. req_addr .. ":" .. req_port) OCT_LOG_INFO("Registered new client: " .. req_name .. " @ " .. req_addr .. ":" .. req_port)
oct_send(response, req_addr, req_port) oct_send(response, req_addr, req_port)
-- Everytime client is registered, need to broadcast client list
server_needs_broadcast_client_list = true
end end
end end
end end
if (server_needs_broadcast_client_list == true) then
msg = json.encode({
{ msg_type = OCT_LOBBY_MSG_CLIENTLIST,
clientlist = oct_lobby_clientlist,
}
})
for k,v in pairs(oct_lobby_clientlist) do
oct_send(msg, v["addr"], v["port"])
end
server_needs_broadcast_client_list = false
end
end end
client_connected = false; client_connected = false;
@ -88,7 +103,14 @@ function lobby_client(ip, port, name, my_port)
OCT_LOG_ERROR("Server rejected registration request, try using a different name") OCT_LOG_ERROR("Server rejected registration request, try using a different name")
client_connected = 0 client_connected = 0
client_wait_for_reg_response = false client_wait_for_reg_response = false
-- We received a clientlist from the server
elseif (msg_obj["msg_type"] == OCT_LOBBY_MSG_CLIENTLIST) then
oct_lobby_clientlist = msg_obj["clientlist"]
OCT_LOG_DEBUG("My client list: " .. table_to_string(oct_lobby_clientlist))
end end
end end
end end

View File

@ -2,13 +2,18 @@ require("oct_utils")
require("termbox_defs") require("termbox_defs")
require("lobby") require("lobby")
my_ip = ""
my_port = "" my_port = ""
my_name = ""
function oct_init(arg, port) function oct_init(arg, port)
OCT_LOG_INFO("Starting test_lobby_client") OCT_LOG_INFO("Starting test_lobby_client")
my_port = port my_port = port
if (arg == "") then
my_name = "TEST_USER"
else
my_name = arg
end
return OCT_NEEDS_NETWORKING, OCT_NOT_NEEDS_TERMBOX; return OCT_NEEDS_NETWORKING, OCT_NOT_NEEDS_TERMBOX;
@ -17,6 +22,6 @@ end
first = 1 first = 1
function oct_loop(key) function oct_loop(key)
lobby_client("127.0.0.1", "2048", "TEST_LOBBY", my_port) lobby_client("127.0.0.1", "2048", my_name, my_port)
end end