MattiasBuelens

MCNet devices/client

Jun 19th, 2012
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 1.91 KB | None | 0 0
  1. --[[
  2.  
  3.     Minecraft Intranet
  4.     Client 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("servant")
  14.  
  15. local Client = common.newClass(
  16.     device.Servant,
  17.     {
  18.         -- Device
  19.         deviceType = "client",
  20.         -- Servant
  21.         registerServerMessage = "registerClient",
  22.         registeredServerMessage = "registeredClient",
  23.         -- Client
  24.         serverType = "router",
  25.         name = nil,
  26.         domain = nil
  27.     }
  28. )
  29. device.Client = Client
  30.  
  31. -- Constructor
  32. function Client:init()
  33.     device.Servant.init(self)
  34.  
  35.     self:addMessageHandler("error", self.handleError)
  36.  
  37.     -- Address
  38.     self.address = mcnet.address.new{
  39.         localPart = self.name,
  40.         domainPart = self.domain
  41.     }
  42. end
  43.  
  44. function Client:checkServer(deviceType, deviceAddress)
  45.     return deviceType == self.serverType and deviceAddress.domainPart == self.domain
  46. end
  47.  
  48. -- Post message
  49. function Client:post(msg)
  50.     if not self:isConnected() then
  51.         self:trigger("error", "clientDisconnected", "Client not connected to server")
  52.         return false
  53.     end
  54.  
  55.     -- Sender address
  56.     msg.from = self.address
  57.  
  58.     -- Send message
  59.     local result = self:send(self.serverId, msg)
  60.     if not result then
  61.         self:trigger("error", "postMessageFailed", "Could not post message")
  62.     end
  63.     return result
  64. end
  65.  
  66. -- Error reporting
  67. function Client:handleError(senderId, msg)
  68.     local errorType = string.sub(msg.type, 1+string.len("error"))
  69.     errorType = string.lower(string.sub(errorType, 1, 1))..string.sub(errorType, 2, -1)
  70.  
  71.     if (string.lower(errorType) == "notfound") then
  72.         local address = mcnet.address.parse(msg.data)
  73.         self:trigger("error", "destinationNotFound", "Destination address not found", address)
  74.     else
  75.         self:trigger("error", errorType, "Unknown error", senderId, msg)
  76.     end
  77. end
Advertisement
Add Comment
Please, Sign In to add comment