mirror of
https://github.com/wiz0u/WTelegramClient.git
synced 2026-04-05 06:25:30 +00:00
Correctly handle RPC Error for methods returning bool.
Also don't hang CallAsync on ReadRpcResult deserializing error
This commit is contained in:
parent
95d9135bd0
commit
f289b9e2e5
2 changed files with 19 additions and 10 deletions
|
|
@ -699,18 +699,26 @@ namespace WTelegram
|
|||
object result;
|
||||
if (tcs != null)
|
||||
{
|
||||
if (!type.IsArray)
|
||||
result = reader.ReadTLValue(type);
|
||||
else if (reader.ReadUInt32() == Layer.RpcErrorCtor)
|
||||
result = reader.ReadTLObject(Layer.RpcErrorCtor);
|
||||
else
|
||||
try
|
||||
{
|
||||
reader.BaseStream.Position -= 4;
|
||||
result = reader.ReadTLValue(type);
|
||||
if (!type.IsArray)
|
||||
result = reader.ReadTLValue(type);
|
||||
else if (reader.ReadUInt32() == Layer.RpcErrorCtor)
|
||||
result = reader.ReadTLObject(Layer.RpcErrorCtor);
|
||||
else
|
||||
{
|
||||
reader.BaseStream.Position -= 4;
|
||||
result = reader.ReadTLValue(type);
|
||||
}
|
||||
if (type.IsEnum) result = Enum.ToObject(type, result);
|
||||
Log(1, "");
|
||||
tcs.SetResult(result);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
tcs.SetException(ex);
|
||||
throw;
|
||||
}
|
||||
if (type.IsEnum) result = Enum.ToObject(type, result);
|
||||
Log(1, "");
|
||||
tcs.SetResult(result);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
|
|
@ -130,6 +130,7 @@ namespace TL
|
|||
{
|
||||
0x997275b5 => true,
|
||||
0xbc799737 => false,
|
||||
Layer.RpcErrorCtor => reader.ReadTLObject(Layer.RpcErrorCtor),
|
||||
var value => throw new ApplicationException($"Invalid boolean value #{value:x}")
|
||||
};
|
||||
case TypeCode.Object:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue