multiserver_api/rpc.lua

74 lines
2.0 KiB
Lua
Raw Permalink Normal View History

2021-01-23 08:49:04 -08:00
local ch = minetest.mod_channel_join("multiserver")
local rq = 0
local cb = {}
multiserver.do_rpc = function(msg, cbf)
local data = multiserver.tohex(rq) .. " " .. msg
rq = rq + 1
ch:send_all(data)
cb[rq] = cbf
end
minetest.register_on_modchannel_message(function(channel_name, sender, msg)
2021-03-02 07:51:10 -08:00
if channel_name ~= "multiserver" then return end
2021-01-23 08:49:04 -08:00
local rrq = multiserver.fromhex(msg:split(" ")[1])
local cmd = msg:split(" ")[2]
local p
if cmd == "->DEFSRV" then
p = msg:split(" ")[3]
elseif cmd == "->PEERCNT" then
p = tonumber(msg:split(" ")[3])
elseif cmd == "->ISONLINE" then
p = multiserver.tobool(msg:split(" ")[3])
elseif cmd == "->HASPRIVS" then
p = multiserver.tobool(msg:split(" ")[3])
2021-02-28 07:33:39 -08:00
elseif cmd == "->PRIVS" then
p = minetest.string_to_privs(msg:split(" ")[3] or "")
2021-01-23 08:49:04 -08:00
elseif cmd == "->SRV" then
p = msg:split(" ")[3]
elseif cmd == "->ADDR" then
p = msg:split(" ")[3]
2021-02-28 10:28:09 -08:00
elseif cmd == "->ISBANNED" then
p = multiserver.tobool(msg:split(" ")[3])
elseif cmd == "->SRVS" then
p = {}
local t = minetest.string_to_privs(msg:split(" ")[3] or "")
for k in pairs(t) do
table.insert(p, k)
end
2021-01-24 07:01:01 -08:00
elseif cmd == "->JOIN" then
local name = msg:split(" ")[3]
2021-03-17 09:19:43 -07:00
local srv = msg:split(" ")[4]
2021-01-24 07:01:01 -08:00
for _, f in ipairs(multiserver.on_joinplayer) do
2021-03-17 09:19:43 -07:00
f(name, srv)
2021-01-24 07:01:01 -08:00
end
elseif cmd == "->LEAVE" then
local name = msg:split(" ")[3]
for _, f in ipairs(multiserver.on_leaveplayer) do
f(name)
end
elseif cmd == "->REDIRECTED" then
local name = msg:split(" ")[3]
local newsrv = msg:split(" ")[4]
local success = multiserver.tobool(msg:split(" ")[5])
for _, f in ipairs(multiserver.on_redirect_done) do
f(name, newsrv, success)
end
2021-01-29 09:12:58 -08:00
elseif cmd == "->MT2MT" then
local smsg = msg:split(" ")
local broadcast = multiserver.to_bool(smsg[2])
2021-01-29 09:12:58 -08:00
local m = ""
for i = 3, #smsg do
m = m .. smsg[i]
if i < #smsg then m = m .. " " end
end
for _, f in ipairs(multiserver.on_msg) do
f(m, broadcast)
2021-01-29 09:12:58 -08:00
end
2021-01-23 08:49:04 -08:00
end
2021-01-24 07:01:01 -08:00
if cb[rrq] == nil then return end
2021-01-23 08:49:04 -08:00
cb[rrq](p)
cb[rrq] = nil
end)