summaryrefslogtreecommitdiff
path: root/matchsrv.lua
diff options
context:
space:
mode:
authorLizzy Fleckenstein <lizzy@vlhl.dev>2026-06-03 02:16:04 +0200
committerLizzy Fleckenstein <lizzy@vlhl.dev>2026-06-03 02:16:04 +0200
commit4a79d7220f753cc9e26a2812da131218b46b6c1c (patch)
treec0631982a2584222299f55d3b2865b0cdc6d957c /matchsrv.lua
parentf08683a3775989e749237cd001a8eaf3193d1684 (diff)
downloadr6p-4a79d7220f753cc9e26a2812da131218b46b6c1c.tar.xz
vendor json library
Diffstat (limited to 'matchsrv.lua')
-rwxr-xr-xmatchsrv.lua54
1 files changed, 30 insertions, 24 deletions
diff --git a/matchsrv.lua b/matchsrv.lua
index 527e924..ac394b5 100755
--- a/matchsrv.lua
+++ b/matchsrv.lua
@@ -1,6 +1,5 @@
#!/usr/bin/env lua5.1
local enet = require("enet")
-local json = require("json")
local common = require("common")
local host = enet.host_create("0.0.0.0:18252")
@@ -9,39 +8,46 @@ local game_to_peer = {}
local peer_to_game = {}
local function remove_game(peer)
- local game = game_to_peer[peer]
+ local game = peer_to_game[peer]
if game then
game_to_peer[game] = nil
peer_to_game[peer] = nil
end
end
+local function handle(peer, pkt)
+ if pkt.type == "match_register" then
+ remove_game(peer)
+ local game_id = common.rand_string(common.gameid_len)
+ peer_to_game[peer] = game_id
+ game_to_peer[game_id] = peer
+ peer:send(common.json_enc({ type = "server_match", game_id = common.base64_enc(game_id) }))
+ print(peer, "registered game")
+ elseif pkt.type == "match_join" then
+ local game_id = type(pkt.game_id) == "string" and common.base64_dec(pkt.game_id)
+ if game_id then
+ local server = game_id and game_to_peer[game_id]
+ if server then
+ server:send(common.json_enc({ type = "server_join", peer_addr = tostring(peer) }))
+ peer:send(common.json_enc({ type = "client_join", peer_addr = tostring(server) }))
+ print(peer, "joined game", server)
+ else
+ peer:send(common.json_enc({ type = "client_join_fail" }))
+ print(peer, "failed to join game")
+ end
+ end
+ else
+ print("invalid pkt type")
+ end
+end
+
while true do
local event = host:service(100)
while event do
if event.type == "receive" then
- local pkt = json.decode(event.data)
- if pkt.type == "match_register" then
- remove_game(event.peer)
- local game_id = common.rand_string(common.gameid_len)
- peer_to_game[event.peer] = game_id
- game_to_peer[game_id] = event.peer
- event.peer:send(json.encode({ type = "server_match", game_id = game_id }))
- print(event.peer, "registered game")
- elseif pkt.type == "match_join" then
- if pkt.game_id and type(pkt.game_id) == "string" then
- local server = game_to_peer[pkt.game_id]
- if server then
- server:send(json.encode({ type = "server_join", peer_addr = tostring(event.peer) }))
- event.peer:send(json.encode({ type = "client_join", peer_addr = tostring(server) }))
- print(event.peer, "joined game", server)
- else
- event.peer:send(json.encode({ type = "client_join_fail" }))
- print(event.peer, "failed to join game")
- end
- end
- else
- print("invalid pkt type")
+ local pkt = common.json_dec(event.data)
+ if pkt then
+ handle(event.peer, pkt)
end
elseif event.type == "connect" then
print(event.peer, "connected")