diff options
Diffstat (limited to 'server.lua')
| -rw-r--r-- | server.lua | 34 |
1 files changed, 18 insertions, 16 deletions
@@ -1,7 +1,5 @@ local enet = require("enet") -local json = require("json") local socket = require("socket") -local base64 = require("base64") local common = require("common") local server = {} @@ -21,7 +19,8 @@ end local function handle_match(srv, pkt) if pkt.type == "server_match" then - if type(pkt.game_id) ~= "string" then + local game_id = type(pkt.game_id) == "string" and common.base64_dec(pkt.game_id) + if not game_id then print("[server] server_match: invalid game_id") return end @@ -31,8 +30,8 @@ local function handle_match(srv, pkt) return end - srv.game_id = pkt.game_id - srv.invite = base64.encode(srv.game_id .. srv.secret) + srv.game_id = game_id + srv.invite = common.base64_enc(srv.game_id .. srv.secret) elseif pkt.type == "server_join" then if type(pkt.peer_addr) ~= "string" then print("[server] server_join: invalid peer_addr") @@ -44,7 +43,8 @@ end local function handle_client(srv, peer, pkt) if pkt.type == "server_hi" then - if type(pkt.secret) ~= "string" then + local secret = type(pkt.secret) == "string" and common.base64_dec(pkt.secret) + if not secret then print("[server] server_hi: invalid secret") return end @@ -54,14 +54,14 @@ local function handle_client(srv, peer, pkt) return end - if pkt.secret == srv.secret then + if secret == srv.secret then print("[server] auth success " .. tostring(peer)) srv.clients[peer] = { peer = peer } - peer:send(json.encode({ type = "client_hi" })) + peer:send(common.json_enc({ type = "client_hi" })) else print("[server] auth failure " .. tostring(peer)) - peer:send(json.encode({ type = "client_reject" })) - peer:disconnect() + peer:send(common.json_enc({ type = "client_reject" })) + peer:disconnect_later() end end end @@ -70,15 +70,17 @@ function server.update(srv) local event = srv.host:service(20) while event do if event.type == "receive" then - local pkt = json.decode(event.data) - if event.peer == srv.match then - handle_match(srv, pkt) - else - handle_client(srv, event.peer, pkt) + local pkt = common.json_dec(event.data) + if pkt then + if event.peer == srv.match then + handle_match(srv, pkt) + else + handle_client(srv, event.peer, pkt) + end end elseif event.type == "connect" then if event.peer == srv.match then - srv.match:send(json.encode({ type = "match_register" })) + srv.match:send(common.json_enc({ type = "match_register" })) end print("[server] connect " .. tostring(event.peer)) elseif event.type == "disconnect" then |
