コード例 #1
0
        private void OnTopologyChange(object sender, XElement topologychangedXElement)
        {
            if (Topology != null)
            {
                var newTopology    = topologychangedXElement.ToZoneGroups();
                var noUpdateNeeded = newTopology.Any(nz => Topology.Any(oz => oz.Id == nz.Id));
                if (noUpdateNeeded)
                {
                    return;
                }
            }

            _topology = topologychangedXElement;
            _storage.Save(Tokens.ZoneGroupTopology, _topology);
            _messageBus.Send(new EventArgs(), Message.TopologyChanged);

            var query = topologychangedXElement.GetTopologyCoordinators();

            // if we have no coordinator or the coordinator isnt present in the new topology update the coordinator
            if (CurrentCoordinator == null || query.SingleOrDefault(x => x.Uuid == CurrentCoordinator.Uuid) == null)
            {
                if (query.Any())
                {
                    var activeZoneMember = query.First();

                    // for now just take the first found.
                    var z = Zones.FirstOrDefault(x => x.ZoneName == activeZoneMember.Title);
                    CurrentCoordinator = new ZonePlayer(z);
                }
            }

            if (_pollTask == null)
            {
                _pollTask = Poll();
            }
        }