87 lines
2.4 KiB
Lua
87 lines
2.4 KiB
Lua
local multi, thread = require("multi"):init()
|
|
local socket = require("socket")
|
|
local net = require("lnet")
|
|
local server = {}
|
|
local bCaster = 0
|
|
server.__index = server
|
|
server.updaterRate = 1
|
|
server.rMode = "*l"
|
|
server.sMode = "*l"
|
|
function server:init(type)
|
|
self.Type = type
|
|
self.OnClientsModulesList = multi:newConnection()
|
|
self.OnPreRecieved = multi:newConnection()
|
|
self.OnDataRecieved = multi:newConnection()
|
|
self.OnClientClosed = multi:newConnection()
|
|
self.OnClientConnected = multi:newConnection()
|
|
self.OnPreSend = multi:newConnection()
|
|
self.idleRate = 5
|
|
self.clientHandlers = {}
|
|
self.bannedCIDs = {}
|
|
self.bannedIPs = {}
|
|
self.broad = socket.udp()
|
|
self.localIP = net.getLocalIP()
|
|
self.ips = {}
|
|
self.links = {}
|
|
self.cids = {}
|
|
self.process = multi:newProcessor()
|
|
self.process.Start()
|
|
end
|
|
function server:setIdleRate(minutes)
|
|
self.idleRate = minutes
|
|
end
|
|
function server:setUpdateRate(n)
|
|
self.updaterRate = n
|
|
end
|
|
function server:banCID(cid)
|
|
table.insert(self.bannedCIDs,cid)
|
|
end
|
|
function server:banIP(ip)
|
|
table.insert(self.bannedIPs)
|
|
end
|
|
function server:setRecieveMode(mode)
|
|
self.rMode = mode
|
|
end
|
|
function server:setSendMode(mode)
|
|
self.sMode = mode
|
|
end
|
|
function server:broadcast(name)
|
|
if not self.isBroadcasting then
|
|
bCaster = bCaster + 1
|
|
self.isBroadcasting = true
|
|
self.process:newThread("Broadcast Handler<"..bCaster..">",function()
|
|
while true do
|
|
thread.yield()
|
|
self.broad:setoption("broadcast",true)
|
|
self.broad:sendto(table.concat({name,self.Type,self.localIP},"|")..":"..self.port, "255.255.255.255", 11111)
|
|
-- Send to localhost as well
|
|
self.broad:sendto(table.concat({name,self.Type,self.localIP},"|")..":"..self.port, self.localIP, 11111)
|
|
self.broad:setoption("broadcast", false)
|
|
end
|
|
end)
|
|
end
|
|
end
|
|
function server:send(cid,data)
|
|
-- Override this
|
|
end
|
|
function server:getCid(ip,port)
|
|
if self.cids[ip .. port] then
|
|
return self.cids[ip .. port]
|
|
end
|
|
end
|
|
function server:sendAll(data)
|
|
for i,v in pairs(self.cids) do
|
|
self:send(data,cid)
|
|
end
|
|
end
|
|
function server:sendAllBut(data,cid)
|
|
for i,v in pairs(self.cids) do
|
|
if v~=cid then
|
|
self:send(data,cid)
|
|
end
|
|
end
|
|
end
|
|
function server:clientRegistered(cid)
|
|
return self.cids[cid]
|
|
end
|
|
return server |