Sha256: ddf1616521823c7a236b7f5027a9ac17e6cdef8b87f5aa1982a2ea5bde4b509b

Contents?: true

Size: 954 Bytes

Versions: 1

Compression:

Stored size: 954 Bytes

Contents

module Karma
  class Connection
    def initialize
    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|
        begin
          response = conn.readline
          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.5 lib/karma/connection.rb