Merge pull request #256 from knocte/improveExceptionHandlingForPhoneMigrateX

Improve exception handling
This commit is contained in:
Ilya Pirozhenko 2016-10-23 10:56:19 +03:00 committed by GitHub
commit 92e5bb32d5
2 changed files with 14 additions and 12 deletions

View file

@ -279,9 +279,7 @@ namespace TLSharp.Core.Network
{
var resultString = Regex.Match(errorMessage, @"\d+").Value;
var dcIdx = int.Parse(resultString);
var exception = new InvalidOperationException($"Your phone number registered to {dcIdx} dc. Please update settings. See https://github.com/sochix/TLSharp#i-get-an-error-migrate_x for details.");
exception.Data.Add("dcId", dcIdx);
throw exception;
throw new MigrationNeededException(dcIdx);
}
else
{
@ -484,4 +482,15 @@ namespace TLSharp.Core.Network
return new MemoryStream(new byte[len], 0, len, true, true);
}
}
internal class MigrationNeededException : Exception
{
internal int DC { get; private set; }
internal MigrationNeededException(int dc)
: base ("$Your phone number is registered to a different dc: {dc}. Please migrate.")
{
DC = dc;
}
}
}

View file

@ -110,16 +110,9 @@ namespace TLSharp.Core
completed = true;
}
catch (InvalidOperationException ex)
catch (MigrationNeededException ex)
{
if (ex.Message.StartsWith("Your phone number registered to") && ex.Data["dcId"] != null)
{
await ReconnectToDcAsync((int)ex.Data["dcId"]);
}
else
{
throw;
}
await ReconnectToDcAsync(ex.DC);
}
}