private void OnPollingTimerElapsed(object state)
 {
     if (base.Guard.Enter())
     {
         try
         {
             lock (base.ThisLock)
             {
                 if (this.pollingMode == PollingMode.NotPolling)
                 {
                     return;
                 }
                 if (this.pollingMode == PollingMode.Idle)
                 {
                     this.pollingMode = PollingMode.KeepAlive;
                 }
             }
             this.pollingHandler();
             this.pollingTimer.Set(this.GetPollingInterval());
         }
         finally
         {
             base.Guard.Exit();
         }
     }
 }
        public void ResumePolling(bool fastPolling)
        {
            lock (this.ThisLock)
            {
                if (this.pollingMode != PollingMode.NotPolling)
                {
                    throw Fx.AssertAndThrow("Can't resume polling if pollingMode != PollingMode.NotPolling");
                }

                if (fastPolling)
                {
                    this.pollingMode = PollingMode.FastPolling;
                }
                else
                {
                    if (this.oldPollingMode == PollingMode.FastPolling)
                    {
                        this.pollingMode = PollingMode.Idle;
                    }
                    else
                    {
                        this.pollingMode = this.oldPollingMode;
                    }
                }

                this.Guard.Exit();
                this.pollingTimer.Set(this.GetPollingInterval());
            }
        }
 public bool StopPolling()
 {
     lock (base.ThisLock)
     {
         if (this.pollingMode == PollingMode.NotPolling)
         {
             return(false);
         }
         this.oldPollingMode = this.pollingMode;
         this.pollingMode    = PollingMode.NotPolling;
         this.pollingTimer.Cancel();
         return(base.Guard.Enter());
     }
 }
 public override void OnRemoteActivity(bool fastPolling)
 {
     base.OnRemoteActivity(fastPolling);
     lock (base.ThisLock)
     {
         if (this.pollingMode != PollingMode.NotPolling)
         {
             if (fastPolling)
             {
                 this.pollingMode = PollingMode.FastPolling;
             }
             else
             {
                 this.pollingMode = PollingMode.Idle;
             }
             this.pollingTimer.Set(this.GetPollingInterval());
         }
     }
 }
        // Returns true if caller should resume polling
        public bool StopPolling()
        {
            lock (this.ThisLock)
            {
                if (this.pollingMode == PollingMode.NotPolling)
                    return false;

                this.oldPollingMode = pollingMode;
                this.pollingMode = PollingMode.NotPolling;
                this.pollingTimer.Cancel();
                return this.Guard.Enter();
            }
        }
        public void ResumePolling(bool fastPolling)
        {
            lock (this.ThisLock)
            {
                if (this.pollingMode != PollingMode.NotPolling)
                {
                    throw Fx.AssertAndThrow("Can't resume polling if pollingMode != PollingMode.NotPolling");
                }

                if (fastPolling)
                {
                    this.pollingMode = PollingMode.FastPolling;
                }
                else
                {
                    if (this.oldPollingMode == PollingMode.FastPolling)
                        this.pollingMode = PollingMode.Idle;
                    else
                        this.pollingMode = this.oldPollingMode;
                }

                this.Guard.Exit();
                this.pollingTimer.Set(this.GetPollingInterval());
            }
        }
        public override void OnRemoteActivity(bool fastPolling)
        {
            base.OnRemoteActivity(fastPolling);
            lock (this.ThisLock)
            {
                if (this.pollingMode == PollingMode.NotPolling)
                    return;

                if (fastPolling)
                    this.pollingMode = PollingMode.FastPolling;
                else
                    this.pollingMode = PollingMode.Idle;

                this.pollingTimer.Set(this.GetPollingInterval());
            }
        }
        void OnPollingTimerElapsed(object state)
        {
            if (this.Guard.Enter())
            {
                try
                {
                    lock (this.ThisLock)
                    {
                        if (this.pollingMode == PollingMode.NotPolling)
                            return;

                        if (this.pollingMode == PollingMode.Idle)
                            this.pollingMode = PollingMode.KeepAlive;
                    }

                    this.pollingHandler();
                    this.pollingTimer.Set(this.GetPollingInterval());
                }
                finally
                {
                    this.Guard.Exit();
                }
            }
        }