Пример #1
0
        /// <summary>
        /// 読取。
        /// </summary>
        /// <param name="args">コマンドライン引数。</param>
        /// <returns>このオブジェクト。</returns>
        public static RawArguments Load(string[] args)
        {
            RawArguments instance = null;

            Parser.Default.ParseArguments <RawArguments>(args).WithParsed(ins =>
            {
                // パース成功時
                instance = (RawArguments)ins;
            }).WithNotParsed(err =>
            {
                // パース失敗時
            });

            return(instance);
        }
Пример #2
0
        /// <summary>
        /// Entry point.
        /// </summary>
        /// <param name="args">Command line arguments.</param>
        public static void Main(string[] args)
        {
            LogRotation.Logging(() =>
            {
                // Command line arguments.
                var arguments = RawArguments.Load(args);
                Trace.WriteLine($"{LogHelper.Stamp}Expand  : '{arguments.Expand}', Encode: '{arguments.Encode}', Convert: '{arguments.Convert}'.");

                // 同じフェーズをずっとやっていても1つも完成しないので、少しずつやって、ばらけさせる。
                var expandedCount  = 1; // ループの初回入るように。
                var encodedCount   = 0;
                var convertedCount = 0;
                var mergedCount    = 0;
                var merged         = false;

                // List<string> expansionOutputDirectories;
                // 処理が行われている間、繰り返す。
                while (expandedCount + encodedCount + convertedCount > 0 || merged)
                {
                    Trace.WriteLine($"{LogHelper.Stamp}Program : Running...");

                    // リセット。
                    expandedCount  = 0;
                    encodedCount   = 0;
                    convertedCount = 0;
                    mergedCount    = 0;
                    merged         = false;

                    if (arguments.Expand)
                    {
                        // 解凍フェーズ。
                        expandedCount = ExpansionPhase.ExpandLittleIt();
                    }

                    if (arguments.Encode)
                    {
                        // TODO フォルダーを探索して、棋譜のエンコーディングを変換。
                        encodedCount = EncodingPhase.ExecuteEncode();
                    }

                    if (arguments.Convert)
                    {
                        // 棋譜RPM変換フェーズ。
                        convertedCount = ConvertSomeFilesToRpm();
                    }

                    if (arguments.Merge)
                    {
                        // たまに行う程度。
                        //if (new System.Random().Next() % 3 == 0)
                        //{
                        // JSON作成フェーズ。
                        (mergedCount, merged) = JamTapesfragFiles(false);
                        //}
                    }

                    Trace.WriteLine($"{LogHelper.Stamp}Result  : expandedCount: {expandedCount}, encodedCount: {encodedCount}, readCount: {convertedCount}, mergedCount: {mergedCount}.");
                }

                // 最後の余りに対応する1回。
                {
                    Trace.WriteLine($"{LogHelper.Stamp}Program : Last run...");

                    if (arguments.Expand)
                    {
                        // 解凍フェーズ。
                        expandedCount = ExpansionPhase.ExpandLittleIt();
                    }

                    if (arguments.Encode)
                    {
                        // TODO フォルダーを探索して、棋譜のエンコーディングを変換。
                        EncodingPhase.ExecuteEncode();
                    }

                    if (arguments.Convert)
                    {
                        // 棋譜RPM変換フェーズ。
                        convertedCount = ConvertSomeFilesToRpm();
                    }

                    if (arguments.Merge)
                    {
                        // JSON作成フェーズ。
                        (mergedCount, merged) = JamTapesfragFiles(true);
                    }

                    Trace.WriteLine($"{LogHelper.Stamp}LAST    : expandedCount: {expandedCount}, readCount: {convertedCount}, mergedCount: {mergedCount}.");
                }

                // 空の go のサブ・ディレクトリは削除。
                {
                    {
                        // このディレクトリ以下のディレクトリをすべて取得する
                        IEnumerable <string> subDirectories =
                            System.IO.Directory.EnumerateDirectories(LocationMaster.InputDirectory.FullName, "*", System.IO.SearchOption.TopDirectoryOnly);

                        foreach (string subDir in subDirectories)
                        {
                            DeleteEmptyDirectory(subDir);
                        }
                    }

                    {
                        // このディレクトリ以下のディレクトリをすべて取得する
                        IEnumerable <string> subDirectories =
                            System.IO.Directory.EnumerateDirectories(LocationMaster.EncodedDirectory.FullName, "*", System.IO.SearchOption.TopDirectoryOnly);

                        foreach (string subDir in subDirectories)
                        {
                            DeleteEmptyDirectory(subDir);
                        }
                    }
                }

                int sleepSeconds = 60;
                Trace.WriteLine($"{LogHelper.Stamp}Finished: sleep={sleepSeconds} sec.");
                Thread.Sleep(sleepSeconds * 1000);
            });
        }