public async Task Send(TeleSharp.TL.TLMethod request) { // TODO: refactor if (needConfirmation.Any()) { var ackRequest = new AckRequest(needConfirmation); using (var memory = new MemoryStream()) using (var writer = new BinaryWriter(memory)) { ackRequest.SerializeBody(writer); await Send(memory.ToArray(), ackRequest); needConfirmation.Clear(); } } using (var memory = new MemoryStream()) using (var writer = new BinaryWriter(memory)) { request.SerializeBody(writer); await Send(memory.ToArray(), request); } _session.Save(); }
public async Task Send(TeleSharp.TL.TLMethod request, CancellationToken token = default(CancellationToken)) { token.ThrowIfCancellationRequested(); // TODO: refactor if (needConfirmation.Any()) { var ackRequest = new AckRequest(needConfirmation); using (var memory = new MemoryStream()) using (var writer = new BinaryWriter(memory)) { ackRequest.SerializeBody(writer); await Send(memory.ToArray(), ackRequest, token).ConfigureAwait(false); needConfirmation.Clear(); } } using (var memory = new MemoryStream()) using (var writer = new BinaryWriter(memory)) { request.SerializeBody(writer); await Send(memory.ToArray(), request, token).ConfigureAwait(false); } _session.Save(); }
public async Task Send(TeleSharp.TL.TLMethod request) { using (var memory = new MemoryStream()) using (var writer = new BinaryWriter(memory)) { request.SerializeBody(writer); await Send(memory.ToArray(), request); } _session.Save(); }
public async Task Send(TeleSharp.TL.TLMethod request) { // TODO: refactor if (needConfirmation.Any()) { var ackRequest = new AckRequest(needConfirmation); using (var memory = new MemoryStream()) using (var writer = new BinaryWriter(memory)) { ackRequest.SerializeBody(writer); await Send(memory.ToArray(), ackRequest); needConfirmation.Clear(); } } //using (var memory = new MemoryStream()) //using (var writer = new BinaryWriter(memory)) //{ // request.SerializeBody(writer); // await Send(memory.ToArray(), request); //} TaskCompletionSource <bool> responseSource; using (var memory = new MemoryStream()) using (var writer = new BinaryWriter(memory)) { //var messageId = _session.GetNewMessageId(); //request.MessageId = messageId; //if (request.GetType() == typeof(TeleSharp.TL.TLRequestInvokeWithLayer)) //{ // connectMessageID = messageId; //} request.SerializeBody(writer); request.MessageId = _session.GetNewMessageId(); Debug.WriteLine($"Send request - {request.MessageId}"); responseSource = new TaskCompletionSource <bool>(); runningRequests.Add(request.MessageId, Tuple.Create(request, responseSource)); await Send(memory.ToArray(), request); Debug.WriteLine("sended"); } await responseSource.Task; Debug.WriteLine("complete"); if (runningRequests.ContainsKey(request.MessageId)) { runningRequests.Remove(request.MessageId); } Debug.WriteLine("request removed from queue"); _session.Save(); Debug.WriteLine("session saved"); }