protected virtual void ClientConnected(object sender, WebSocketConnectedEventArgs e)
        {
            traceLogger.Trace("Socket连接完成通知:" + e.IsSuccess.ToString());
            if (!e.IsSuccess)
            {
                if (retryCount >= MaxRetryCount)
                {
                    //重试失败
                    traceLogger.Trace("重试失败");
                    onConnected(false);

                    retryCount = 0;
                }
                else
                {
                    retryCount++;
                    traceLogger.Trace("重试:{0}", retryCount);
                    Connect(true);
                }
            }
            else
            {
                Session.Session = client.Session;
                if (Session.Session is WebSocketClientSession)
                {
                    WebSocketClientSession clientSession = Session.Session as WebSocketClientSession;
                    clientSession.RemoteIP   = IP;
                    clientSession.RemotePort = Port;
                }

                // 一定不要在Socket数据接收主线程中使用同步发送命令的方法
                ThreadPool.QueueUserWorkItem(new WaitCallback((o) =>
                {
                    try
                    {
                        traceLogger.Trace("开始OnBeforeConnected");
                        IsConnected = OnBeforeConnected();
                        traceLogger.Trace("连接状态:{0}", IsConnected);
                    }
                    catch (Exception ex)
                    {
                        logger.Error("初始化连接出错:{0}", ex.ToString());
                    }

                    if (!IsConnected)
                    {
                        traceLogger.Trace("连接失败,关闭基础连接");
                        Close();
                    }

                    onConnected(IsConnected);
                }), null);


                clearRequestCommands();
            }
        }
Exemple #2
0
        private void UpgradeToWebSocketSession(UpgradedToWebSocketSessionEventArgs eventArgs)
        {
            _httpClientSession = null;

            _webSocketClientSession         = new WebSocketClientSession(_clientSocket, _log);
            _webSocketClientSession.Closed += OnWebSocketClientSessionClosed;

            var webSocketConnectedEventArgs = new WebSocketConnectedEventArgs(eventArgs.HttpRequest, _webSocketClientSession);

            try
            {
                WebSocketConnected?.Invoke(this, webSocketConnectedEventArgs);
            }
            finally
            {
                if (!webSocketConnectedEventArgs.IsHandled)
                {
                    _cancellationTokenSource.Cancel();
                }
            }
        }