Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local ErrorCodes =
- {
- [0] = "no error",
- [1] = "no connection",
- [2] = "took to long",
- [3] = "protocol not defined",
- [4] = "port not defined",
- [5] = "resource not found"
- }
- local hook = { socketID = 0, port = nil }
- function hook:new(o)
- o = o or {}
- setmetatable(o, self)
- self.__index = self
- return o
- end
- function hook:connect(timeout)
- if self.port == nil then
- return 4, false
- end
- rednet.host(self.port.."_hook", "hook")
- while true do
- local id = rednet.lookup(self.port.."_socket")
- if id == nil then
- if type(timeout) == "number" then
- if timeout <= 0 then
- return 2, false
- else
- timeout = timeout - 1
- end
- end
- else
- if type(id) == "table" then
- self.socketID = id[1]
- else
- self.socketID = id
- end
- return 0, true
- end
- end
- end
- function hook:request(protocol, payload)
- if self.socketID == 0 then
- return 1, nil
- end
- if protocol == nil then
- return 3, nil
- end
- local frame = {protocol, payload}
- local counter = 0
- while true do
- rednet.send(self.socketID, frame, self.port)
- local id, message = rednet.receive(self.port, 2)
- if id ~= nil then
- return 0, message
- else
- if counter >= 5 then
- return 2, nil
- else
- counter = counter + 1
- end
- end
- end
- end
- local socket = { hookID = 0, port = nil , resources = {}}
- --table.insert(self.resource, {name, afunction})
- function socket:new(o)
- o = o or {}
- setmetatable(o, self)
- self.__index = self
- local newr = {}
- for I = 1, #self.resources do
- newr[I] = self.resources[I]
- end
- o.resources = newr
- return o
- end
- function socket:connect(timeout)
- if self.port == nil then
- return 4, false
- end
- rednet.host(self.port.."_socket", "socket")
- while true do
- local id = rednet.lookup(self.port.."_hook")
- if id == nil then
- if type(timeout) == "number" then
- if timeout <= 0 then
- return 2, false
- else
- timeout = timeout - 1
- end
- end
- else
- if type(id) == "table" then
- self.hookID = id[1]
- else
- self.hookID = id
- end
- return 0, true
- end
- end
- end
- function socket:run()
- local id, message = rednet.receive(self.port)
- for I = 1, #self.resources do
- if self.resources[I][1] == message[1] then
- local func = self.resources[I][2]
- local answer = func(message[2])
- rednet.send(self.hookID, answer, self.port)
- return 0, true
- end
- end
- rednet.send(self.hookID, nil, self.port)
- return 5, false
- end
- rdnt =
- {
- socket = socket,
- hook = hook
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement