Class: WebSocket::Driver::Draft76

Inherits:
Draft75 show all
Defined in:
lib/websocket/driver/draft76.rb

Constant Summary collapse

BODY_SIZE =
8

Constants inherited from WebSocket::Driver

BINARY, ConfigurationError, MAX_LENGTH, ProtocolError, STATES, UNICODE, URIError

Instance Attribute Summary

Attributes inherited from WebSocket::Driver

#protocol, #ready_state

Instance Method Summary collapse

Methods inherited from Draft75

#frame, #parse

Methods inherited from WebSocket::Driver

#add_extension, #binary, #ping, #pong, #set_header, #state, #text

Methods included from EventEmitter

#add_listener, #emit, #listener_count, #listeners, #on, #remove_all_listeners, #remove_listener

Constructor Details

#initialize(socket, options = {}) ⇒ Draft76

Returns a new instance of Draft76.



7
8
9
10
11
12
13
14
15
16
17
18
# File 'lib/websocket/driver/draft76.rb', line 7

def initialize(socket, options = {})
  super
  input  = @socket.env['rack.input']
  @stage = -1
  @body  = (input ? input.read : String.new('')).force_encoding(BINARY)

  @headers.clear
  @headers['Upgrade'] = 'WebSocket'
  @headers['Connection'] = 'Upgrade'
  @headers['Sec-WebSocket-Origin'] = @socket.env['HTTP_ORIGIN']
  @headers['Sec-WebSocket-Location'] = @socket.url
end

Instance Method Details

#close(reason = nil, code = nil) ⇒ Object



30
31
32
33
34
35
36
# File 'lib/websocket/driver/draft76.rb', line 30

def close(reason = nil, code = nil)
  return false if @ready_state == 3
  @socket.write([0xFF, 0x00].pack('C*'))
  @ready_state = 3
  emit(:close, CloseEvent.new(nil, nil))
  true
end

#startObject



24
25
26
27
28
# File 'lib/websocket/driver/draft76.rb', line 24

def start
  return false unless super
  send_handshake_body
  true
end

#versionObject



20
21
22
# File 'lib/websocket/driver/draft76.rb', line 20

def version
  'hixie-76'
end