public CoordinatedShutdownLeave() { Receive <LeaveReq>(req => { // MemberRemoved is needed in case it was downed instead _cluster.Leave(_cluster.SelfAddress); _cluster.Subscribe(Self, typeof(ClusterEvent.MemberLeft), typeof(ClusterEvent.MemberRemoved), typeof(ClusterEvent.MemberDowned)); var s = Sender; Become(() => WaitingLeaveCompleted(s)); }); }
protected override void OnReceive(object message) { if (message is HelloMessage) { Cluster.Leave(Cluster.SelfAddress); //Context.Stop(Self); } var up = message as ClusterEvent.MemberUp; if (up != null) { var mem = up; Log.Info("Member is Up: {0}", mem.Member); } else if (message is ClusterEvent.UnreachableMember) { var unreachable = (ClusterEvent.UnreachableMember)message; Log.Info("Member detected as unreachable: {0}", unreachable.Member); } else if (message is ClusterEvent.MemberRemoved) { var removed = (ClusterEvent.MemberRemoved)message; Log.Info("Member is Removed: {0}", removed.Member); } else if (message is PoisonPill) { Context.Stop(Self); } else if (message is ClusterEvent.IMemberEvent) { //IGNORE } else { Unhandled(message); } }