diff options
Diffstat (limited to 'matchsrv.lua')
| -rwxr-xr-x | matchsrv.lua | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/matchsrv.lua b/matchsrv.lua new file mode 100755 index 0000000..65dd313 --- /dev/null +++ b/matchsrv.lua @@ -0,0 +1,53 @@ +#!/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") + +local game_to_peer = {} +local peer_to_game = {} + +local function remove_game(peer) + local game = game_to_peer[peer] + if game then + peer_to_game[game] = nil + 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") + end + elseif event.type == "connect" then + print(event.peer, "connected") + elseif event.type == "disconnect" then + remove_game(event.peer) + print(event.peer, "disconnected") + end + event = host:service() + end +end |
