Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --[[
- Minecraft Intranet
- Forwarder device
- --]]
- mcnet = mcnet or {}
- local device = mcnet.device or {}
- mcnet.device = device
- local Forwarder = common.newClass(device.Device)
- device.Forwarder = Forwarder
- -- Constructor
- function Forwarder:init()
- device.Device.init(self)
- self:addMessageHandler("", self.handleForwarder)
- end
- -- Check if the given message can be forwarded
- function Forwarder:canForward(senderId, msg)
- -- Ignore device messages
- if (common.startsWith(msg.type, "device")) then
- return false
- end
- return true
- end
- -- Get the receivers for the given forwarded message
- function Forwarder:getReceivers(senderId, msg)
- return self:neighboursExcept(senderId)
- end
- function Forwarder:handleForwarder(senderId, msg)
- if (self:canForward(senderId, msg)) then
- -- Forward message
- local success = false
- if msg.to == nil then
- success = true
- for i,deviceId in ipairs(self:neighboursExcept(senderId)) do
- self:send(deviceId, msg)
- end
- else
- for i,deviceId in ipairs(self:getReceivers(senderId, msg)) do
- self:send(deviceId, msg)
- success = true
- end
- end
- self:trigger("forwardMessage", success, senderId, msg)
- if not success then
- -- Reply with error message
- local errorMsg = mcnet.message.new{
- type = "errorNotFound",
- to = msg.from,
- data = msg.to:format()
- }
- self:send(senderId, errorMsg)
- end
- end
- return false
- end
Advertisement
Add Comment
Please, Sign In to add comment