Sha256: 876cc61b2c7eed7f7fefd974d855e281ad04af96b68430e673a6a00ca80e30b1

Contents?: true

Size: 1.42 KB

Versions: 15

Compression:

Stored size: 1.42 KB

Contents

module EventMachine
  module WebSocketIO
    class Client
      include EventEmitter
      attr_reader :url, :session, :running
      attr_accessor :timeout

      def initialize(url)
        raise ArgumentError, "invalid websocket URL \"#{url}\"" unless url =~ /^ws:\/\/.+/
        @url = url
        @running = false
        @__reconnect_timer_id = nil
        @ws = nil
        self.on :__session_id do |session_id|
          @session = session_id
          self.emit :connect, session_id
        end
      end

      def connect
        url = @session ? "#{@url}/session=#{@session}" : @url
        @ws = EventMachine::WebSocketClient.connect url
        @running = true

        @ws.stream do |msg|
          data = JSON.parse msg
          self.emit data['type'], data['data']
        end

        @ws.callback do
          self.push :__session_id
        end

        @ws.errback do |err|
          self.emit :error, err
        end

        @ws.disconnect do
          self.emit :disconnect
          if @running
            @__reconnect_timer_id = EM::add_timer 10 do
              connect
            end
          end
        end

        return self
      end

      def close
        @running = false
        @ws.close_connection if @ws
        EM::cancel_timer @__reconnect_timer_id
      end

      def push(type, data={})
        @ws.send_msg({:type => type, :data => data, :session => self.session}.to_json)
      end

    end
  end
end

Version data entries

15 entries across 15 versions & 2 rubygems

Version Path
em-websocketio-client-0.0.3 lib/em-websocketio-client/client.rb
em-websocketio-client-0.0.2 lib/em-websocketio-client/client.rb
em-websocketio-client-0.0.1 lib/em-websocketio-client/client.rb
sinatra-websocketio-0.1.7 lib/em-websocketio-client/client.rb
sinatra-websocketio-0.1.6 lib/em-websocketio-client/client.rb
sinatra-websocketio-0.1.5 lib/em-websocketio-client/client.rb
sinatra-websocketio-0.1.4 lib/em-websocketio-client/client.rb
sinatra-websocketio-0.1.3 lib/em-websocketio-client/client.rb
sinatra-websocketio-0.1.2 lib/em-websocketio-client/client.rb
sinatra-websocketio-0.1.1 lib/em-websocketio-client/client.rb
sinatra-websocketio-0.1.0 lib/em-websocketio-client/client.rb
sinatra-websocketio-0.0.6 lib/em-websocketio-client/client.rb
sinatra-websocketio-0.0.5 lib/em-websocketio-client/client.rb
sinatra-websocketio-0.0.4 lib/em-websocketio-client/client.rb
sinatra-websocketio-0.0.3 lib/em-websocketio-client/client.rb