Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --[[
- Minecraft Intranet
- Router device
- --]]
- mcnet = mcnet or {}
- local device = mcnet.device or {}
- mcnet.device = device
- -- Load dependencies
- program.load("server", "servant", "forwarder")
- local Router = common.newClass(
- device.Server, device.Servant, device.Forwarder,
- {
- -- Device
- deviceType = "router",
- -- Server
- registerServantMessage = "registerClient",
- registeredServantMessage = "registeredClient",
- -- Servant
- registerServerMessage = "registerRouter",
- registeredServerMessage = "registeredRouter",
- -- Router
- serverType = "mainframe",
- servantType = "client",
- domain = nil
- }
- )
- device.Router = Router
- -- Constructor
- function Router:init()
- device.Server.init(self)
- device.Servant.init(self)
- device.Forwarder.init(self)
- -- Address
- self.address = mcnet.address.new{
- localPart = self.deviceType,
- domainPart = self.domain
- }
- end
- function Router:checkAddress(address)
- return address.domainPart == self.domain
- end
- function Router:checkServer(deviceType, deviceAddress)
- return deviceType == self.serverType
- end
- function Router:checkServant(deviceType, deviceAddress)
- return deviceType == self.servantType and deviceAddress.domainPart == self.domain
- end
- function Router:getServantName(servantAddress)
- return servantAddress.localPart
- end
- function Router:getReceivers(senderId, msg)
- -- Default to mainframe
- local receiverId = self.serverId
- -- Send to client if on this domain
- if (msg.to.domainPart == self.domain) then
- receiverId = self.servants:get(msg.to.localPart)
- end
- return {receiverId}
- end
- function Router:canForward(senderId, msg)
- if (not device.Forwarder.canForward(self, senderId, msg)) then
- return false
- end
- -- Ignore servant messages
- if (msg.type == self.registerServantMessage or msg.type == self.registeredServantMessage) then
- return false
- end
- -- Ignore server messages
- if (msg.type == self.registerServerMessage or msg.type == self.registeredServerMessage) then
- return false
- end
- return true
- end
Advertisement
Add Comment
Please, Sign In to add comment