Akka.Pattern.BackoffSupervisor.OnReceive C# (CSharp) Method

OnReceive() protected method

protected OnReceive ( object message ) : void
message object
return void
        protected override void OnReceive(object message)
        {
            if (message is Terminated)
            {
                var terminated = (Terminated)message;
                if (_child != null && _child.Equals(terminated.ActorRef))
                {
                    _child = null;
                    var rand = 1.0 + ThreadLocalRandom.Current.NextDouble() * _randomFactor;
                    TimeSpan restartDelay;
                    if (_restartCount >= 30)
                        restartDelay = _maxBackoff; // duration overflow protection (> 100 years)
                    else
                    {
                        var max = Math.Min(_maxBackoff.Ticks, _minBackoff.Ticks * Math.Pow(2, _restartCount)) * rand;
                        if (max >= Double.MaxValue) restartDelay = _maxBackoff;
                        else restartDelay = new TimeSpan((long)max);
                    }

                    Context.System.Scheduler.ScheduleTellOnce(restartDelay, Self, StartChild.Instance, Self);
                    _restartCount++;
                }
                else Unhandled(message);
            }
            else if (message is StartChild)
            {
                StartChildActor();
                Context.System.Scheduler.ScheduleTellOnce(_minBackoff, Self, new ResetRestartCount(_restartCount), Self);
            }
            else if (message is ResetRestartCount)
            {
                var restartCount = (ResetRestartCount)message;
                if (restartCount.Current == _restartCount) _restartCount = 0;
            }
            else if (message is GetCurrentChild)
            {
                Sender.Tell(new CurrentChild(_child));
            }
            else
            {
                if (_child != null) _child.Forward(message);
                else Context.System.DeadLetters.Forward(message);
            }
        }