Пример #1
0
        public void HttpWaitAsync(TLInt maxDelay, TLInt waitAfter, TLInt maxWait, Action callback, Action faultCallback)
        {
            PrintCaption("http_wait");

            var obj = new TLHttpWait {
                MaxDelay = maxDelay, WaitAfter = waitAfter, MaxWait = maxWait
            };

            var authKey   = _activeTransport.AuthKey;
            var salt      = _activeTransport.Salt;
            var sessionId = _activeTransport.SessionId;

            int    sequenceNumber;
            TLLong messageId;

            lock (_activeTransportRoot)
            {
                sequenceNumber = _activeTransport.SequenceNumber * 2;
                messageId      = _activeTransport.GenerateMessageId(true);
            }
            var transportMessage = CreateTLTransportMessage(salt, sessionId, new TLInt(sequenceNumber), messageId, obj);
            var encryptedMessage = CreateTLEncryptedMessage(authKey, transportMessage);

            lock (_activeTransportRoot)
            {
                if (_activeTransport.Closed)
                {
                    _activeTransport = GetTransport(_activeTransport.Host, _activeTransport.Port, Type,
                                                    new TransportSettings
                    {
                        DcId                  = _activeTransport.DCId,
                        Secret                = _activeTransport.Secret,
                        AuthKey               = _activeTransport.AuthKey,
                        Salt                  = _activeTransport.Salt,
                        SessionId             = _activeTransport.SessionId,
                        MessageIdDict         = _activeTransport.MessageIdDict,
                        SequenceNumber        = _activeTransport.SequenceNumber,
                        ClientTicksDelta      = _activeTransport.ClientTicksDelta,
                        PacketReceivedHandler = OnPacketReceived
                    });
                }
            }

            SendPacketAsync(_activeTransport, "http_wait " + transportMessage.MessageId, encryptedMessage,
                            result =>
            {
                //try
                //{
                //    ReceiveBytesAsync(result, authKey);
                //}
                //catch (Exception e)
                //{
                //    TLUtils.WriteException(e);
                //}
                //finally
                //{
                //    callback();
                //}
            },
                            error => faultCallback.SafeInvoke());
        }
Пример #2
0
        public void HttpWaitAsync(int maxDelay, int waitAfter, int maxWait, Action callback, Action faultCallback)
        {
            PrintCaption("http_wait");

            var obj = new TLHttpWait {
                MaxDelay = maxDelay, WaitAfter = waitAfter, MaxWait = maxWait
            };

            var authKey   = _activeTransport.AuthKey;
            var salt      = _activeTransport.Salt;
            var sessionId = _activeTransport.SessionId;

            int  sequenceNumber;
            long messageId;

            lock (_activeTransportRoot)
            {
                sequenceNumber = _activeTransport.SequenceNumber * 2;
                messageId      = _activeTransport.GenerateMessageId(true);
            }
            var transportMessage = CreateTLTransportMessage(salt ?? 0, sessionId ?? 0, sequenceNumber, messageId, obj);
            var encryptedMessage = CreateTLEncryptedMessage(authKey, transportMessage);

            lock (_activeTransportRoot)
            {
                if (_activeTransport.Closed)
                {
                    var  transportDCId             = _activeTransport.DCId;
                    var  transportKey              = _activeTransport.AuthKey;
                    var  transportSalt             = _activeTransport.Salt;
                    var  transportSessionId        = _activeTransport.SessionId;
                    var  transportSequenceNumber   = _activeTransport.SequenceNumber;
                    var  transportClientTicksDelta = _activeTransport.ClientTicksDelta;
                    bool isCreated;
                    _activeTransport = _transportService.GetTransport(_activeTransport.Host, _activeTransport.Port, Type, out isCreated);
                    if (isCreated)
                    {
                        _activeTransport.DCId             = transportDCId;
                        _activeTransport.AuthKey          = transportKey;
                        _activeTransport.Salt             = transportSalt;
                        _activeTransport.SessionId        = transportSessionId;
                        _activeTransport.SequenceNumber   = transportSequenceNumber;
                        _activeTransport.ClientTicksDelta = transportClientTicksDelta;
                        _activeTransport.PacketReceived  += OnPacketReceived;
                    }
                }
            }

            SendPacketAsync(_activeTransport, "http_wait " + transportMessage.MsgId, encryptedMessage,
                            result =>
            {
                //try
                //{
                //    ReceiveBytesAsync(result, authKey);
                //}
                //catch (Exception e)
                //{
                //    TLUtils.WriteException(e);
                //}
                //finally
                //{
                //    callback();
                //}
            },
                            error => faultCallback?.Invoke());
        }