コード例 #1
0
ファイル: GatePacketManager.cs プロジェクト: tokihk/Ratatoskr
        private static void LoadPacketFilesTask(IEnumerable <FileControlParam> files)
        {
            var packets_new = CreatePacketContainer();

            foreach (var(file, index) in files.Select((value, index) => (value, index)))
            {
                /* ステータステキストを更新 */
                FormUiManager.SetStatusText(
                    StatusTextID.SaveLoadEventFile,
                    String.Format(
                        "{0} {1} / {2} ({3})",
                        ConfigManager.Language.MainMessage.EventFileLoading.Value,
                        index + 1,
                        files.Count(),
                        packets_new.Count));

                /* PacketLogReaderが生成できなければ読み込まない */
                var reader = file.Format.CreateReader() as PacketLogReader;

                if (reader == null)
                {
                    continue;
                }

                /* ファイルを開くことができない場合は何もしない */
                if (!reader.Open(file.Option, file.FilePath))
                {
                    continue;
                }

                DebugManager.MessageOut(string.Format("LoadPacketFile - Start [{0}]", Path.GetFileName(file.FilePath)));

                /* プログレスバーを初期化 */
                FormUiManager.SetProgressBar(0, false);

                /* ファイルを1つずつ処理 */
                var task = (new LoadPacketFileExecTaskDelegate(LoadPacketFileExecTask)).BeginInvoke(
                    packets_new, reader, null, null);

                /* 完了待ち */
                while (!task.IsCompleted)
                {
                    System.Threading.Thread.Sleep(100);
                    FormUiManager.SetProgressBar((byte)(reader.ProgressNow / (Math.Max(reader.ProgressMax / 100, 1))), false);
                }
            }

            /* コンテナ差し替え */
            packets_?.Dispose();
            packets_ = packets_new;

            /* ステータスバーを終了 */
            FormUiManager.SetStatusText(StatusTextID.SaveLoadEventFile, ConfigManager.Language.MainMessage.EventFileLoadComplete.Value);
            FormUiManager.SetProgressBar(100, true);

            /* 再描画 */
            FormTaskManager.RedrawPacketRequest();
        }
コード例 #2
0
ファイル: GatePacketManager.cs プロジェクト: tokihk/Ratatoskr
        private static void SavePacketFileTask(FileControlParam file, IEnumerable <PacketConverterInstance> pcvt_list)
        {
            var writer = file.Format.CreateWriter() as PacketLogWriter;

            if (writer == null)
            {
                return;
            }

            /* ファイルオープン */
            if (!writer.Open(file.Option, file.FilePath, false))
            {
                return;
            }

            DebugManager.MessageOut(string.Format("SavePacketFile - Start [{0}]", Path.GetFileName(file.FilePath)));

            var progress_max = Math.Max(packets_.Count, 1);

            /* ステータスバーを初期化 */
            FormUiManager.SetStatusText(StatusTextID.SaveLoadEventFile, ConfigManager.Language.MainMessage.EventFileSaving.Value);
            FormUiManager.SetProgressBar(0, true);

            var task_method = new SavePacketFileExecTaskDelegate(SavePacketFileExecTask);
            var task_result = (IAsyncResult)null;

            /* --- フィルタ適用有り --- */
            if (pcvt_list != null)
            {
                var count = (ulong)0;

                /* 変換器リセット */
                PacketConvertManager.InputStatusClear(pcvt_list);

                var task_packets = (IEnumerable <PacketObject>)null;

                foreach (var packet in packets_)
                {
                    /* ベースパケットをパケット変換 */
                    task_packets = PacketConvertManager.InputPacket(pcvt_list, packet);

                    /* 直前の出力の完了待ち */
                    if (task_result != null)
                    {
                        task_method.EndInvoke(task_result);
                    }

                    /* 変換後のパケットをファイル出力開始 */
                    task_result = task_method.BeginInvoke(writer, task_packets, null, null);

                    /* プログレスバー更新 */
                    FormUiManager.SetProgressBar((byte)((double)(++count) / progress_max * 100), false);
                }

                /* 変換器内の残りパケットを処理 */
                task_packets = PacketConvertManager.InputBreakOff(pcvt_list);
                if (task_packets != null)
                {
                    /* 書込みタスクの完了待ち */
                    if (task_result != null)
                    {
                        task_method.EndInvoke(task_result);
                    }

                    /* 残りパケットを出力 */
                    task_result = task_method.BeginInvoke(writer, task_packets, null, null);
                }

                /* 書込みタスクの完了待ち */
                if (task_result != null)
                {
                    task_method.EndInvoke(task_result);
                }
            }
            else
            {
                /* --- フィルタ適用無し --- */
                task_result = task_method.BeginInvoke(writer, packets_, null, null);

                /* 完了待ち */
                while (!task_result.IsCompleted)
                {
                    System.Threading.Thread.Sleep(100);
                    FormUiManager.SetProgressBar((byte)(writer.ProgressNow / (Math.Max(writer.ProgressMax / 100, 1))), false);
                }
            }

            /* ステータスバーを終了 */
            FormUiManager.SetStatusText(StatusTextID.SaveLoadEventFile, ConfigManager.Language.MainMessage.EventFileSaveComplete.Value);
            FormUiManager.SetProgressBar(100, true);

            DebugManager.MessageOut("SavePacketFile - Complete");

            /* ファイルクローズ */
            writer.Close();
        }