diff --git a/Gemfile.lock b/Gemfile.lock index a8d88b6..b90ebb8 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -33,4 +33,4 @@ DEPENDENCIES websocket-eventmachine-server BUNDLED WITH - 1.11.2 + 1.17.3 diff --git a/lib/websocket-client-simple/client.rb b/lib/websocket-client-simple/client.rb index 128f523..a97bc19 100644 --- a/lib/websocket-client-simple/client.rb +++ b/lib/websocket-client-simple/client.rb @@ -11,7 +11,7 @@ def self.connect(url, options={}) class Client include EventEmitter - attr_reader :url, :handshake + attr_reader :url, :handshake, :message def connect(url, options={}) return if @socket @@ -19,6 +19,7 @@ def connect(url, options={}) uri = URI.parse url @socket = TCPSocket.new(uri.host, uri.port || (uri.scheme == 'wss' ? 443 : 80)) + @socket.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1) if ['https', 'wss'].include? uri.scheme ctx = OpenSSL::SSL::SSLContext.new ctx.ssl_version = options[:ssl_version] || 'SSLv23' @@ -27,6 +28,7 @@ def connect(url, options={}) cert_store.set_default_paths ctx.cert_store = cert_store @socket = ::OpenSSL::SSL::SSLSocket.new(@socket, ctx) + @socket.hostname = uri.host @socket.connect end @handshake = ::WebSocket::Handshake::Client.new :url => url, :headers => options[:headers] @@ -55,6 +57,7 @@ def connect(url, options={}) else frame << recv_data while msg = frame.next + @message = msg emit :message, msg end end @@ -76,6 +79,9 @@ def send(data, opt={:type => :text}) rescue Errno::EPIPE => e @pipe_broken = true emit :__close, e + rescue OpenSSL::SSL::SSLError => e + @pipe_broken = true + emit :__close, e end end @@ -95,6 +101,10 @@ def open? @handshake.finished? and !@closed end + def close? + @closed + end + end end diff --git a/lib/websocket-client-simple/version.rb b/lib/websocket-client-simple/version.rb index 3caf775..e8b2573 100644 --- a/lib/websocket-client-simple/version.rb +++ b/lib/websocket-client-simple/version.rb @@ -1,7 +1,7 @@ module WebSocket module Client module Simple - VERSION = "0.3.0" + VERSION = "0.3.4" end end end diff --git a/websocket-client-simple.gemspec b/websocket-client-simple.gemspec index 73866d6..b60f05b 100644 --- a/websocket-client-simple.gemspec +++ b/websocket-client-simple.gemspec @@ -18,11 +18,11 @@ Gem::Specification.new do |spec| spec.require_paths = ["lib"] spec.add_development_dependency "bundler", "~> 1.3" - spec.add_development_dependency "rake" - spec.add_development_dependency "minitest" - spec.add_development_dependency "websocket-eventmachine-server" - spec.add_development_dependency "eventmachine" + spec.add_development_dependency "rake", "~> 12.3.2" + spec.add_development_dependency "minitest", "~> 5.11.3" + spec.add_development_dependency "websocket-eventmachine-server", ">= 0" + spec.add_development_dependency "eventmachine", "~> 1.2.7" - spec.add_dependency "websocket" - spec.add_dependency "event_emitter" + spec.add_dependency "websocket", "~> 1.2.8" + spec.add_dependency "event_emitter", "~> 0.2.6" end