コード例 #1
0
 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
     };
 }
コード例 #2
0
 internal void Reset()
 {
     Disconnect();
     // 重新创建连接组件
     heartBeat = new LCHeartBeat(this, OnDisconnect);
     router    = new LCRTMRouter();
     ws        = new LCWebSocketClient {
         OnMessage = OnMessage,
         OnClose   = OnDisconnect
     };
     _ = Reconnect();
 }
コード例 #3
0
        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;
        }
コード例 #4
0
        /// <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();
        }
コード例 #5
0
        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();
                }
            }
        }
コード例 #6
0
        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();
                }
            }
        }