initial commit
This commit is contained in:
@@ -0,0 +1,119 @@
|
||||
local ____lualib = require("lualib_bundle")
|
||||
local __TS__Class = ____lualib.__TS__Class
|
||||
local __TS__New = ____lualib.__TS__New
|
||||
local __TS__ArrayIsArray = ____lualib.__TS__ArrayIsArray
|
||||
local __TS__ObjectKeys = ____lualib.__TS__ObjectKeys
|
||||
local ____exports = {}
|
||||
local ____server_config = require("server_config")
|
||||
local SERVER_CONFIG = ____server_config.SERVER_CONFIG
|
||||
local ____api_helper = require("api_helper")
|
||||
local setApiHeaders = ____api_helper.setApiHeaders
|
||||
____exports.LeaderboardServer = __TS__Class()
|
||||
local LeaderboardServer = ____exports.LeaderboardServer
|
||||
LeaderboardServer.name = "LeaderboardServer"
|
||||
LeaderboardServer.____file_path = "scripts/vscripts/leaderboard_server.lua"
|
||||
function LeaderboardServer.prototype.____constructor(self)
|
||||
self.serverUrl = SERVER_CONFIG.API_URL
|
||||
self:setupEventListeners()
|
||||
end
|
||||
function LeaderboardServer.getInstance(self)
|
||||
if not ____exports.LeaderboardServer.instance then
|
||||
____exports.LeaderboardServer.instance = __TS__New(____exports.LeaderboardServer)
|
||||
end
|
||||
return ____exports.LeaderboardServer.instance
|
||||
end
|
||||
function LeaderboardServer.prototype.setupEventListeners(self)
|
||||
CustomGameEventManager:RegisterListener(
|
||||
"request_leaderboard",
|
||||
function(source, event)
|
||||
local playerId = event.PlayerID
|
||||
local limit = event.limit or 20
|
||||
local offset = event.offset or 0
|
||||
local rawBoard = event.board ~= nil and event.board ~= nil and tostring(event.board) or "rating"
|
||||
local board = string.lower(rawBoard)
|
||||
if board ~= "rating" and board ~= "wealth" and board ~= "impossible" then
|
||||
board = "rating"
|
||||
end
|
||||
self:loadLeaderboardFromServer(playerId, limit, offset, board)
|
||||
end
|
||||
)
|
||||
end
|
||||
function LeaderboardServer.prototype.loadLeaderboardFromServer(self, playerId, limit, offset, board)
|
||||
local request = CreateHTTPRequest(
|
||||
"GET",
|
||||
(((((self.serverUrl .. "/leaderboard?limit=") .. tostring(limit)) .. "&offset=") .. tostring(offset)) .. "&board=") .. board
|
||||
)
|
||||
setApiHeaders(nil, request)
|
||||
request:Send(function(result)
|
||||
do
|
||||
local function ____catch(____error)
|
||||
local player = PlayerResource:GetPlayer(playerId)
|
||||
if player then
|
||||
CustomGameEventManager:Send_ServerToPlayer(player, "leaderboard_data", {error = "Ошибка обработки данных"})
|
||||
end
|
||||
end
|
||||
local ____try, ____hasReturned, ____returnValue = pcall(function()
|
||||
local player = PlayerResource:GetPlayer(playerId)
|
||||
if not player then
|
||||
return true
|
||||
end
|
||||
if result.StatusCode == 0 then
|
||||
CustomGameEventManager:Send_ServerToPlayer(player, "leaderboard_data", {error = "Сервер недоступен"})
|
||||
return true
|
||||
end
|
||||
if result.StatusCode >= 200 and result.StatusCode < 300 then
|
||||
do
|
||||
local function ____catch(decodeError)
|
||||
CustomGameEventManager:Send_ServerToPlayer(player, "leaderboard_data", {error = "Ошибка парсинга JSON"})
|
||||
end
|
||||
local ____try, ____hasReturned = pcall(function()
|
||||
local responseData = {json.decode(result.Body)}
|
||||
local data = nil
|
||||
if __TS__ArrayIsArray(responseData) and #responseData > 0 then
|
||||
data = responseData[1]
|
||||
elseif responseData and type(responseData) == "table" then
|
||||
data = responseData
|
||||
end
|
||||
if data then
|
||||
if data.leaderboard ~= nil and data.leaderboard ~= nil then
|
||||
local leaderboard = data.leaderboard
|
||||
local leaderboardLength = 0
|
||||
if __TS__ArrayIsArray(leaderboard) then
|
||||
leaderboardLength = #leaderboard or 0
|
||||
elseif type(leaderboard) == "table" then
|
||||
local keys = __TS__ObjectKeys(leaderboard)
|
||||
leaderboardLength = keys ~= nil and keys ~= nil and #keys or 0
|
||||
end
|
||||
local total = data.total or leaderboardLength
|
||||
CustomGameEventManager:Send_ServerToPlayer(player, "leaderboard_data", {success = true, leaderboard = leaderboard, total = total, board = data.board or board})
|
||||
elseif __TS__ArrayIsArray(data) then
|
||||
CustomGameEventManager:Send_ServerToPlayer(player, "leaderboard_data", {success = true, leaderboard = data, total = #data, board = board})
|
||||
else
|
||||
CustomGameEventManager:Send_ServerToPlayer(player, "leaderboard_data", {error = "Ошибка декодирования данных: leaderboard не найден"})
|
||||
end
|
||||
else
|
||||
CustomGameEventManager:Send_ServerToPlayer(player, "leaderboard_data", {error = "Ошибка декодирования данных: данные пусты"})
|
||||
end
|
||||
end)
|
||||
if not ____try then
|
||||
____catch(____hasReturned)
|
||||
end
|
||||
end
|
||||
else
|
||||
CustomGameEventManager:Send_ServerToPlayer(
|
||||
player,
|
||||
"leaderboard_data",
|
||||
{error = "Ошибка сервера: " .. tostring(result.StatusCode)}
|
||||
)
|
||||
end
|
||||
end)
|
||||
if not ____try then
|
||||
____hasReturned, ____returnValue = ____catch(____hasReturned)
|
||||
end
|
||||
if ____hasReturned then
|
||||
return ____returnValue
|
||||
end
|
||||
end
|
||||
end)
|
||||
end
|
||||
return ____exports
|
||||
Reference in New Issue
Block a user