internal WebSocketContext RegisterNewWebSocket(
            Socket clientSocket,
            string initUrl,
            string sec_websocket_key,
            string sec_websocket_extensions)
        {
            PlainWebSocketConn wbcontext = new PlainWebSocketConn(false);
            var wbCtx = new WebSocketContext(wbcontext);

            wbCtx.InitClientRequestUrl = initUrl;
            AssignWebSocketExtensions(wbCtx, sec_websocket_extensions);

            _workingWebSocketConns.Add(wbcontext.ConnectionId, wbCtx);                                            //add to working socket
            wbcontext.InitClientRequestUrl = initUrl;
            wbcontext.Bind(clientSocket, MakeWebSocketUpgradeResponse(MakeResponseMagicCode(sec_websocket_key))); //move client socket to webSocketConn
            _newContextConnected?.Invoke(wbCtx);
            return(wbCtx);
        }
            public void Connect(string url)
            {
                var plainWsConn = new PlainWebSocketConn(true);

                plainWsConn.Compression = this.Compression;
                plainWsConn.SetMessageHandler(_websocketHandler);
                _wbsocketConn = plainWsConn;

                Uri uri = new Uri(url);

                InitClientSocket(uri);

                _clientSocket.Connect(_hostIP, uri.Port);
                //create http webreq

                StringBuilder stbuilder = CreateWebSocketUpgradeReq(uri.AbsolutePath, uri.AbsolutePath + ":" + uri.Port, plainWsConn.Compression);

                byte[] dataToSend = Encoding.ASCII.GetBytes(stbuilder.ToString());
                //****
                //add event listener to our socket
                plainWsConn.Bind(_clientSocket, dataToSend);
            }