41 lines
1.4 KiB
Lua
41 lines
1.4 KiB
Lua
local utils = require("shared.utils")
|
|
|
|
local constants = require("server.constants")
|
|
local format = require("shared.networkFormat")
|
|
local rpc = require("server.rpc")
|
|
|
|
local clientCount = 0
|
|
|
|
local function remoteCallTo(ip, port, name, ...)
|
|
local request = "PPY\x03" .. format.encodeFunction(name, 0, ...)
|
|
server:sendto(request, ip, port)
|
|
print("send request to " .. ip .. " " .. port .. "[" .. request .. "]")
|
|
end
|
|
|
|
return function(commands)
|
|
function commands.init(ip, port, nickname, avatar)
|
|
clientCount = clientCount +1
|
|
participants[clientCount] = { ip = ip, port = port, name = nickname, avatar = avatar }
|
|
|
|
print("New client connected. Granting id: [" .. clientCount .. "] IP: " .. ip .. " Port:" .. port)
|
|
for i, client in pairs(participants) do
|
|
if i ~= clientCount then
|
|
-- to Existing client
|
|
remoteCallTo(client.ip, client.port, "playerJoin", clientCount, nickname, avatar)
|
|
-- to New client
|
|
remoteCallTo(ip, port, "playerJoin", i, client.name, client.avatar)
|
|
end
|
|
end
|
|
WORLD_LOCK = true
|
|
-- The world is now locked
|
|
-- Client response
|
|
remoteCallTo(ip, port, "init", clientCount, nickname, avatar, constants.world.id,
|
|
constants.world.x, constants.world.y)
|
|
-- Send World
|
|
local fg = love.data.compress("string", "lz4", levelloop.Canvas.fg:newImageData())
|
|
local bg = love.data.compress("string", "lz4", levelloop.Canvas.bg:newImageData())
|
|
--network.prepareChunk(fg
|
|
WORLD_LOCK = false
|
|
end
|
|
end
|