Class: EventMachine::WebSocket::Handler

Inherits:
Object
  • Object
show all
Includes:
Debugger
Defined in:
lib/em-websocket/handler.rb

Direct Known Subclasses

Handler03, Handler05, Handler06, Handler07, Handler08, Handler13, Handler75, Handler76

Instance Attribute Summary (collapse)

Class Method Summary (collapse)

Instance Method Summary (collapse)

Constructor Details

- (Handler) initialize(connection, debug = false)



37
38
39
40
41
42
# File 'lib/em-websocket/handler.rb', line 37

def initialize(connection, debug = false)
  @connection = connection
  @debug = debug
  @state = :connected
  initialize_framing
end

Instance Attribute Details

- (Object) request (readonly)

Returns the value of attribute request



35
36
37
# File 'lib/em-websocket/handler.rb', line 35

def request
  @request
end

- (Object) state (readonly)

Returns the value of attribute state



35
36
37
# File 'lib/em-websocket/handler.rb', line 35

def state
  @state
end

Class Method Details

+ (Object) klass_factory(version)



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 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

Instance Method Details

- (Object) close_websocket(code, body)



51
52
53
# File 'lib/em-websocket/handler.rb', line 51

def close_websocket(code, body)
  # Implemented in subclass
end

- (Object) fail_websocket(e)

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



56
57
58
59
60
61
# File 'lib/em-websocket/handler.rb', line 56

def fail_websocket(e)
  debug [:error, e]
  close_websocket(e.code, e.message)
  @connection.close_connection_after_writing
  @connection.trigger_on_error(e)
end

- (Object) ping



74
75
76
77
# File 'lib/em-websocket/handler.rb', line 74

def ping
  # Overridden in subclass
  false
end

- (Boolean) pingable?



79
80
81
82
# File 'lib/em-websocket/handler.rb', line 79

def pingable?
  # Also Overridden
  false
end

- (Object) receive_data(data)



44
45
46
47
48
49
# File 'lib/em-websocket/handler.rb', line 44

def receive_data(data)
  @data << data
  process_data
rescue WSProtocolError => e
  fail_websocket(e)
end

- (Object) unbind



63
64
65
66
67
68
69
70
71
72
# File 'lib/em-websocket/handler.rb', line 63

def unbind
  @state = :closed

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

  @connection.trigger_on_close(@close_info)
end