Sha256: ce120896211e867c5efd1a3b21bb1acd5b955d8b7655248ca61b43efd3cf71a3

Contents?: true

Size: 1.7 KB

Versions: 12

Compression:

Stored size: 1.7 KB

Contents

# encoding: UTF-8

require 'faye/websocket'
require 'uri'

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)
    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

12 entries across 12 versions & 1 rubygems

Version Path
factor-0.6.3 lib/websocket_manager.rb
factor-0.6.2 lib/websocket_manager.rb
factor-0.6.1 lib/websocket_manager.rb
factor-0.6.0 lib/websocket_manager.rb
factor-0.5.16 lib/websocket_manager.rb
factor-0.5.13 lib/websocket_manager.rb
factor-0.5.12 lib/websocket_manager.rb
factor-0.5.10 lib/websocket_manager.rb
factor-0.5.09 lib/websocket_manager.rb
factor-0.5.08 lib/websocket_manager.rb
factor-0.5.07 lib/websocket_manager.rb
factor-0.5.06 lib/websocket_manager.rb