Sha256: b6b96c0e0b030d2fabc0ed7ef9ccbe795255216f9514f06ea03161ff1fc52b89

Contents?: true

Size: 1.72 KB

Versions: 9

Compression:

Stored size: 1.72 KB

Contents

# encoding: UTF-8

require 'faye/websocket'
require 'uri'
require 'json'

module Factor
  # class for managing the web socket connections
  class WebSocketManager
    attr_accessor :keep_open, :events, :state

    def initialize(uri, headers = {})
      u                     = URI(uri)
      @uri                  = u.to_s
      @settings             = { ping: 10, retry: 5 }
      @settings[:headers]   = headers if headers && headers != {}
      @state                = :closed
      @events               = {}
    end

    def open
      if closed?
        @state = :opening
        connect
      end
      @state
    end

    def close
      if open?
        @state = :closing
        @ws.close
      end
      @state
    end

    def on(event, &block)
      @events[event] = block
    end

    def open?
      @state == :open
    end

    def opening?
      @state == :opening
    end

    def closed?
      @state == :closed
    end

    def closing?
      @state == :closing
    end

    def send(msg)
      @ws.send(msg.to_json)
    end

    private

    def call_event(event, data)
      @events[event].call(data) if @events[event]
    end

    def connect
      EM.run do
        begin
          @ws = Faye::WebSocket::Client.new(@uri, nil, @settings)

          @ws.on :close do |event|
            @state = :closed
            call_event :close, event
          end

          @ws.on :message do |msg|
            call_event :message, msg
          end

          @ws.on :open do |event|
            @state = :open
            call_event :open, event
          end

          @ws.on :error do |event|
            call_event :error, event
          end
        rescue => ex
          call_event :fail, ex.message
        end
      end
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
factor-0.6.12 lib/websocket_manager.rb
factor-0.6.11 lib/websocket_manager.rb
factor-0.6.10 lib/websocket_manager.rb
factor-0.6.9 lib/websocket_manager.rb
factor-0.6.8 lib/websocket_manager.rb
factor-0.6.7 lib/websocket_manager.rb
factor-0.6.6 lib/websocket_manager.rb
factor-0.6.5 lib/websocket_manager.rb
factor-0.6.4 lib/websocket_manager.rb