Akka.Cluster.ClusterEvent.DiffMemberEvents C# (CSharp) Метод

DiffMemberEvents() статический приватный Метод

static private DiffMemberEvents ( Gossip oldGossip, Gossip newGossip ) : ImmutableList
oldGossip Gossip
newGossip Gossip
Результат ImmutableList
        internal static ImmutableList<IMemberEvent> DiffMemberEvents(Gossip oldGossip, Gossip newGossip)
        {
            if (newGossip.Equals(oldGossip)) return ImmutableList.Create<IMemberEvent>();
            var newMembers = newGossip.Members.Except(oldGossip.Members);

            var membersGroupedByAddress = newGossip.Members
                .Concat(oldGossip.Members)
                .GroupBy(m => m.UniqueAddress);
            var changedMembers = membersGroupedByAddress
                .Where(g => g.Count() == 2 && g.First().Status != g.Skip(1).First().Status)
                .Select(g => g.First());
            var memberEvents = CollectMemberEvents(newMembers.Union(changedMembers));

            var removedMembers = oldGossip.Members.Except(newGossip.Members);
            var removedEvents = removedMembers.Select(m => new MemberRemoved(m.Copy(status: MemberStatus.Removed), m.Status));

            return memberEvents.Concat(removedEvents).ToImmutableList();
        }

Usage Example

Пример #1
0
 private void PublishDiff(Gossip oldGossip, Gossip newGossip, Action <object> pub)
 {
     foreach (var @event in ClusterEvent.DiffMemberEvents(oldGossip, newGossip))
     {
         pub(@event);
     }
     foreach (var @event in ClusterEvent.DiffUnreachable(oldGossip, newGossip, _selfUniqueAddress))
     {
         pub(@event);
     }
     foreach (var @event in ClusterEvent.DiffReachable(oldGossip, newGossip, _selfUniqueAddress))
     {
         pub(@event);
     }
     foreach (var @event in ClusterEvent.DiffLeader(oldGossip, newGossip, _selfUniqueAddress))
     {
         pub(@event);
     }
     foreach (var @event in ClusterEvent.DiffRolesLeader(oldGossip, newGossip, _selfUniqueAddress))
     {
         pub(@event);
     }
     // publish internal SeenState for testing purposes
     foreach (var @event in ClusterEvent.DiffSeen(oldGossip, newGossip, _selfUniqueAddress))
     {
         pub(@event);
     }
     foreach (var @event in ClusterEvent.DiffReachability(oldGossip, newGossip))
     {
         pub(@event);
     }
 }
All Usage Examples Of Akka.Cluster.ClusterEvent::DiffMemberEvents