public VersionControl(string name, Version server, Version local, ModuleUpdateInfo info)
        {
            this.local = local;
            this.info  = info;

            // select update item by version numbers
            infoItem = null;
            bool merged = false;

            do
            {
                merged = false;

                foreach (ModuleUpdateInfoItem item in info.Items)
                {
                    if (infoItem == null && item.Base == local)
                    {
                        infoItem = item;
                        merged   = true;
                        break;
                    }
                    // make sure update is not higher than the requested version
                    else if (infoItem != null && item.Version <= server && item.Base == infoItem.Version)
                    {
                        // merge
                        infoItem = new ModuleUpdateInfoItem(infoItem, item);
                        merged   = true;
                        break;
                    }
                }

                // no update for our version found, fallback to full update
                if (infoItem == null)
                {
                    foreach (ModuleUpdateInfoItem item in info.Items)
                    {
                        if (item.Base == null && item.Version <= server)
                        {
                            infoItem = item;
                            merged   = true;
                            break;
                        }
                    }
                }
            } while (merged);
        }
Exemple #2
0
        /// <summary>
        /// Constructor from xml data.
        /// </summary>
        /// <param name="module">xml data</param>
        internal ModuleUpdateInfo(burntimeupdatesModule module)
        {
            stable   = new Version(module.stable);
            unstable = new Version(module.unstable);
            name     = module.name;

            dependencies = module.dependency;
            if (dependencies == null)
            {
                dependencies = new string[0];
            }

            @base = module.@base;
            if (@base == null)
            {
                @base = "";
            }

            switch (module.type)
            {
            case burntimeupdatesModuleType.extra:
                type = ModuleType.Extra;
                break;

            case burntimeupdatesModuleType.game:
                type = ModuleType.Game;
                break;

            default:
                type = ModuleType.Other;
                break;
            }

            items = new ModuleUpdateInfoItem[module.update != null ? module.update.Length : 0];
            for (int i = 0; i < items.Length; i++)
            {
                items[i] = new ModuleUpdateInfoItem(@base == "" ? name : @base, module.update[i]);
            }
        }
Exemple #3
0
        public ModuleUpdateInfoItem(ModuleUpdateInfoItem older, ModuleUpdateInfoItem newer)
        {
            version            = newer.Version;
            @base              = older.@base;
            savegameCompatible = older.savegameCompatible & newer.savegameCompatible;

            List <ModuleUpdateFilePath> add = new List <ModuleUpdateFilePath>();

            // add old file list
            add.AddRange(older.Add);

            // add or replace files by new ones
            foreach (ModuleUpdateFilePath name in newer.Add)
            {
                bool added = false;

                for (int i = 0; i < add.Count; i++)
                {
                    // file found, replace it with new version
                    if (name.File == add[i].File)
                    {
                        add[i] = name;
                        added  = true;
                        break;
                    }
                }

                // file not found, add it
                if (!added)
                {
                    add.Add(name);
                }
            }

            this.add = add.ToArray();
            remove   = new ModuleUpdateFilePath[0];
        }