Akka.Cluster.AutoDownBase.OnReceive C# (CSharp) Method

OnReceive() protected method

protected OnReceive ( object message ) : void
message object
return void
        protected override void OnReceive(object message)
        {
            var state = message as ClusterEvent.CurrentClusterState;
            if (state != null)
            {
                _leader = state.Leader != null && state.Leader.Equals(SelfAddress);
                foreach (var m in state.Unreachable) UnreachableMember(m);
                return;
            }

            var unreachableMember = message as ClusterEvent.UnreachableMember;
            if (unreachableMember != null)
            {
                UnreachableMember(unreachableMember.Member);
                return;
            }

            var reachableMember = message as ClusterEvent.ReachableMember;
            if (reachableMember != null)
            {
                Remove(reachableMember.Member.UniqueAddress);
                return;
            }
            var memberRemoved = message as ClusterEvent.MemberRemoved;
            if (memberRemoved != null)
            {
                Remove(memberRemoved.Member.UniqueAddress);
                return;
            }

            var leaderChanged = message as ClusterEvent.LeaderChanged;
            if (leaderChanged != null)
            {
                _leader = leaderChanged.Leader != null && leaderChanged.Leader.Equals(SelfAddress);
                if (_leader)
                {
                    foreach(var node in _pendingUnreachable) Down(node.Address);
                    _pendingUnreachable = ImmutableHashSet.Create<UniqueAddress>();
                }
                return;
            }

            var unreachableTimeout = message as AutoDown.UnreachableTimeout;
            if (unreachableTimeout != null)
            {
                if (_scheduledUnreachable.ContainsKey(unreachableTimeout.Node))
                {
                    _scheduledUnreachable = _scheduledUnreachable.Remove(unreachableTimeout.Node);
                    DownOrAddPending(unreachableTimeout.Node);
                }
                return;
            }
        }