mirror of
https://github.com/sochix/TLSharp.git
synced 2025-12-06 08:02:00 +01:00
First update event attempt.
This commit is contained in:
parent
a69db6ba27
commit
a4a5ae4a2e
|
|
@ -21,6 +21,10 @@ namespace TLSharp.Core.Network
|
|||
private TcpTransport _transport;
|
||||
private Session _session;
|
||||
|
||||
public delegate void HandleUpdates (TeleSharp.TL.TLAbsUpdates updates);
|
||||
|
||||
public event HandleUpdates UpdatesEvent;
|
||||
|
||||
public List<ulong> needConfirmation = new List<ulong>();
|
||||
|
||||
public MtProtoSender(TcpTransport transport, Session session)
|
||||
|
|
@ -141,7 +145,7 @@ namespace TLSharp.Core.Network
|
|||
using (var messageStream = new MemoryStream(result.Item1, false))
|
||||
using (var messageReader = new BinaryReader(messageStream))
|
||||
{
|
||||
processMessage(result.Item2, result.Item3, messageReader, request);
|
||||
await processMessage(result.Item2, result.Item3, messageReader, request);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -161,7 +165,7 @@ namespace TLSharp.Core.Network
|
|||
await Receive(pingRequest);
|
||||
}
|
||||
|
||||
private bool processMessage(ulong messageId, int sequence, BinaryReader messageReader, TeleSharp.TL.TLMethod request)
|
||||
private async Task<bool> processMessage(ulong messageId, int sequence, BinaryReader messageReader, TeleSharp.TL.TLMethod request)
|
||||
{
|
||||
// TODO: check salt
|
||||
// TODO: check sessionid
|
||||
|
|
@ -176,7 +180,7 @@ namespace TLSharp.Core.Network
|
|||
{
|
||||
case 0x73f1f8dc: // container
|
||||
//logger.debug("MSG container");
|
||||
return HandleContainer(messageId, sequence, messageReader, request);
|
||||
return await HandleContainer(messageId, sequence, messageReader, request);
|
||||
case 0x7abe77ec: // ping
|
||||
//logger.debug("MSG ping");
|
||||
return HandlePing(messageId, sequence, messageReader);
|
||||
|
|
@ -206,46 +210,71 @@ namespace TLSharp.Core.Network
|
|||
return HandleRpcResult(messageId, sequence, messageReader, request);
|
||||
case 0x3072cfa1: // gzip_packed
|
||||
//logger.debug("MSG gzip_packed");
|
||||
return HandleGzipPacked(messageId, sequence, messageReader, request);
|
||||
return await HandleGzipPacked(messageId, sequence, messageReader, request);
|
||||
case 0xe317af7e:
|
||||
case 0xd3f45784:
|
||||
case 0x2b2fbd4e:
|
||||
case 0x78d4dec1:
|
||||
case 0x725b04c3:
|
||||
case 0x74ae4240:
|
||||
return HandleUpdate(messageId, sequence, messageReader);
|
||||
return await HandleUpdate(messageId, sequence, messageReader, request);
|
||||
default:
|
||||
//logger.debug("unknown message: {0}", code);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private bool HandleUpdate(ulong messageId, int sequence, BinaryReader messageReader)
|
||||
private async Task<bool> HandleUpdate(ulong messageId, int sequence, BinaryReader messageReader, TeleSharp.TL.TLMethod request)
|
||||
{
|
||||
return false;
|
||||
|
||||
/*
|
||||
try
|
||||
{
|
||||
UpdatesEvent(TL.Parse<Updates>(messageReader));
|
||||
return true;
|
||||
var update = ParseUpdate (messageId, messageReader);
|
||||
if (update != null && UpdatesEvent != null)
|
||||
UpdatesEvent(update);
|
||||
await Receive (request);
|
||||
}
|
||||
catch (Exception e)
|
||||
catch
|
||||
{
|
||||
logger.warning("update processing exception: {0}", e);
|
||||
return false;
|
||||
}
|
||||
*/
|
||||
return false;
|
||||
}
|
||||
|
||||
private bool HandleGzipPacked(ulong messageId, int sequence, BinaryReader messageReader, TeleSharp.TL.TLMethod request)
|
||||
private TeleSharp.TL.TLAbsUpdates ParseUpdate(ulong messageId, BinaryReader messageReader)
|
||||
{
|
||||
switch (messageId)
|
||||
{
|
||||
case 0xe317af7e:
|
||||
return DecodeUpdate<TeleSharp.TL.TLUpdatesTooLong>(messageReader);
|
||||
case 0xd3f45784:
|
||||
return DecodeUpdate<TeleSharp.TL.TLUpdateShortMessage> (messageReader);
|
||||
case 0x2b2fbd4e:
|
||||
return DecodeUpdate<TeleSharp.TL.TLUpdateShortChatMessage> (messageReader);
|
||||
case 0x78d4dec1:
|
||||
return DecodeUpdate<TeleSharp.TL.TLUpdateShort> (messageReader);
|
||||
case 0x725b04c3:
|
||||
return DecodeUpdate<TeleSharp.TL.TLUpdatesCombined> (messageReader);
|
||||
case 0x74ae4240:
|
||||
return DecodeUpdate<TeleSharp.TL.TLUpdates> (messageReader);
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private TeleSharp.TL.TLAbsUpdates DecodeUpdate<T>(BinaryReader messageReader) where T: TeleSharp.TL.TLAbsUpdates, new()
|
||||
{
|
||||
var update = new T ();
|
||||
update.DeserializeBody (messageReader);
|
||||
return update;
|
||||
}
|
||||
|
||||
private async Task<bool> HandleGzipPacked(ulong messageId, int sequence, BinaryReader messageReader, TeleSharp.TL.TLMethod request)
|
||||
{
|
||||
uint code = messageReader.ReadUInt32();
|
||||
byte[] packedData = GZipStream.UncompressBuffer(Serializers.Bytes.read(messageReader));
|
||||
using (MemoryStream packedStream = new MemoryStream(packedData, false))
|
||||
using (BinaryReader compressedReader = new BinaryReader(packedStream))
|
||||
{
|
||||
processMessage(messageId, sequence, compressedReader, request);
|
||||
await processMessage(messageId, sequence, compressedReader, request);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
|
@ -496,7 +525,7 @@ namespace TLSharp.Core.Network
|
|||
return false;
|
||||
}
|
||||
|
||||
private bool HandleContainer(ulong messageId, int sequence, BinaryReader messageReader, TeleSharp.TL.TLMethod request)
|
||||
private async Task<bool> HandleContainer(ulong messageId, int sequence, BinaryReader messageReader, TeleSharp.TL.TLMethod request)
|
||||
{
|
||||
uint code = messageReader.ReadUInt32();
|
||||
int size = messageReader.ReadInt32();
|
||||
|
|
@ -508,12 +537,12 @@ namespace TLSharp.Core.Network
|
|||
long beginPosition = messageReader.BaseStream.Position;
|
||||
try
|
||||
{
|
||||
if (!processMessage(innerMessageId, sequence, messageReader, request))
|
||||
if (!await processMessage(innerMessageId, sequence, messageReader, request))
|
||||
{
|
||||
messageReader.BaseStream.Position = beginPosition + innerLength;
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
catch (Exception)
|
||||
{
|
||||
// logger.error("failed to process message in contailer: {0}", e);
|
||||
messageReader.BaseStream.Position = beginPosition + innerLength;
|
||||
|
|
|
|||
|
|
@ -30,6 +30,10 @@ namespace TLSharp.Core
|
|||
private List<TLDcOption> dcOptions;
|
||||
private TcpClientConnectionHandler _handler;
|
||||
|
||||
public delegate void UpdatesEvent (TelegramClient source, TLAbsUpdates updates);
|
||||
|
||||
public event UpdatesEvent Updates;
|
||||
|
||||
public Session Session { get { return _session; } }
|
||||
|
||||
public TelegramClient(int apiId, string apiHash,
|
||||
|
|
@ -59,6 +63,7 @@ namespace TLSharp.Core
|
|||
}
|
||||
|
||||
_sender = new MtProtoSender(_transport, _session);
|
||||
_sender.UpdatesEvent += _sender_UpdatesEvent;
|
||||
|
||||
//set-up layer
|
||||
var config = new TLRequestGetConfig();
|
||||
|
|
@ -108,6 +113,11 @@ namespace TLSharp.Core
|
|||
}
|
||||
}
|
||||
|
||||
private void _sender_UpdatesEvent (TLAbsUpdates updates)
|
||||
{
|
||||
Updates (this, updates);
|
||||
}
|
||||
|
||||
private async Task RequestWithDcMigration(TLMethod request)
|
||||
{
|
||||
var completed = false;
|
||||
|
|
|
|||
Loading…
Reference in a new issue