Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --[[
- Minecraft Intranet
- Messages and addresses
- --]]
- mcnet = mcnet or {}
- local message = mcnet.message or {}
- mcnet.message = message
- local address = mcnet.address or {}
- mcnet.address = address
- --[[
- Message
- --]]
- local Message = common.newClass{
- from = nil,
- to = nil,
- type = "",
- data = nil
- }
- function message.new(o)
- return Message:new(o)
- end
- function message.pack(msg)
- assert(type(msg) == "table", "invalid message object")
- msg = common.clone(msg)
- if (type(msg.from) == "table") then
- msg.from = address.format(msg.from)
- end
- if (type(msg.to) == "table") then
- msg.to = address.format(msg.to)
- end
- return msg
- end
- function Message:pack()
- return message.pack(self)
- end
- function message.serialize(msg)
- return common.serialize(message.pack(msg))
- end
- function Message:serialize()
- return message.serialize(self)
- end
- function message.unpack(msg)
- if (type(msg) ~= "table") then
- -- Invalid message
- return nil
- end
- msg = common.clone(msg)
- if (msg.from ~= nil) then
- msg.from = address.parse(msg.from)
- end
- if (msg.to ~= nil) then
- msg.to = address.parse(msg.to)
- end
- return message.new(msg)
- end
- function message.unserialize(msg)
- if type(msg) == "string" then
- msg = textutils.unserialize(msg)
- end
- return message.unpack(msg)
- end
- function message.send(receiverId, msg, bWaitUntilPortOpen)
- if type(msg) ~= "string" then
- msg = message.serialize(msg)
- end
- return rednet.send(receiverId, msg, bWaitUntilPortOpen)
- end
- function message.broadcast(msg, bWaitUntilPortOpen)
- return message.send(nil, msg, bWaitUntilPortOpen)
- end
- --[[
- Address
- --]]
- local Address = common.newClass{
- localPart = "",
- domainPart = ""
- }
- function address.new(o)
- return Address:new(o)
- end
- function address.parse(addr)
- assert(type(addr) == "string", "invalid address string")
- local i, j, localPart, domainPart = string.find(addr, "^([^@]+)@(.+)$")
- if(i ~= nil) then
- return address.new{
- localPart = localPart,
- domainPart = domainPart
- }
- end
- return address.new()
- end
- function address.format(addr)
- assert(type(addr) == "table", "invalid address object")
- return address.new(addr):format(self)
- end
- function Address:format()
- return string.format("%s@%s", self.localPart, self.domainPart)
- end
Advertisement
Add Comment
Please, Sign In to add comment