Sha256: 2e8af05d771fb5725f715b464bc8264c778892df818ca509a50b1aed2c95ee42

Contents?: true

Size: 1008 Bytes

Versions: 1

Compression:

Stored size: 1008 Bytes

Contents

module Karma
  class Connection
    def initialize
      @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(
        Karma.configuration.host,
        Karma.configuration.port,
        connect_timeout: 0.5
      )
    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

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