/// <summary>
        /// Modify the contents of this resource manager to match the contents of toMatch.
        /// This will fire the add/remove events for groups and individual resources to all
        /// subscribed delegates.
        /// </summary>
        /// <param name="toMatch">The resource manager to match.</param>
        public void changeResourcesToMatch(ResourceManager toMatch)
        {
            //Unload any non matching subsystems
            LinkedList <String> unloadedResources = new LinkedList <String>();

            foreach (SubsystemResources resource in subsystemResources.Values)
            {
                if (!toMatch.subsystemResources.ContainsKey(resource.Name))
                {
                    resource.sendUnloadSignals();
                    unloadedResources.AddLast(resource.Name);
                }
            }

            //Remove unloaded resources
            foreach (String name in unloadedResources)
            {
                subsystemResources.Remove(name);
            }

            //Add any new resources
            foreach (SubsystemResources resource in toMatch.subsystemResources.Values)
            {
                if (!subsystemResources.ContainsKey(resource.Name))
                {
                    SubsystemResources sub = new SubsystemResources(resource.Name);
                    subsystemResources.Add(resource.Name, sub);
                }
                subsystemResources[resource.Name].changeResourcesToMatch(resource);
            }
        }
示例#2
0
        /// <summary>
        /// Change the resources of this SubsystemResources to match the ones in toMatch.
        /// This will fire the events as appropriate.  See ResourceManager for more details.
        /// </summary>
        /// <param name="toMatch">The SubsystemResources to match.</param>
        public void changeResourcesToMatch(SubsystemResources toMatch)
        {
            //Unload non matching groups
            LinkedList <String> unloadedResources = new LinkedList <String>();

            foreach (ResourceGroup group in resourceGroups.Values)
            {
                if (!toMatch.resourceGroups.ContainsKey(group.Name))
                {
                    unloadedResources.AddLast(group.Name);
                }
            }

            //Remove unloaded groups
            foreach (String name in unloadedResources)
            {
                removeResourceGroup(name);
            }

            //Add any new groups
            foreach (ResourceGroup group in toMatch.resourceGroups.Values)
            {
                if (!resourceGroups.ContainsKey(group.Name))
                {
                    ResourceGroup resourceGroup = new ResourceGroup(group.Name);
                    this.addResourceGroup(resourceGroup);
                }
                resourceGroups[group.Name].changeResourcesToMatch(group);
            }
        }
 private ResourceManager(LoadInfo info)
 {
     Namespace = info.GetString("Namespace", null);
     for (int i = 0; info.hasValue(SUBSYSTEM_BASE + i); ++i)
     {
         SubsystemResources subsystem = info.GetValue <SubsystemResources>(SUBSYSTEM_BASE + i);
         this.addSubsystemResource(subsystem);
     }
 }
示例#4
0
 /// <summary>
 /// This constructor will duplicate the contents of toDuplicate.
 /// </summary>
 /// <param name="toDuplicate">Duplicate the contents of this ResourceGroup.</param>
 internal ResourceGroup(ResourceGroup toDuplicate, SubsystemResources parent)
 {
     this.name   = toDuplicate.name;
     this.parent = parent;
     foreach (Resource resource in toDuplicate.resources.Values)
     {
         this.addResource(new Resource(resource.LocName, resource.ArchiveType, resource.Recursive));
     }
 }
 /// <summary>
 /// Remove a subsystem resource from this manager.
 /// </summary>
 /// <param name="resources">The subsystem resources to remove.</param>
 internal void removeSubsystemResource(SubsystemResources resources)
 {
     if (subsystemResources.ContainsKey(resources.Name))
     {
         resources.ParentResourceManager = null;
         subsystemResources.Remove(resources.Name);
     }
     else
     {
         Log.Default.sendMessage("The subsystem {0} does not have any resources defined so it cannot be removed.  No changes made.", LogLevel.Warning, "ResourceManagement", resources.Name);
     }
 }
 /// <summary>
 /// Add a subsystem resource to this resource manager.
 /// </summary>
 /// <param name="resources">The subsystem resources to add.</param>
 internal void addSubsystemResource(SubsystemResources resources)
 {
     if (!subsystemResources.ContainsKey(resources.Name))
     {
         subsystemResources.Add(resources.Name, resources);
         resources.ParentResourceManager = this;
     }
     else
     {
         Log.Default.sendMessage("The subsystem {0} has resources defined already.  Ignoring new resources.", LogLevel.Error, "ResourceManagement", resources.Name);
     }
 }
 /// <summary>
 /// Add resources without removing old ones. Use to combine multiple ResourceManagers together.
 /// </summary>
 /// <param name="toAdd">The ResourceManager to add resources from.</param>
 public void addResources(ResourceManager toAdd)
 {
     //Add new resources
     foreach (SubsystemResources resource in toAdd.subsystemResources.Values)
     {
         if (!subsystemResources.ContainsKey(resource.Name))
         {
             SubsystemResources sub = new SubsystemResources(resource.Name);
             subsystemResources.Add(resource.Name, sub);
         }
         subsystemResources[resource.Name].addResources(resource);
     }
 }
示例#8
0
 /// <summary>
 /// Constructor. Takes the SubsystemResource to duplicate. This does not copy the listener.
 /// </summary>
 /// <param name="toDuplicate">Enter the contents of this SubystemResource into the new one.</param>
 /// <param name="live">True to also hook up the source subsystem resources listener. If you are setting this to true
 /// it is reccomended that there not actually be any resources in the ResourceManager.</param>
 internal SubsystemResources(SubsystemResources toDuplicate, bool live)
 {
     this.name = toDuplicate.name;
     foreach (ResourceGroup group in toDuplicate.resourceGroups.Values)
     {
         this.addResourceGroup(new ResourceGroup(group, this));
     }
     //We do the live hookup last since this is a clone and if there are resources, the subsystems already know about them.
     if (live)
     {
         this.listener = toDuplicate.listener;
     }
 }
示例#9
0
 /// <summary>
 /// Add resources without removing old ones.
 /// </summary>
 /// <param name="toAdd">The resources to add.</param>
 public void addResources(SubsystemResources toAdd)
 {
     //Add any new groups
     foreach (ResourceGroup group in toAdd.resourceGroups.Values)
     {
         if (!resourceGroups.ContainsKey(group.Name))
         {
             ResourceGroup resourceGroup = new ResourceGroup(group.Name);
             this.addResourceGroup(resourceGroup);
         }
         resourceGroups[group.Name].addResources(group);
     }
 }
示例#10
0
 internal void setParent(SubsystemResources parent)
 {
     this.parent = parent;
 }