Advertisement
Neon1432

rednet.lua

Feb 23rd, 2022 (edited)
652
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.54 KB | None | 0 0
  1. local ErrorCodes =
  2. {
  3.     [0] = "no error",
  4.     [1] = "no connection",
  5.     [2] = "took to long",
  6.     [3] = "protocol not defined",
  7.     [4] = "port not defined",
  8.     [5] = "resource not found"
  9. }
  10.  
  11.  
  12. local hook = { socketID = 0, port = nil }
  13.  
  14.  
  15.  
  16. function hook:new(o)
  17.     o = o or {}
  18.     setmetatable(o, self)
  19.     self.__index = self
  20.     return o
  21. end
  22.  
  23.  
  24.  
  25. function hook:connect(timeout)
  26.     if self.port == nil then
  27.         return 4, false
  28.     end
  29.     rednet.host(self.port.."_hook", "hook")
  30.     while true do
  31.         local id = rednet.lookup(self.port.."_socket")
  32.         if id == nil then
  33.             if type(timeout) == "number" then
  34.                 if timeout <= 0 then
  35.                     return 2, false
  36.                 else
  37.                     timeout = timeout - 1
  38.                 end
  39.             end
  40.         else
  41.             if type(id) == "table" then
  42.                 self.socketID = id[1]
  43.             else
  44.                 self.socketID = id
  45.             end
  46.             return 0, true
  47.         end    
  48.     end
  49. end
  50.  
  51.  
  52.  
  53. function hook:request(protocol, payload)
  54.     if self.socketID == 0 then
  55.         return 1, nil
  56.     end
  57.     if protocol == nil then
  58.         return 3, nil
  59.     end
  60.  
  61.     local frame = {protocol, payload}
  62.  
  63.     local counter = 0
  64.     while true do
  65.         rednet.send(self.socketID, frame, self.port)
  66.         local id, message = rednet.receive(self.port, 2)
  67.         if id ~= nil then
  68.             return 0, message
  69.         else
  70.             if counter >= 5 then
  71.                 return 2, nil
  72.             else
  73.                 counter = counter + 1
  74.             end
  75.         end
  76.     end
  77. end
  78.  
  79.  
  80.  
  81. local socket = { hookID = 0, port = nil , resources = {}}
  82.  
  83.  
  84.  
  85. --table.insert(self.resource, {name, afunction})
  86.  
  87.  
  88.  
  89. function socket:new(o)
  90.     o = o or {}
  91.     setmetatable(o, self)
  92.     self.__index = self
  93.     local newr = {}
  94.     for I = 1, #self.resources do
  95.         newr[I] = self.resources[I]
  96.     end
  97.     o.resources = newr
  98.     return o
  99. end
  100.  
  101.  
  102.  
  103. function socket:connect(timeout)
  104.     if self.port == nil then
  105.         return 4, false
  106.     end
  107.     rednet.host(self.port.."_socket", "socket")
  108.     while true do
  109.         local id = rednet.lookup(self.port.."_hook")
  110.         if id == nil then
  111.             if type(timeout) == "number" then
  112.                 if timeout <= 0 then
  113.                     return 2, false
  114.                 else
  115.                     timeout = timeout - 1
  116.                 end
  117.             end
  118.         else
  119.             if type(id) == "table" then
  120.                 self.hookID = id[1]
  121.             else
  122.                 self.hookID = id
  123.             end
  124.             return 0, true
  125.         end
  126.     end
  127. end
  128.  
  129.  
  130.  
  131. function socket:run()
  132.     local id, message = rednet.receive(self.port)
  133.     for I = 1, #self.resources do
  134.         if self.resources[I][1] == message[1] then
  135.             local func = self.resources[I][2]
  136.             local answer = func(message[2])
  137.             rednet.send(self.hookID, answer, self.port)
  138.             return 0, true
  139.         end
  140.     end
  141.     rednet.send(self.hookID, nil, self.port)
  142.     return 5, false
  143. end
  144.  
  145. rdnt =
  146. {
  147.     socket = socket,
  148.     hook = hook
  149. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement