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(); } }
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(); } } }