Sha256: ae0f38ce71cccbc9baee4641f2e5cb96a37fd50bca2d6bd905bf2d3b662e5fc0

Contents?: true

Size: 1.46 KB

Versions: 3

Compression:

Stored size: 1.46 KB

Contents

require_relative 'event_machine_base'

# This implementation uses the 'faye-websocket' Gem.
module Wamp
  module Client
    module Transport
      class FayeWebSocket < EventMachineBase
        attr_accessor :socket

        def initialize(options)
          super(options)
          self.socket = nil

          # Only make them include the gem if they are going to use it
          require 'faye/websocket'
        end

        def connect
          options = { :headers => self.headers }
          options[:proxy] = self.proxy if self.proxy != nil
          self.socket = Faye::WebSocket::Client.new(self.uri, [self.protocol], options)

          self.socket.on(:open) do |event|
            self.connected = true
            trigger :open
          end

          self.socket.on(:message) do |event|
            trigger :message, self.serializer.deserialize(event.data)
          end

          self.socket.on(:close) do |event|
            self.connected = false
            trigger :close, event.reason
          end

          self.socket.on(:error) do |event|
            trigger :error, event.message
          end
        end

        def disconnect
          self.socket.close
          self.connected = false
        end

        def send_message(msg)
          if self.connected
            self.socket.send(self.serializer.serialize(msg))
          else
            raise RuntimeError, "Socket must be open to call 'send_message'"
          end
        end

      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
wamp_client-0.2.2 lib/wamp/client/transport/faye_web_socket.rb
wamp_client-0.2.1 lib/wamp/client/transport/faye_web_socket.rb
wamp_client-0.2.0 lib/wamp/client/transport/faye_web_socket.rb