Ejemplo n.º 1
0
        public void RegisterPeerConnection(ServicePeer peer)
        {
            UpdatePeerList(peer);

            UpdateSubscriptions(peer);

            UpdateShadows(peer);

            PeerConnected(peer);

            foreach (var subscription in peer.HandledMessages)
            {
                _endpointToStatus[subscription.Endpoint] = new EndpointStatus(subscription.Endpoint, true);
            }
        }
Ejemplo n.º 2
0
        private void UpdateSubscriptions(ServicePeer peer)
        {
            foreach (var messageToEndpoint in peer.HandledMessages)
            {
                _messagesToEndpoints.AddOrUpdate(messageToEndpoint.MessageType.FullName,
                                                 key => new List<MessageSubscription> { messageToEndpoint },
                                                 (key, oldValue) =>
                                                 {
                                                     var list =
                                                         new List<MessageSubscription>(
                                                             oldValue.Where(x => x.Peer != peer.PeerId));
                                                     //dont keep previous message subscription from peer
                                                     list.Add(messageToEndpoint);
                                                     return list;
                                                 });
                
            }

            foreach (var pair in _messagesToEndpoints) //remove messages that are no longer handled
            {
                if (peer.HandledMessages.All(x => x.MessageType.FullName != pair.Key))
                    pair.Value.RemoveAll(x => x.Peer == peer.PeerId);
            }
        }
Ejemplo n.º 3
0
 private void UpdatePeerList(ServicePeer peer)
 {
     _peers.AddOrUpdate(peer.PeerId, peer, (key, oldValue) => { return peer; });
 }
Ejemplo n.º 4
0
 public ServicePeerShadowInformation(ServicePeer servicePeer, bool isPersistenceProvider)
 {
     ServicePeer = servicePeer;
     IsPersistenceProvider = isPersistenceProvider;
 }
Ejemplo n.º 5
0
        private void UpdateShadows(ServicePeer peer)
        {
            foreach (var shadowedPeer in peer.ShadowedPeers ?? Enumerable.Empty<ShadowedPeerConfiguration>())
            {
                _peersToTheirShadows.AddOrUpdate(shadowedPeer.PeerPeerId,
                                            new HashSet<ServicePeerShadowInformation> { new ServicePeerShadowInformation(peer, shadowedPeer.IsPersistenceProvider) },
                                            (key, oldValue) =>
                                            {
                                                oldValue.Add(new ServicePeerShadowInformation(peer, shadowedPeer.IsPersistenceProvider));
                                                return oldValue;
                                            });
            }

            foreach (var pair in _peersToTheirShadows)
            {
                var previousEntry = pair.Value.SingleOrDefault(x => x.ServicePeer == peer);
                if (previousEntry != null && !peer.ShadowedPeers.Select(x => x.PeerPeerId).Contains(pair.Key))
                    pair.Value.Remove(previousEntry);
            }
        }