Sha256: 18522d8e94aee0192391f387bad106b1f35eae8a62f3caed33b9a331a967256c

Contents?: true

Size: 978 Bytes

Versions: 1

Compression:

Stored size: 978 Bytes

Contents

module Karma
  class Connection
    def initialize
      @maxlen = 4096
    end

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

    private

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

    def push(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
      )
    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

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