class WebSocket::Driver
Constants
- MAX_LENGTH
- STATES
- UTF8_MATCH
Attributes
protocol[R]
ready_state[R]
Public Class Methods
new(socket, options = {})
click to toggle source
Calls superclass method
WebSocket::Driver::EventEmitter.new
# File lib/websocket/driver.rb, line 59 def initialize(socket, options = {}) super() @socket = socket @options = options @max_length = options[:max_length] || MAX_LENGTH @headers = Headers.new @queue = [] @ready_state = 0 end
Private Class Methods
client(socket, options = {})
click to toggle source
# File lib/websocket/driver.rb, line 121 def self.client(socket, options = {}) Client.new(socket, options.merge(:masking => true)) end
encode(string, encoding = nil)
click to toggle source
# File lib/websocket/driver.rb, line 140 def self.encode(string, encoding = nil) if Array === string string = string.pack('C*') encoding ||= :binary else encoding ||= :utf8 end case encoding when :binary string.force_encoding('ASCII-8BIT') if string.respond_to?(:force_encoding) when :utf8 string.force_encoding('UTF-8') if string.respond_to?(:force_encoding) return nil unless valid_utf8?(string) end string end
rack(socket, options = {})
click to toggle source
# File lib/websocket/driver.rb, line 129 def self.rack(socket, options = {}) env = socket.env if env['HTTP_SEC_WEBSOCKET_VERSION'] Hybi.new(socket, options.merge(:require_masking => true)) elsif env['HTTP_SEC_WEBSOCKET_KEY1'] Draft76.new(socket, options) else Draft75.new(socket, options) end end
server(socket, options = {})
click to toggle source
# File lib/websocket/driver.rb, line 125 def self.server(socket, options = {}) Server.new(socket, options.merge(:require_masking => true)) end
utf8_string(string)
click to toggle source
# File lib/websocket/driver.rb, line 157 def self.utf8_string(string) string = string.pack('C*') if Array === string string.respond_to?(:force_encoding) ? string.force_encoding('UTF-8') : string end
valid_utf8?(string)
click to toggle source
# File lib/websocket/driver.rb, line 164 def self.valid_utf8?(string) if defined?(UTF8_MATCH) UTF8_MATCH =~ string ? true : false else string.valid_encoding? end end
websocket?(env)
click to toggle source
# File lib/websocket/driver.rb, line 172 def self.websocket?(env) connection = env['HTTP_CONNECTION'] || '' upgrade = env['HTTP_UPGRADE'] || '' env['REQUEST_METHOD'] == 'GET' and connection.downcase.split(/\s*,\s*/).include?('upgrade') and upgrade.downcase == 'websocket' end
Public Instance Methods
binary(message)
click to toggle source
# File lib/websocket/driver.rb, line 92 def binary(message) false end
close(reason = nil, code = nil)
click to toggle source
# File lib/websocket/driver.rb, line 100 def close(reason = nil, code = nil) return false unless @ready_state == 1 @ready_state = 3 emit(:close, CloseEvent.new(nil, nil)) true end
ping(*args)
click to toggle source
# File lib/websocket/driver.rb, line 96 def ping(*args) false end
set_header(name, value)
click to toggle source
# File lib/websocket/driver.rb, line 75 def set_header(name, value) return false unless @ready_state <= 0 @headers[name] = value true end
start()
click to toggle source
# File lib/websocket/driver.rb, line 81 def start return false unless @ready_state == 0 @socket.write(Driver.encode(handshake_response, :binary)) open unless @stage == -1 true end
state()
click to toggle source
# File lib/websocket/driver.rb, line 70 def state return nil unless @ready_state >= 0 STATES[@ready_state] end
text(message)
click to toggle source
# File lib/websocket/driver.rb, line 88 def text(message) frame(message) end
Private Instance Methods
open()
click to toggle source
# File lib/websocket/driver.rb, line 109 def open @ready_state = 1 @queue.each { |message| frame(*message) } @queue = [] emit(:open, OpenEvent.new) end
queue(message)
click to toggle source
# File lib/websocket/driver.rb, line 116 def queue(message) @queue << message true end