public LCLiveQueryConnection(string id) { this.id = id; responses = new Dictionary <int, TaskCompletionSource <Dictionary <string, object> > >(); heartBeat = new LCLiveQueryHeartBeat(this, OnPingTimeout); router = new LCRTMRouter(); client = new LCWebSocketClient { OnMessage = OnClientMessage, OnClose = OnClientDisconnect }; }
internal void Reset() { Disconnect(); // 重新创建连接组件 heartBeat = new LCHeartBeat(this, OnDisconnect); router = new LCRTMRouter(); ws = new LCWebSocketClient { OnMessage = OnMessage, OnClose = OnDisconnect }; _ = Reconnect(); }
internal LCConnection(string id) { this.id = id; requestToResponses = new Dictionary <GenericCommand, TaskCompletionSource <GenericCommand> >(new RequestAndResponseComparer()); heartBeat = new LCHeartBeat(this, OnDisconnect); router = new LCRTMRouter(); ws = new LCWebSocketClient { OnMessage = OnMessage, OnClose = OnDisconnect }; idToClients = new Dictionary <string, LCIMClient>(); state = State.None; }
/// <summary> /// Resets connection /// </summary> /// <returns></returns> internal async Task Reset() { heartBeat?.Stop(); // 关闭就连接 await client.Close(); // 重新创建连接组件 heartBeat = new LCLiveQueryHeartBeat(this, OnPingTimeout); router = new LCRTMRouter(); client = new LCWebSocketClient { OnMessage = OnClientMessage, OnClose = OnClientDisconnect }; await Reconnect(); }
private async Task Reconnect() { while (true) { int reconnectCount = 0; // 重连策略 while (reconnectCount < MAX_RECONNECT_TIMES) { try { LCLogger.Debug($"Reconnecting... {reconnectCount}"); await Connect(); break; } catch (Exception e) { reconnectCount++; LCLogger.Error(e); LCLogger.Debug($"Reconnect after {RECONNECT_INTERVAL}ms"); await Task.Delay(RECONNECT_INTERVAL); } } if (reconnectCount < MAX_RECONNECT_TIMES) { // 重连成功 LCLogger.Debug("Reconnected"); ws.OnMessage = OnMessage; ws.OnClose = OnDisconnect; foreach (LCIMClient client in idToClients.Values) { client.HandleReconnected(); } break; } else { // 重置 Router,继续尝试重连 router = new LCRTMRouter(); } } }
private async Task Reconnect() { while (true) { int reconnectCount = 0; // 重连策略 while (reconnectCount < MAX_RECONNECT_TIMES) { try { LCLogger.Debug($"Reconnecting... {reconnectCount}"); await Connect(); break; } catch (Exception e) { reconnectCount++; LCLogger.Error(e); LCLogger.Debug($"Reconnect after {RECONNECT_INTERVAL}ms"); await Task.Delay(RECONNECT_INTERVAL); } } if (reconnectCount < MAX_RECONNECT_TIMES) { // 重连成功 LCLogger.Debug("Reconnected"); client.OnMessage = OnClientMessage; client.OnClose = OnClientDisconnect; OnReconnected?.Invoke(); break; } else { // 重置 Router,继续尝试重连 router = new LCRTMRouter(); } } }