Class: WebSocket::Client::Simple::Client
- Inherits:
-
Object
- Object
- WebSocket::Client::Simple::Client
- Includes:
- EventEmitter
- Defined in:
- lib/websocket-client-simple/client.rb
Instance Attribute Summary collapse
-
#handshake ⇒ Object
readonly
Returns the value of attribute handshake.
-
#url ⇒ Object
readonly
Returns the value of attribute url.
Instance Method Summary collapse
- #close ⇒ Object
-
#initialize(url, options = {}) ⇒ Client
constructor
A new instance of Client.
- #open? ⇒ Boolean
- #send(data, opt = {:type => :text}) ⇒ Object
Constructor Details
#initialize(url, options = {}) ⇒ Client
Returns a new instance of Client.
13 14 15 16 17 18 19 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 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/websocket-client-simple/client.rb', line 13 def initialize(url, ={}) @url = url uri = URI.parse url @socket = TCPSocket.new(uri.host, uri.port || (uri.scheme == 'wss' ? 443 : 80)) if ['https', 'wss'].include? uri.scheme ctx = OpenSSL::SSL::SSLContext.new ctx.ssl_version = [:ssl_version] || 'SSLv23' @socket = ::OpenSSL::SSL::SSLSocket.new(@socket, ctx) @socket.connect end @handshake = ::WebSocket::Handshake::Client.new :url => url, :headers => [:headers] @handshaked = false frame = ::WebSocket::Frame::Incoming::Client.new @closed = false once :__close do |err| close emit :close, err end @thread = Thread.new do while !@closed do begin unless recv_data = @socket.getc sleep 1 next end unless @handshaked @handshake << recv_data if @handshake.finished? @handshaked = true emit :open end else frame << recv_data while msg = frame.next emit :message, msg end end rescue => e emit :error, e end end end @socket.write @handshake.to_s end |
Instance Attribute Details
#handshake ⇒ Object (readonly)
Returns the value of attribute handshake.
11 12 13 |
# File 'lib/websocket-client-simple/client.rb', line 11 def handshake @handshake end |
#url ⇒ Object (readonly)
Returns the value of attribute url.
11 12 13 |
# File 'lib/websocket-client-simple/client.rb', line 11 def url @url end |
Instance Method Details
#close ⇒ Object
72 73 74 75 76 77 78 79 80 |
# File 'lib/websocket-client-simple/client.rb', line 72 def close return if @closed send nil, :type => :close @closed = true @socket.close if @socket @socket = nil emit :__close Thread.kill @thread if @thread end |
#open? ⇒ Boolean
82 83 84 |
# File 'lib/websocket-client-simple/client.rb', line 82 def open? @handshake.finished? and !@closed end |
#send(data, opt = {:type => :text}) ⇒ Object
61 62 63 64 65 66 67 68 69 70 |
# File 'lib/websocket-client-simple/client.rb', line 61 def send(data, opt={:type => :text}) return if !@handshaked or @closed type = opt[:type] frame = ::WebSocket::Frame::Outgoing::Client.new(:data => data, :type => type, :version => @handshake.version) begin @socket.write frame.to_s rescue Errno::EPIPE => e emit :__close, e end end |