コード例 #1
0
        private async Task StartRecievingTask(CancellationToken cancellationToken)
        {
            while (!cancellationToken.IsCancellationRequested)
            {
                try
                {
                    var recieveData = await TcpTransport.Receieve().ConfigureAwait(false);

                    var decodedData = DecodeMessage(recieveData);

                    Log.Debug($"Receive message with remote id: {decodedData.Item2}");

                    ProcessReceivedMessage(decodedData.Item1);

                    ConfirmationSendService.AddForSend(decodedData.Item2);
                }
                catch (Exception e)
                {
                    Log.Error("Receive message failed. Reconnecting", e);

                    var request = new RequestInvokeWithLayer
                    {
                        Layer = SchemaInfo.SchemaVersion,
                        Query = new RequestInitConnection
                        {
                            ApiId          = ClientSettings.AppId,
                            AppVersion     = "1.0.0",
                            DeviceModel    = "PC",
                            LangCode       = "en",
                            LangPack       = "tdesktop",
                            Query          = new RequestGetConfig(),
                            SystemLangCode = "en",
                            SystemVersion  = "Win 10.0"
                        }
                    };

                    try
                    {
                        await TcpTransport.Disconnect().ConfigureAwait(false);

                        var sendTask = await Sender.SendWithConfim(request).ConfigureAwait(false);

                        ResponseResultGetter.Receive(sendTask.Item2).ContinueWith(
                            async task =>
                        {
                            await sendTask.Item1.ConfigureAwait(false);
                        });
                    }
                    catch
                    {
                        Log.Error("Failed to reconnect", e);
                    }
                }
            }
        }