OpenTl.ClientApi
OpenTl.ClientApi copied to clipboard
Application crash due unhandled exception in DotNetty when network gets disconnected
I got the following Exception
which let my application crash:
To get this Exception
, you have to deactivate your network device during an established connection.
AppDomain.CurrentDomain.UnhandledException += (sender, args) => CurrentDomainOnUnhandledException(args);
How can I catch this Exception
and won't let the app crash?
Unhandled Exception thrown: Message 'Eine vorhandene Verbindung wurde vom Remotehost geschlossen' StackTrace ' bei DotNetty.Transport.Channels.Sockets.SocketChannelAsyncOperation.Validate() bei DotNetty.Transport.Channels.Sockets.AbstractSocketByteChannel.SocketByteChannelUnsafe.FinishRead(SocketChannelAsyncOperation operation) --- Ende der Stapelüberwachung vom vorhergehenden Ort, an dem die Ausnahme ausgelöst wurde --- bei System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) bei System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) --- Ende der Stapelüberwachung vom vorhergehenden Ort, an dem die Ausnahme ausgelöst wurde --- bei OpenTl.ClientApi.MtProto.Services.RequestSenderService.<SendRequestAsync>d__12
1.MoveNext() bei System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) bei OpenTl.ClientApi.MtProto.Services.RequestSenderService.<SendRequestAsync>d__12
1.MoveNext() --- Ende der Stapelüberwachung vom vorhergehenden Ort, an dem die Ausnahme ausgelöst wurde --- bei System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) bei System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) --- Ende der Stapelüberwachung vom vorhergehenden Ort, an dem die Ausnahme ausgelöst wurde --- bei System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) bei OpenTl.ClientApi.Services.UpdatesService.<GetUpdatesFromState>d__11.MoveNext() bei System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) bei OpenTl.ClientApi.Services.UpdatesService.<GetUpdatesFromState>d__11.MoveNext() --- Ende der Stapelüberwachung vom vorhergehenden Ort, an dem die Ausnahme ausgelöst wurde --- bei System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) bei System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) bei OpenTl.ClientApi.Services.UpdatesService.<<StartReceiveUpdates>b__12_0>d.MoveNext() --- Ende der Stapelüberwachung vom vorhergehenden Ort, an dem die Ausnahme ausgelöst wurde --- bei System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) bei System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) bei OpenTl.ClientApi.Services.UpdatesService.<<StartReceiveUpdates>b__12_0>d.MoveNext() --- Ende der Stapelüberwachung vom vorhergehenden Ort, an dem die Ausnahme ausgelöst wurde --- bei System.Runtime.CompilerServices.AsyncMethodBuilderCore.<>c.<ThrowAsync>b__6_1(Object state) bei System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state) bei System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) bei System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem() bei System.Threading.ThreadPoolWorkQueue.Dispatch() bei System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()'
log4net Log
2018-11-20 14:32:40,437 [14] ERROR OpenTl.ClientApi.MtProto.Layers.Top.Adapters.TopHandlerAdapter.ErrorExt - #5244012236128623456: Caught exception System.Net.Sockets.SocketException (0x80004005): Eine vorhandene Verbindung wurde vom Remotehost geschlossen bei DotNetty.Transport.Channels.Sockets.SocketChannelAsyncOperation.Validate() bei DotNetty.Transport.Channels.Sockets.AbstractSocketByteChannel.SocketByteChannelUnsafe.FinishRead(SocketChannelAsyncOperation operation) 2018-11-20 14:32:40,454 [14] ERROR OpenTl.ClientApi.MtProto.Services.RequestService.ReturnException - #5244012236128623456: All requests was processed with error System.Net.Sockets.SocketException (0x80004005): Eine vorhandene Verbindung wurde vom Remotehost geschlossen bei DotNetty.Transport.Channels.Sockets.SocketChannelAsyncOperation.Validate() bei DotNetty.Transport.Channels.Sockets.AbstractSocketByteChannel.SocketByteChannelUnsafe.FinishRead(SocketChannelAsyncOperation operation)
@dojo90 Remote host forcibly closed connection. check the ip-address and port of the telegram server
Thanks for reply! The Adress is alright. I closed the connection myself to provoke the error. Due to the forced connection close of my Internetproviders I get the same exception.
@dojo90 can you send me a test with an error?
I have used your SampleApp with the following code:
private static FactorySettings settings = new FactorySettings
{
AppHash = "xxxxxxxxxxxxxx",
AppId = xxxxxxxxxxxxxx,
ServerAddress = "149.154.167.50",
ServerPublicKey =
"-----BEGIN RSA PUBLIC KEY-----\nMIIBCgKCAQEAwVACPi9w23mF3tBkdZz+zwrzKOaaQdr01vAbU4E1pvkfj4sqDsm6\nlyDONS789sVoD/xCS9Y0hkkC3gtL1tSfTlgCMOOul9lcixlEKzwKENj1Yz/s7daS\nan9tqw3bfUV/nqgbhGX81v/+7RFAEd+RwFnK7a+XYl9sluzHRyVVaTTveB2GazTw\nEfzk2DWgkBluml8OREmvfraX3bkHZJTKX4EQSjBbbdJ2ZXIsRrYOXfaA+xayEGB+\n8hdlLmAjbCVfaigxX0CDqWeR1yFL9kwd9P0NsZRPsmoqVwMbMu7mStFai6aIhc3n\nSlv8kg9qv1m6XHVQY3PnEw+QQtqSIXklHwIDAQAB\n-----END RSA PUBLIC KEY-----",
ServerPort = 443,
SessionTag = "foo",
Properties = new ApplicationProperties
{
AppVersion = "1.0.0", // You can leave as in the example
DeviceModel = "PC", // You can leave as in the example
LangCode = "en", // You can leave as in the example
LangPack = "tdesktop", // You can leave as in the example
SystemLangCode = "en", // You can leave as in the example
SystemVersion = "Win 10 Pro" // You can leave as in the example
}
};
private static async Task Main(string[] args)
{
IClientApi ClientApi = await ClientFactory.BuildClientAsync(settings).ConfigureAwait(false);
// If the user is not authenticated
if (!ClientApi.AuthService.CurrentUserId.HasValue)
{
// Auth
var sentCode = await ClientApi.AuthService.SendCodeAsync("+xxxxxxxxxxxxxx").ConfigureAwait(false);
try
{
var code = Console.ReadLine();
await ClientApi.AuthService.SignInAsync("+xxxxxxxxxxxxxx", sentCode, code).ConfigureAwait(false);
}
catch (Exception ex)
{
}
}
if (ClientApi.AuthService.CurrentUserId.HasValue)
{
ClientApi.UpdatesService.StartReceiveUpdates(TimeSpan.FromSeconds(1));
ClientApi.UpdatesService.AutoReceiveUpdates += update => Console.WriteLine(update);
}
Console.ReadKey();
}
Just fill in your credentials. Then let it connect and receive updates (you cann see it in console). Then remove the cable from your network device, wait 2 seconds and plugin again:
any updates on this issue?