private void onOpenHandshakeResponse(byte[] data, int size)
        {
            if (!(parser != null))
            {
                return;
            }
            if (size < 1)
            {
                var c = getOnErrorCallback();
                if (c != null)
                {
                    c();
                }
                return;
            }
            parser.onDataReceived(data, (long)size);
            if (!parser.getEndOfResponse())
            {
                return;
            }
            var headers = parser.headers;

            parser.reset();
            parser = null;
            var statusCode = headers.getHttpStatus();

            if (object.Equals(statusCode, "101"))
            {
                if (cape.String.equalsIgnoreCase("websocket", headers.getHeader("upgrade")) == false)
                {
                    var c1 = getOnErrorCallback();
                    if (c1 != null)
                    {
                        c1();
                    }
                    return;
                }
                else if (cape.String.equalsIgnoreCase("websocket", headers.getHeader("upgrade")) == false)
                {
                    var c2 = getOnErrorCallback();
                    if (c2 != null)
                    {
                        c2();
                    }
                    return;
                }
                else if (cape.String.equalsIgnoreCase("upgrade", headers.getHeader("connection")) == false)
                {
                    var c3 = getOnErrorCallback();
                    if (c3 != null)
                    {
                        c3();
                    }
                    return;
                }
                else if (cape.String.equals(accept, headers.getHeader("sec-websocket-accept")) == false)
                {
                    var c4 = getOnErrorCallback();
                    if (c4 != null)
                    {
                        c4();
                    }
                    return;
                }
                client.receive((byte[] d, int sz) => {
                    if (processData(d, sz) == false)
                    {
                        var c5 = getOnCloseCallback();
                        if (c5 != null)
                        {
                            c5((capex.net.WSCloseEvent) new capex.net.WSSocketGeneric.MyWSCloseEvent().setStatusCode(capex.net.WSCloseEvent.CLOSE_ABNORMAL));
                        }
                    }
                });
                var c6 = getOnOpenCallback();
                if (c6 != null)
                {
                    c6();
                }
                return;
            }
            var c7 = getOnErrorCallback();

            if (c7 != null)
            {
                c7();
            }
        }
        public override void connect(string url, string protocols)
        {
            if (client != null)
            {
                client.disconnect((cape.Error de) => {
                    var c = getOnErrorCallback();
                    if (c != null)
                    {
                        c();
                    }
                });
                client = null;
            }
            client = capex.net.TCPClient.instance();
            if (!(client != null))
            {
                var c1 = getOnErrorCallback();
                if (c1 != null)
                {
                    c1();
                }
                return;
            }
            var u = cape.URL.forString(url);

            if (!(u != null))
            {
                var c2 = getOnErrorCallback();
                if (c2 != null)
                {
                    c2();
                }
                return;
            }
            var port = u.getPortInt();

            if (port < 1)
            {
                port = 80;
            }
            client.connect(u.getHost(), port, (cape.Error e) => {
                if (!(e != null))
                {
                    parser = new capex.net.WSSocketGeneric.HTTPResponseParser();
                    client.receive((byte[] data, int size) => {
                        onOpenHandshakeResponse(data, size);
                    });
                    var v = capex.net.WSSocketGeneric.WSHelper.createOpenHandshakeHTTPRequest(u, key);
                    client.send(v, v.Length, (cape.Error oe) => {
                        if (!(oe != null))
                        {
                            return;
                        }
                        client.disconnect((cape.Error de2) => {
                            var c3 = getOnErrorCallback();
                            if (c3 != null)
                            {
                                c3();
                            }
                        });
                    });
                    return;
                }
                var c4 = getOnErrorCallback();
                if (c4 != null)
                {
                    c4();
                }
            });
        }