diff --git a/src/Client.cs b/src/Client.cs index f6021f4..5a9dbb6 100644 --- a/src/Client.cs +++ b/src/Client.cs @@ -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 { diff --git a/src/TL.cs b/src/TL.cs index 2d49f30..26f1fcd 100644 --- a/src/TL.cs +++ b/src/TL.cs @@ -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: