MattiasBuelens

MCNet devices/forwarder

Jun 16th, 2012
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 1.65 KB | None | 0 0
  1. --[[
  2.  
  3.     Minecraft Intranet
  4.     Forwarder device
  5.  
  6. --]]
  7.  
  8. mcnet = mcnet or {}
  9. local device = mcnet.device or {}
  10. mcnet.device = device
  11.  
  12. local Forwarder = common.newClass(device.Device)
  13. device.Forwarder = Forwarder
  14.  
  15. -- Constructor
  16. function Forwarder:init()
  17.     device.Device.init(self)
  18.  
  19.     self:addMessageHandler("", self.handleForwarder)
  20. end
  21.  
  22. -- Check if the given message can be forwarded
  23. function Forwarder:canForward(senderId, msg)
  24.     -- Ignore device messages
  25.     if (common.startsWith(msg.type, "device")) then
  26.         return false
  27.     end
  28.  
  29.     return true
  30. end
  31.  
  32. -- Get the receivers for the given forwarded message
  33. function Forwarder:getReceivers(senderId, msg)
  34.     return self:neighboursExcept(senderId)
  35. end
  36.  
  37. function Forwarder:handleForwarder(senderId, msg)
  38.     if (self:canForward(senderId, msg)) then
  39.         -- Forward message
  40.         local success = false
  41.         if msg.to == nil then
  42.             success = true
  43.             for i,deviceId in ipairs(self:neighboursExcept(senderId)) do
  44.                 self:send(deviceId, msg)
  45.             end
  46.         else
  47.             for i,deviceId in ipairs(self:getReceivers(senderId, msg)) do
  48.                 self:send(deviceId, msg)
  49.                 success = true
  50.             end
  51.         end
  52.  
  53.         self:trigger("forwardMessage", success, senderId, msg)
  54.         if not success then
  55.             -- Reply with error message
  56.             local errorMsg = mcnet.message.new{
  57.                 type = "errorNotFound",
  58.                 to = msg.from,
  59.                 data = msg.to:format()
  60.             }
  61.             self:send(senderId, errorMsg)
  62.         end
  63.     end
  64.  
  65.     return false
  66. end
Advertisement
Add Comment
Please, Sign In to add comment