class Rexpro::Client
Constants
- DEFAULT_HOST
- DEFAULT_PORT
Attributes
host[R]
port[R]
socket[R]
Public Class Methods
new(opts = {})
click to toggle source
# File lib/rexpro/client.rb, line 12 def initialize(opts = {}) opts = opts.dup @host = opts.delete(:host) || DEFAULT_HOST @port = opts.delete(:port) || DEFAULT_PORT @request_opts = {} [:graph_name, :graph_obj_name].each do |key| value = opts.delete(key) @request_opts[key] = value if value end @socket_opts = opts reconnect end
Public Instance Methods
execute(script, opts = {})
click to toggle source
# File lib/rexpro/client.rb, line 68 def execute(script, opts = {}) opts = @request_opts.merge(opts) opts[:script] = script msg = Rexpro::Message::ScriptRequest.new(opts) request(msg) end
new_session(opts = {})
click to toggle source
# File lib/rexpro/client.rb, line 61 def new_session(opts = {}) opts = @request_opts.merge(opts) req = Rexpro::Message::SessionRequest.new(opts) resp = request(req) Rexpro::Session.new(self, resp.session_uuid, resp.languages) end
reconnect()
click to toggle source
# File lib/rexpro/client.rb, line 27 def reconnect @socket.close if @socket && !@socket.closed? begin @socket = TCPTimeout::TCPSocket.new(@host, @port, @socket_opts) @socket.setsockopt(Socket::SOL_SOCKET, Socket::SO_KEEPALIVE, true) rescue TCPTimeout::SocketTimeout => ex raise Rexpro::RexproException.new(ex) end end
request(req)
click to toggle source
# File lib/rexpro/client.rb, line 37 def request(req) req.write_to(@socket) Rexpro::Message.read_from(@socket).tap do |resp| if resp.is_a? Rexpro::Message::Error err_msg = resp.error_message err_msg << " [flag=#{resp.flag}]" if resp.flag raise Rexpro::RexproError.new(err_msg) end if resp.request_uuid.bytes.to_a != req.request_uuid.bytes.to_a @socket.close raise Rexpro::RexproException, "request uuid of response didn't match request" end end rescue TCPTimeout::SocketTimeout => ex raise Rexpro::RexproException.new(ex) rescue SystemCallError # Lets not leave an open connection in a potentially bad state @socket.close raise end