ref: 2ebee720a8af84e6f1a4d4e390f723526553b5e0
dir: /lib/lua/r2pipe.lua/
--- -- r2pipe for lua --- local net = require "net" local json = require "json" local r2pipe = {} --- -- tcp protocol --- local R2Tcp = { new = function(self, host, port) local o = {} setmetatable(o, self) self.__index = self o.socket = net.Socket:new() o.host = host o.port = port return o end, send = function(self, data) self.socket:dial(self.host, self.port) return self.socket:send(data) end, read = function(self) local b, done done = false status, b = self.socket:receive_all() if not(status) then return false, b end self.socket:close() return true, b end, close = function(self) self.socket:close() end, } --- -- R2Comm --- local R2Comm = { new = function(self, proto) local o = {} setmetatable(o, self) self.__index = self o.proto = proto return o end, cmd = function(self, cmd) local status, err, response status, err = self.proto:send(string.format("%s\n", cmd)) if not(status) then return false, err end status, response = self.proto:read() if not(status) then return false, response end return true, response end, cmdj = function(self, cmd) local status, response status, response = self.proto:send(string.format("%s\n", cmd)) if not(status) then return false, response end status, response = self.proto:read() if not(status) then return false, response end status, response = json.parse(response) if not(status) then return false, response end return true, response end, close = function(self) self.proto:close() end, } local r2pipe = { R2Tcp = R2Tcp, R2Comm = R2Comm, } return r2pipe