class EventMachine::WebSocket::Handler

Attributes

request[R]
state[R]

Public Class Methods

klass_factory(version) click to toggle source
# File lib/em-websocket/handler.rb, line 4
def self.klass_factory(version)
  case version
  when 75
    Handler75
  when 76
    Handler76
  when 1..3
    # We'll use handler03 - I believe they're all compatible
    Handler03
  when 5
    Handler05
  when 6
    Handler06
  when 7
    Handler07
  when 8
    # drafts 9, 10, 11 and 12 should never change the version
    # number as they are all the same as version 08.
    Handler08
  when 13
    # drafts 13 to 17 all identify as version 13 as they are
    # only minor changes or text changes.
    Handler13
  else
    # According to spec should abort the connection
    raise HandshakeError, "Protocol version #{version} not supported"
  end
end
new(connection, debug = false) click to toggle source
# File lib/em-websocket/handler.rb, line 37
def initialize(connection, debug = false)
  @connection = connection
  @debug = debug
  @state = :connected
  @close_timer = nil
  initialize_framing
end

Public Instance Methods

close_websocket(code, body) click to toggle source
# File lib/em-websocket/handler.rb, line 52
def close_websocket(code, body)
  # Implemented in subclass
end
fail_websocket(e) click to toggle source

This corresponds to “Fail the WebSocket Connection” in the spec.

# File lib/em-websocket/handler.rb, line 66
def fail_websocket(e)
  debug [:error, e]
  close_websocket(e.code, e.message)
  @connection.close_connection_after_writing
  @connection.trigger_on_error(e)
end
ping() click to toggle source
# File lib/em-websocket/handler.rb, line 86
def ping
  # Overridden in subclass
  false
end
pingable?() click to toggle source
# File lib/em-websocket/handler.rb, line 91
def pingable?
  # Also Overridden
  false
end
receive_data(data) click to toggle source
# File lib/em-websocket/handler.rb, line 45
def receive_data(data)
  @data << data
  process_data
rescue WSProtocolError => e
  fail_websocket(e)
end
start_close_timeout() click to toggle source

Used to avoid un-acked and unclosed remaining open indefinitely

# File lib/em-websocket/handler.rb, line 57
def start_close_timeout
  @close_timer = EM::Timer.new(@connection.close_timeout) {
    @connection.close_connection
    e = WSProtocolError.new("Close handshake un-acked after #{@connection.close_timeout}s, closing tcp connection")
    @connection.trigger_on_error(e)
  }
end
unbind() click to toggle source
# File lib/em-websocket/handler.rb, line 73
def unbind
  @state = :closed

  @close_timer.cancel if @close_timer

  @close_info = defined?(@close_info) ? @close_info : {
    :code => 1006,
    :was_clean => false,
  }

  @connection.trigger_on_close(@close_info)
end