Sha256: f8c588ac7ebed27d27d598ecc4dbace86c763c531c502915411063efae1390b3

Contents?: true

Size: 1.01 KB

Versions: 1

Compression:

Stored size: 1.01 KB

Contents

module Karma
  class Connection
    def initialize
      @port   = Karma.config.port
      @host   = Karma.config.host
      @maxlen = 4096
    end

    def send_and_read(request)
      unless defined?(@socket)
        establish_connection!
      end
      send(request)
      read
    end

    private

    def connect
      begin
        yield @socket
      rescue => e
        establish_connection!
        retry
      end
    end

    def send(message)
      message = message.to_json
      connect do |conn|
        conn.send("#{message}\r\n", 0)
        conn.flush
      end
    end

    def read
      connect do |conn|
        response = conn.recv(@maxlen)
        begin
          OpenStruct.new(JSON.parse(response))
        rescue => e
          return OpenStruct.new({
            "success" => false,
            "response" => e.message
          })
        end
      end
    end

    def establish_connection!
      @socket = TCPSocket.new(
        @host, @port,
        connect_timeout: 0.5
      )
    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
karma-0.1.2 lib/karma/connection.rb