69 lines
2.3 KiB
Lua
69 lines
2.3 KiB
Lua
---@class Lobby : Object
|
|
---@field lobby fk.Room
|
|
Lobby = class("Lobby")
|
|
|
|
fk.lobby_callback = {}
|
|
local db = fk.ServerInstance:getDatabase()
|
|
|
|
function Lobby:initialize(_lobby)
|
|
self.lobby = _lobby
|
|
self.lobby.callback = function(_self, command, jsonData)
|
|
local cb = fk.lobby_callback[command]
|
|
if (type(cb) == "function") then
|
|
cb(jsonData)
|
|
else
|
|
print("Lobby error: Unknown command " .. command);
|
|
end
|
|
end
|
|
end
|
|
|
|
fk.lobby_callback["UpdateAvatar"] = function(jsonData)
|
|
-- jsonData: [ int uid, string newavatar ]
|
|
local data = json.decode(jsonData)
|
|
local id, avatar = data[1], data[2]
|
|
local sql = "UPDATE userinfo SET avatar='%s' WHERE id=%d;"
|
|
Sql.exec(db, string.format(sql, avatar, id))
|
|
local player = fk.ServerInstance:findPlayer(id)
|
|
player:setAvatar(avatar)
|
|
player:doNotify("UpdateAvatar", avatar)
|
|
end
|
|
|
|
fk.lobby_callback["UpdatePassword"] = function(jsonData)
|
|
-- jsonData: [ int uid, string oldpassword, int newpassword ]
|
|
local data = json.decode(jsonData)
|
|
local id, old, new = data[1], data[2], data[3]
|
|
local sql_find = "SELECT password FROM userinfo WHERE id=%d;"
|
|
local sql_update = "UPDATE userinfo SET password='%s' WHERE id=%d;"
|
|
|
|
local passed = false
|
|
local result = Sql.exec_select(db, string.format(sql_find, id))
|
|
passed = (result["password"][1] == sha256(old))
|
|
if passed then
|
|
Sql.exec(db, string.format(sql_update, sha256(new), id))
|
|
end
|
|
|
|
local player = fk.ServerInstance:findPlayer(tonumber(id))
|
|
player:doNotify("UpdatePassword", passed and "1" or "0")
|
|
end
|
|
|
|
fk.lobby_callback["CreateRoom"] = function(jsonData)
|
|
-- jsonData: [ int uid, string name, int capacity ]
|
|
local data = json.decode(jsonData)
|
|
local owner = fk.ServerInstance:findPlayer(tonumber(data[1]))
|
|
local roomName = data[2]
|
|
local capacity = data[3]
|
|
fk.ServerInstance:createRoom(owner, roomName, capacity)
|
|
end
|
|
|
|
fk.lobby_callback["EnterRoom"] = function(jsonData)
|
|
-- jsonData: [ int uid, int roomId ]
|
|
local data = json.decode(jsonData)
|
|
local player = fk.ServerInstance:findPlayer(tonumber(data[1]))
|
|
local room = fk.ServerInstance:findRoom(tonumber(data[2]))
|
|
room:addPlayer(player)
|
|
end
|
|
|
|
function CreateRoom(_room)
|
|
LobbyInstance = Lobby:new(_room)
|
|
end
|