Module: Faye::WebSocket::API

Extended by:
Forwardable
Includes:
EventTarget
Included in:
Faye::WebSocket, Client
Defined in:
lib/faye/websocket/api.rb,
lib/faye/websocket/api/event.rb,
lib/faye/websocket/api/event_target.rb

Defined Under Namespace

Modules: EventTarget Classes: CloseEvent, ErrorEvent, Event, MessageEvent, OpenEvent

Constant Summary collapse

CONNECTING =
0
OPEN =
1
CLOSING =
2
CLOSED =
3
TYPES =
{
  'open'    => OpenEvent,
  'message' => MessageEvent,
  'close'   => CloseEvent,
  'error'   => ErrorEvent
}

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from EventTarget

#add_event_listener, #add_listener, #dispatch_event, #remove_event_listener

Instance Attribute Details

#buffered_amountObject (readonly)

Returns the value of attribute buffered_amount.



18
19
20
# File 'lib/faye/websocket/api.rb', line 18

def buffered_amount
  @buffered_amount
end

#ready_stateObject (readonly)

Returns the value of attribute ready_state.



18
19
20
# File 'lib/faye/websocket/api.rb', line 18

def ready_state
  @ready_state
end

#urlObject (readonly)

Returns the value of attribute url.



18
19
20
# File 'lib/faye/websocket/api.rb', line 18

def url
  @url
end

Instance Method Details

#closeObject



102
103
104
105
# File 'lib/faye/websocket/api.rb', line 102

def close
  @ready_state = CLOSING if @ready_state == OPEN
  @driver.close
end

#initialize(options = {}) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/faye/websocket/api.rb', line 20

def initialize(options = {})
  super()

  if headers = options[:headers]
    headers.each { |name, value| @driver.set_header(name, value) }
  end

  @ping            = options[:ping]
  @ping_id         = 0
  @ready_state     = CONNECTING
  @buffered_amount = 0

  @driver.on(:open)    { |e| open }
  @driver.on(:message) { |e| receive_message(e.data) }
  @driver.on(:close)   { |e| finalize(e.reason, e.code) }

  @driver.on(:error) do |error|
    event = Event.create('error', :message => error.message)
    event.init_event('error', false, false)
    dispatch_event(event)
  end

  if @ping
    @ping_timer = EventMachine.add_periodic_timer(@ping) do
      @ping_id += 1
      ping(@ping_id.to_s)
    end
  end
end

#ping(message = '', &callback) ⇒ Object



97
98
99
100
# File 'lib/faye/websocket/api.rb', line 97

def ping(message = '', &callback)
  return false if @ready_state > OPEN
  @driver.ping(message, &callback)
end

#protocolObject



107
108
109
# File 'lib/faye/websocket/api.rb', line 107

def protocol
  @driver.protocol || ''
end

#send(message) ⇒ Object



87
88
89
90
91
92
93
94
95
# File 'lib/faye/websocket/api.rb', line 87

def send(message)
  return false if @ready_state > OPEN
  case message
    when Numeric then @driver.text(message.to_s)
    when String  then @driver.text(message)
    when Array   then @driver.binary(message)
    else false
  end
end

#write(data) ⇒ Object



83
84
85
# File 'lib/faye/websocket/api.rb', line 83

def write(data)
  @stream.write(data)
end