MattiasBuelens

MCNet devices/router

Jun 16th, 2012
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.22 KB | None | 0 0
  1. --[[
  2.  
  3.     Minecraft Intranet
  4.     Router device
  5.  
  6. --]]
  7.  
  8. mcnet = mcnet or {}
  9. local device = mcnet.device or {}
  10. mcnet.device = device
  11.  
  12. -- Load dependencies
  13. program.load("server", "servant", "forwarder")
  14.  
  15. local Router = common.newClass(
  16.     device.Server, device.Servant, device.Forwarder,
  17.     {
  18.         -- Device
  19.         deviceType = "router",
  20.         -- Server
  21.         registerServantMessage = "registerClient",
  22.         registeredServantMessage = "registeredClient",
  23.         -- Servant
  24.         registerServerMessage = "registerRouter",
  25.         registeredServerMessage = "registeredRouter",
  26.         -- Router
  27.         serverType = "mainframe",
  28.         servantType = "client",
  29.         domain = nil
  30.     }
  31. )
  32. device.Router = Router
  33.  
  34. -- Constructor
  35. function Router:init()
  36.     device.Server.init(self)
  37.     device.Servant.init(self)
  38.     device.Forwarder.init(self)
  39.  
  40.     -- Address
  41.     self.address = mcnet.address.new{
  42.         localPart = self.deviceType,
  43.         domainPart = self.domain
  44.     }
  45. end
  46.  
  47. function Router:checkAddress(address)
  48.     return address.domainPart == self.domain
  49. end
  50.  
  51. function Router:checkServer(deviceType, deviceAddress)
  52.     return deviceType == self.serverType
  53. end
  54.  
  55. function Router:checkServant(deviceType, deviceAddress)
  56.     return deviceType == self.servantType and deviceAddress.domainPart == self.domain
  57. end
  58.  
  59. function Router:getServantName(servantAddress)
  60.     return servantAddress.localPart
  61. end
  62.  
  63. function Router:getReceivers(senderId, msg)
  64.     -- Default to mainframe
  65.     local receiverId = self.serverId
  66.  
  67.     -- Send to client if on this domain
  68.     if (msg.to.domainPart == self.domain) then
  69.         receiverId = self.servants:get(msg.to.localPart)
  70.     end
  71.  
  72.     return {receiverId}
  73. end
  74.  
  75. function Router:canForward(senderId, msg)
  76.     if (not device.Forwarder.canForward(self, senderId, msg)) then
  77.         return false
  78.     end
  79.  
  80.     -- Ignore servant messages
  81.     if (msg.type == self.registerServantMessage or msg.type == self.registeredServantMessage) then
  82.         return false
  83.     end
  84.    
  85.     -- Ignore server messages
  86.     if (msg.type == self.registerServerMessage or msg.type == self.registeredServerMessage) then
  87.         return false
  88.     end
  89.  
  90.     return true
  91. end
Advertisement
Add Comment
Please, Sign In to add comment