/// <summary> /// React on map server state changed. /// </summary> /// <param name="sender">Layer, which server state changed.</param> /// <param name="e">Ignored.</param> private void Server_StateChanged(object sender, EventArgs e) { AgsServer agsServer = (AgsServer)sender; // index for inserting layer int index = 0; foreach (AgsLayer wrap in _agsLayers) { if (map.Layers.Contains(wrap.ArcGISLayer)) { index++; } else { AgsMapLayer agsMapLayer = wrap.MapLayer as AgsMapLayer; if (agsMapLayer != null && agsMapLayer.Server == agsServer && agsServer.State == AgsServerState.Authorized) { wrap.UpdateTokenIfNeeded(); map.Layers.Insert(index, wrap.ArcGISLayer); // Check spatial reference ID is present in Map if (Map.SpatialReferenceID.HasValue) { _SetSpatialReferenceIDToObjectLayersIfNeeded(); } } } } }
/// <summary> /// Add available service layers to map and process unavailable. /// </summary> private void _InitServiceLayers() { // Save AgsLayers to list _agsLayers = new List <AgsLayer>(); map.Layers.Clear(); foreach (MapLayer layer in this.Map.Layers) { AgsMapLayer agsMapLayer = layer as AgsMapLayer; AgsLayer wrap = AgsLayerFactory.CreateLayer(agsMapLayer.Server, layer); _agsLayers.Add(wrap); // subscribe to StateChanged event to react on server state changing agsMapLayer.Server.StateChanged += new EventHandler(Server_StateChanged); wrap.ArcGISLayer.InitializationFailed += new EventHandler <EventArgs>(ArcGISLayer_InitializationFailed); if (agsMapLayer.Server.State == ESRI.ArcLogistics.Services.AgsServerState.Authorized) { map.Layers.Add(wrap.ArcGISLayer); } } // Check all layers availability and save it to details list List <MessageDetail> details = new List <MessageDetail>(); foreach (MapLayer mapLayer in Map.Layers) { AgsMapLayer agsMapLayer = mapLayer as AgsMapLayer; if (agsMapLayer != null) { if (agsMapLayer.Server.State == AgsServerState.Unavailable) { string format = (string)App.Current.FindResource("LayerUnavailable"); string errorMessage = string.Format(format, mapLayer.Name); MessageDetail detail = new MessageDetail(MessageType.Error, errorMessage); details.Add(detail); } else if (agsMapLayer.Server.State == AgsServerState.Unauthorized) { string format = (string)App.Current.FindResource("LayerNotAuthorized"); string errorMessage = string.Format(format, mapLayer.Name, agsMapLayer.Server.Title); Link link = new Link((string)App.Current.FindResource("LicencePanelText"), Pages.PagePaths.LicensePagePath, LinkType.Page); MessageDetail detail = new MessageDetail(MessageType.Error, errorMessage, link); details.Add(detail); } } } // Add info to messenger in case of at least one unavailable layer if (details.Count > 0) { App.Current.Messenger.AddError((string)App.Current.FindResource("SomeMapLayersCannotBeLoaded"), details); } }