def initialize(url, params = {})
@hs ||= WebSocket::Handshake::Client.new(:url => url)
@frame ||= WebSocket::Frame::Incoming::Server.new(:version => @hs.version)
@socket = TCPSocket.new(@hs.host, @hs.port || 80)
@cert_file = params[:cert_file]
@logger = params[:logger] || PusherClient.logger
if params[:ssl] == true
ctx = OpenSSL::SSL::SSLContext.new
if params[:ssl_verify]
ctx.verify_mode = OpenSSL::SSL::VERIFY_PEER|OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT
ctx.ca_file = @cert_file || CA_FILE
else
ctx.verify_mode = OpenSSL::SSL::VERIFY_NONE
end
ssl_sock = OpenSSL::SSL::SSLSocket.new(@socket, ctx)
ssl_sock.sync_close = true
ssl_sock.connect
@socket = ssl_sock
end
@socket.write(@hs.to_s)
@socket.flush
loop do
data = @socket.getc
next if data.nil?
@hs << data
if @hs.finished?
raise @hs.error.to_s unless @hs.valid?
@handshaked = true
break
end
end
end