예제 #1
0
        public void SetData(List <string> pFileList)
        {
            TreeView.Nodes.Clear();

            FileHierarchy = null;
            FileList      = null;


            if ((pFileList == null) || (pFileList.Count == 0))
            {
                return;
            }


            if (pFileList == null)
            {
                return;
            }

            FileList      = pFileList;
            FileHierarchy = new FileHierarchy(pFileList);

            DisplayNode(null, FileHierarchy.Root);
            TreeView.ExpandAll();
        }
예제 #2
0
        public bool Run(IFile romFile, out IFileHierarchy hierarchy)
        {
            Asserts.Equal(
                ".iso",
                romFile
                .Extension,
                $"Cannot dump ROM because it is not an ISO: {romFile}");
            Asserts.True(
                romFile.Exists,
                $"Cannot dump ROM because it does not exist: {romFile}");

            var didChange = false;

            var finalDirectoryPath = romFile.FullNameWithoutExtension;
            var finalDirectory     = new FinDirectory(finalDirectoryPath);

            if (!finalDirectory.Exists)
            {
                didChange = true;

                this.DumpRom_(romFile);
                Asserts.True(finalDirectory.Exists,
                             $"Directory was not created: {finalDirectory}");
            }

            hierarchy = new FileHierarchy(finalDirectory);
            return(didChange);
        }
        public IModelDirectory <GloModelFileBundle>?GatherModelFileBundles(
            bool assert)
        {
            var gloverSteamDirectory = SteamUtils.GetGameDirectory("Glover", assert);

            if (gloverSteamDirectory == null)
            {
                return(null);
            }

            var rootModelDirectory    = new ModelDirectory <GloModelFileBundle>("glover");
            var parentObjectDirectory = rootModelDirectory.AddSubdir("data")
                                        .AddSubdir("objects");

            var gloverFileHierarchy     = new FileHierarchy(gloverSteamDirectory);
            var topLevelObjectDirectory =
                gloverFileHierarchy.Root.TryToGetSubdir("data/objects");

            foreach (var objectDirectory in topLevelObjectDirectory.Subdirs)
            {
                this.AddObjectDirectory(
                    parentObjectDirectory.AddSubdir(objectDirectory.Name),
                    gloverFileHierarchy, objectDirectory);
            }
            return(rootModelDirectory);
        }
예제 #4
0
 public bool Equals(VersionData versionData) =>
 RepositoryName.Equals(versionData.RepositoryName) &&
 BranchName.Equals(versionData.BranchName) &&
 ParentBranchName.Equals(versionData.BranchName) &&
 NewBranch.Equals(versionData.NewBranch) &&
 DeltaContent.Equals(versionData.DeltaContent) &&
 FileHierarchy.All(versionData.FileHierarchy.Contains) &&
 FileHierarchy.Count.Equals(versionData.FileHierarchy.Count) &&
 EventId.Equals(versionData.EventId);
예제 #5
0
        //====================================================================================================
        //Ответ на попытку авторизации
        private void AUTH_Send_Message()
        {
            this.response_buf = new byte[Client.command_length];
            if (UsersData.IsUserExist(ref user_inf, ref Server.UserList))
            {
                this.flag   = true;                                                   //Взаимодействие с пользователем активировано
                this.folder = Encoding.Default.GetString(user_inf.login_hash) + "//"; //Задаём персональное имя папки пользователя

                //Отправляем ответ об успешной авторизации
                this.response_buf[0] = Convert.ToByte(ServerAnswers.OK);
                networkStream.Write(response_buf, 0, response_buf.Length);

                //Обмениваемся ключами и создаём секретный
                aes = new DIFFIE_HELMAN();
                file.KeysExchange(client, networkStream, aes);

                //Ждать зашифрованные хэши
                while (client.Connected)
                {
                    if (networkStream.DataAvailable)
                    {
                        byte[] login = null;
                        FileProtocolReader.Read(ref login, networkStream);
                        login = aes.Decript(login);

                        byte[] password = null;
                        FileProtocolReader.Read(ref password, networkStream);
                        password = aes.Decript(password);

                        SHA256 sHA = SHA256Managed.Create();

                        if (sHA.ComputeHash(login).ToString() == user_inf.login_hash.ToString() &&
                            sHA.ComputeHash(password).ToString() == user_inf.login_hash.ToString())
                        {
                            this.response_buf[0] = Convert.ToByte(ServerAnswers.OK);
                            networkStream.Write(response_buf, 0, response_buf.Length);

                            //Посылаем информацию о названиях всех доступных файлах
                            FileHierarchy fileHierarchy = new FileHierarchy(this.folder);
                            fileHierarchy.NetworkSendInfo(networkStream, aes);
                        }
                        else
                        {
                            this.response_buf[0] = Convert.ToByte(ServerAnswers.NOPE);
                            networkStream.Write(response_buf, 0, response_buf.Length);
                        }
                        break;
                    }
                }
            }
            else
            {
                this.response_buf[0] = Convert.ToByte(ServerAnswers.NOPE);
                networkStream.Write(response_buf, 0, response_buf.Length);
                Disconnect();
            }
        }
예제 #6
0
        public IModelDirectory <IHaloWarsModelFileBundle>?GatherModelFileBundles(
            bool assert)
        {
            var haloWarsSteamDirectory =
                SteamUtils.GetGameDirectory("HaloWarsDE", assert);

            if (haloWarsSteamDirectory == null)
            {
                return(null);
            }

            var scratchDirectory = DirectoryConstants.ROMS_DIRECTORY
                                   .GetSubdir("halo_wars", true);

            var context = new HWContext(haloWarsSteamDirectory.FullName,
                                        scratchDirectory.FullName);

            // Expand all compressed/encrypted game files. This also handles the .xmb -> .xml conversion
            context.ExpandAllEraFiles();

            var fileHierarchy = new FileHierarchy(scratchDirectory);

            var rootNode = new ModelDirectory <IHaloWarsModelFileBundle>("halo_wars");

            var mapDirectories =
                fileHierarchy.Root
                .TryToGetSubdir("scenario/skirmish/design")
                .Subdirs;

            foreach (var srcMapDirectory in mapDirectories)
            {
                var xtdFile = srcMapDirectory.FilesWithExtension(".xtd").Single();
                var xttFile = srcMapDirectory.FilesWithExtension(".xtt").Single();
                rootNode.AddFileBundleRelative(
                    new XtdModelFileBundle(xtdFile, xttFile, context));
            }

            var artDirectory   = fileHierarchy.Root.TryToGetSubdir("art");
            var artSubdirQueue = new FinQueue <IFileHierarchyDirectory>(artDirectory);

            // TODO: Switch to DFS instead, it's more intuitive as a user
            while (artSubdirQueue.TryDequeue(out var artSubdir))
            {
                // TODO: Skip a file if it's already been extracted
                // TODO: Parse UGX files instead, as long as they specify their own animations
                var visFiles = artSubdir.FilesWithExtension(".vis");
                foreach (var visFile in visFiles)
                {
                    rootNode.AddFileBundleRelative(new VisModelFileBundle(visFile, context));
                }

                artSubdirQueue.Enqueue(artSubdir.Subdirs);
            }

            return(rootNode);
        }
예제 #7
0
        /// <summary>
        /// Reads and parses a previously emitted XML document representing the project.
        /// </summary>
        protected void ParseProjectFile(XmlDocument document)
        {
            // Loading data from various XML nodes.
            XmlNode projectNode = document.SelectSingleNode("//project");
            XmlNode gameNode    = projectNode.SelectSingleNode("game");
            string  gameName    = gameNode.Attributes["name"].Value;

            // Make sure that we have a valid platform here.
            string gamePlatform = gameNode.Attributes["platform"].Value;

            if (!Enum.IsDefined(typeof(Platform), gamePlatform))
            {
                throw new ProjectFileNotValidException("The specified platform does not exist: " + gamePlatform);
            }

            Platform platform = (Platform)Enum.Parse(typeof(Platform), gamePlatform);

            if (GameDefinitionRequest != null)
            {
                GameDefinitionRequestEventArgs e = new GameDefinitionRequestEventArgs(gameName, platform);
                GameDefinitionRequest(this, e);
                game = e.GameDefinition;
                if (game == null)
                {
                    throw new ProjectFileNotValidException("Could not identify the referenced game id: " + e.GameID);
                }
            }
            else
            {
                throw new Exception(
                          "Cannot retrieve game definition - the GameDefinitionRequest event is not handled by the Core.");
            }

            XmlNode infoNode = projectNode.SelectSingleNode("info");

            author      = infoNode.SelectSingleNode("author").InnerText;
            description = infoNode.SelectSingleNode("description").InnerText;
            version     = new ProjectVersion(infoNode.SelectSingleNode("version").InnerText);

            XmlNode templatesNode = projectNode.SelectSingleNode("template");

            templateName = templatesNode.InnerText;

            XmlNode mapInfoNode = projectNode.SelectSingleNode("mapinfo");

            mapName          = mapInfoNode.SelectSingleNode("name").InnerText;
            filename         = mapInfoNode.SelectSingleNode("filename").InnerText;
            uiText           = mapInfoNode.SelectSingleNode("uitext").InnerText;
            uiScreenShotFile = mapInfoNode.SelectSingleNode("uiscreenshot").InnerText;

            projectReferencesTable = new FileHierarchy();

            XmlNodeList referencesNodeList = projectNode.SelectNodes("references//tag");

            foreach (XmlNode tagNode in referencesNodeList)
            {
                string path = tagNode.InnerText;
                AddTagReference(path);
            }

            templates              = new TemplateTagList(game.GetProjectTemplate(templateName));
            templates.FileAdded   += templates_FileAdded;
            templates.FileRemoved += templates_FileRemoved;

            XmlNodeList templatesNodeList = projectNode.SelectNodes("essentialTags//tag");

            foreach (XmlNode tagNode in templatesNodeList)
            {
                string  templateID = tagNode.Attributes["template_id"].InnerText;
                TagPath path       = new TagPath(tagNode.InnerText);
                templates.Add(templateID, path);
            }
        }
예제 #8
0
        // --------------------------------------------------------------------------------------------------------------------------------------

        public void Reset()
        {
            TreeView.Nodes.Clear();
            FileHierarchy = null;
        }
예제 #9
0
 static CacheManager()
 {
     FileHierarchy = FileHierarchy.GetInstance();
     FileLogger    = FileLogger.GetInstance();
 }
        public bool Run(IFile romFile, out IFileHierarchy hierarchy)
        {
            Asserts.Equal(
                ".cia",
                romFile.Extension,
                $"Cannot dump ROM because it is not a CIA: {romFile}");
            Asserts.True(
                romFile.Exists,
                $"Cannot dump ROM because it does not exist: {romFile}");

            var didChange = false;

            var finalDirectoryPath =
                romFile.FullName.Substring(0,
                                           romFile.FullName.Length - ".cia".Length);
            var finalDirectory = new FinDirectory(finalDirectoryPath);

            if (!finalDirectory.Exists)
            {
                didChange = true;

                var beforeFiles = ThreeDsToolsConstants.HACKING_TOOLKIT_9DS_DIRECTORY
                                  .GetExistingFiles()
                                  .ToHashSet();
                var beforeSubdirs = ThreeDsToolsConstants.HACKING_TOOLKIT_9DS_DIRECTORY
                                    .GetExistingSubdirs()
                                    .ToHashSet();

                var directoryPath = Path.Join(
                    ThreeDsToolsConstants.HACKING_TOOLKIT_9DS_DIRECTORY.FullName,
                    "ExtractedRomFS");
                var directory = new FinDirectory(directoryPath);

                if (!directory.Exists)
                {
                    this.DumpRom_(romFile);
                    Asserts.True(directory.Exists,
                                 $"Failed to find expected HackingToolkit9ds directory:\n{directory}" +
                                 "\n\n" +
                                 "This is most likely due to not pre-installing " +
                                 "HackingToolkit9ds via the installer:\n" +
                                 "cli/tools/HackingToolkit9DSv12/SetupUS.exe");
                }

                Directory.Move(directoryPath, finalDirectoryPath);
                Asserts.True(finalDirectory.Exists,
                             $"Directory was not created: {finalDirectory}");

                var afterFiles = ThreeDsToolsConstants.HACKING_TOOLKIT_9DS_DIRECTORY
                                 .GetExistingFiles()
                                 .ToArray();
                var afterSubdirs = ThreeDsToolsConstants.HACKING_TOOLKIT_9DS_DIRECTORY
                                   .GetExistingSubdirs()
                                   .ToArray();


                // Cleans up unneeded files & directories
                foreach (var afterFile in afterFiles)
                {
                    if (!beforeFiles.Contains(afterFile))
                    {
                        afterFile.Info.Delete();
                    }
                }

                foreach (var afterSubdir in afterSubdirs)
                {
                    if (!beforeSubdirs.Contains(afterSubdir))
                    {
                        afterSubdir.Info.Delete(true);
                    }
                }
            }

            hierarchy = new FileHierarchy(finalDirectory);
            return(didChange);
        }