Beispiel #1
0
        /**
         * バイナリログの画像ID情報を読み込む
         */
        private MemIconImages ReadLogImagesBin(UFileStream fs)
        {
            MemIconImages _images = new MemIconImages();

            // 件数取得
            int size = fs.GetInt32();

            for (int i = 0; i < size; i++)
            {
                // 1件分のログを取得
                MemIconImage image = new MemIconImage();

                // 名前
                image.Name = fs.GetSizeString();

                // 画像
                int imageSize = fs.GetInt32();
                if (imageSize > 0)
                {
                    byte[] byteImage = fs.GetBytes(imageSize);
                    image.SetByteImage(byteImage);
                }

                _images.Add(image);
            }

            return(_images);
        }
Beispiel #2
0
        /**
         * バイナリログのログID情報を読み込む
         *
         */
        private LogIDs ReadLogIDsBin(UFileStream fs)
        {
            LogIDs _logIds = new LogIDs();

            // 件数取得
            int size = fs.GetInt32();

            for (int i = 0; i < size; i++)
            {
                // 1件分のログを取得
                LogID logId = new LogID();

                // ID
                logId.ID = fs.GetUInt32();

                // 名前
                logId.Name = fs.GetSizeString();

                // 色
                logId.Color = fs.GetUInt32();

                // アイコン画像名
                // 画像はアイコン画像を読み込んでから設定する
                logId.ImageName = fs.GetSizeString();

                _logIds.Add(logId);
            }

            return(_logIds);
        }
Beispiel #3
0
        /**
         * バイナリログのレーン情報を読み込む
         * @input fs: 読み込み元のファイル
         */
        private Lanes ReadLogLanesBin(UFileStream fs)
        {
            Lanes _lanes = new Lanes();

            // 件数取得
            int size = fs.GetInt32();

            for (int i = 0; i < size; i++)
            {
                // 1件分のログを取得
                Lane lane = new Lane();

                // ID
                lane.ID = fs.GetUInt32();

                // 名前
                lane.Name = fs.GetSizeString();

                // 色
                lane.Color = fs.GetUInt32();

                _lanes.Add(lane);
            }

            return(_lanes);
        }
Beispiel #4
0
        /**
         * 本体部分をバイナリ形式で書き込む
         */
        public void WriteBodyBin()
        {
            // 追加
            using (UFileStream fs = new UFileStream(logFilePath, FileMode.Append, FileAccess.Write))
            {
                // ログ件数
                fs.WriteInt32(GetLogNum());

                for (int i = 0; i < blockMax; i++)
                {
                    LogBlock block = blocks[writeBufferNo, i];

                    if (block != null)
                    {
                        for (int j = 0; j < blockSize; j++)
                        {
                            if (block.logs[j] != null)
                            {
                                block.logs[j].WriteToBinFile(fs, Encoding.UTF8);
                            }
                        }
                    }
                }
            }
        }
Beispiel #5
0
        /**
         * バイナリ形式のログファイルに書き込む
         */
        public void WriteToBinFile(UFileStream fs)
        {
            fs.WriteInt32(logIDs.Count);

            foreach (LogID logID in logIDs)
            {
                fs.WriteBytes(logID.ToBinary());
            }
        }
Beispiel #6
0
        /**
         * バイナリ形式のログファイルに書き込む
         *
         * @input fs: 書き込み先のファイルオブジェクト
         */
        public void WriteToBinFile(UFileStream fs)
        {
            fs.WriteInt32(images.Count);

            foreach (IconImage image in images)
            {
                fs.WriteBytes(image.ToBinary());
            }
        }
Beispiel #7
0
        /**
         * バイナリ形式のログファイルに書き込む
         */
        public void WriteToBinFile(UFileStream fs)
        {
            fs.WriteInt32(lanes.Count);

            foreach (Lane lane in lanes)
            {
                fs.WriteBytes(lane.ToBinary());
            }
        }
Beispiel #8
0
        /**
         * バイナリ形式のログファイルにログを出力する
         *
         * @input fs: 書き込み先のファイルオブジェクト
         * @input encoding: 文字列を出力する場合のエンコードタイプ
         */
        public override void WriteToBinFile(UFileStream fs, Encoding encoding)
        {
            // ID
            fs.WriteUInt32(id);

            // Name
            fs.WriteSizeString(name, encoding);

            // Color
            fs.WriteUInt32(color);
        }
Beispiel #9
0
        /**
         * バイナリ形式のログファイルにログを出力する
         *
         * @output fs: 書き込み先のファイルオブジェクト
         * @output encoding: 文字列のエンコードタイプ
         */
        public override void WriteToBinFile(UFileStream fs, Encoding encoding)
        {
            // Type of log (Area)
            fs.WriteByte((byte)LogType.Area);

            // Length of area name
            // Area name
            fs.WriteSizeString(name, encoding);

            // parent area name

            fs.WriteSizeString(parentName, encoding);

            // color
            fs.WriteUInt32(color);
        }
Beispiel #10
0
        /**
         * バイナリエリアデータを読み込む
         */
        private void ReadLogAreaBin(UFileStream fs)
        {
            LogArea area = new LogArea();

            // エリア名の長さ
            // エリア名
            area.Name = fs.GetSizeString();

            // 親のエリア名の長さ
            // 親のエリア名
            area.ParentArea = areaManager.searchArea(fs.GetSizeString());

            // 色
            area.Color = fs.GetUInt32();

            // エリアを追加
            areaManager.AddArea(area);
        }
Beispiel #11
0
        /**
         * バイナリ形式のログをファイルに書き込む
         *
         * @input fs : 書き込み先のファイルオブジェクト
         * @input encoding : 文字列のエンコードタイプ
         */
        public override void WriteToBinFile(UFileStream fs, Encoding encoding)
        {
            // 名前
            fs.WriteSizeString(name, encoding);

            // 画像データ
            // 指定の画像ファイルをメモリに展開し書き込む
            try
            {
                // 画像ファイルから画像のbyte配列を取得する
                if (imagePath != null && File.Exists(imagePath))
                {
                    fs.WriteSizeBytes(File.ReadAllBytes(imagePath));
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
Beispiel #12
0
        /**
         * ULoggerで作成したログファイルを読み込んでULogViewで使用できる種類のデータとしてメモリ展開する
         *
         * @input inputFilePath: ログファイルのパス
         * @input fileType: ログファイルの種類(テキスト、バイナリ)
         * @output : true:成功 / false:失敗
         */
        public bool ReadLogFile(string inputFilePath)
        {
            // 先頭の4バイトの文字列でテキストかバイナリかを判定する
            string identStr = null;

            using (var fs = new UFileStream(inputFilePath, FileMode.Open, FileAccess.Read))
            {
                identStr = fs.GetString(4);
            }

            if (identStr.Equals(IdentText))
            {
                ReadLogFileText(inputFilePath);
            }
            else
            {
                ReadLogFileBin(inputFilePath);
            }
            areaManager.Print();

            return(true);
        }
Beispiel #13
0
        /**
         * バイナリ形式のヘッダーを書き込む
         */
        public void WriteHeaderBin()
        {
            // 新規
            using (UFileStream fs = new UFileStream(logFilePath, FileMode.Create, FileAccess.Write))
            {
                // ファイルの種別
                fs.WriteString(IdentBin);

                // エンコードの長さ
                // エンコード
                fs.WriteSizeString(UUtility.GetEncodingStr(encoding), Encoding.UTF8);

                // ID情報
                logIDs.WriteToBinFile(fs);

                // レーン情報
                lanes.WriteToBinFile(fs);

                // Icon image
                images.WriteToBinFile(fs);
            }
        }
Beispiel #14
0
        }  // GetEncoding()

        #endregion

        #region Binary

        /**
         * バイナリ形式のログファイルを読み込んでメモリに展開する
         * @input inputFilePath: ログファイルのパス
         * @output : true:成功 / false:失敗
         */
        private bool ReadLogFileBin(string inputFilePath)
        {
            using (var fs = new UFileStream(inputFilePath, FileMode.Open, FileAccess.Read))
            {
                try
                {
                    // データ判定部分をスキップ
                    fs.GetBytes(4);

                    // Header
                    ReadLogHeadBin(fs);

                    // Body
                    ReadLogBodyBin(fs);
                }
                catch (Exception e)
                {
                    Console.WriteLine("Error ReadLogFileBin " + e.Message);
                    throw;
                }
            }
            return(true);
        }
Beispiel #15
0
        /**
         * バイナリログのヘッダ部分を取得
         * @input fs : ファイルオブジェクト
         *
         */
        private void ReadLogHeadBin(UFileStream fs)
        {
            // 文字コードを取得
            string encStr = fs.GetSizeString();

            this.encoding   = UUtility.GetEncodingFromStr(encStr);
            fs.EncodingType = encoding;

            // ログID情報
            logIDs = ReadLogIDsBin(fs);

            // レーン情報
            lanes = ReadLogLanesBin(fs);

            // アイコン画像
            images = ReadLogImagesBin(fs);

            // ログIDの画像を設定する
            foreach (LogID logId in logIDs)
            {
                logId.Image = images.GetImage(logId.ImageName);
            }
        }
Beispiel #16
0
        /**
         * バイナリ形式のログをファイルに書き込む
         *
         * @input fs : 書き込み先のファイルオブジェクト
         * @input encoding: 文字列のエンコードタイプ
         */
        public override void WriteToBinFile(UFileStream fs, Encoding encoding)
        {
            // ID
            fs.WriteUInt32(id);

            // ID名
            fs.WriteSizeString(name, encoding);

            // 色
            fs.WriteUInt32(color);

            // アイコン画像名の長さ
            // アイコン画像名
            if (imageName == null)
            {
                // 長さ:0 = なし
                fs.WriteUInt32((UInt32)0);
            }
            else
            {
                fs.WriteSizeString(imageName, encoding);
            }
        }
Beispiel #17
0
        /**
         * バイナリログの本体部分を取得
         * @input fs : ファイルオブジェクト
         */
        private void ReadLogBodyBin(UFileStream fs)
        {
            while (!fs.EndOfStream())
            {
                // 件数取得
                int logNum = fs.GetInt32();

                for (int i = 0; i < logNum; i++)
                {
                    // 種類を取得
                    LogType type = (LogType)fs.GetByte();

                    if (type == LogType.Data)
                    {
                        ReadLogDataBin(fs);
                    }
                    else
                    {
                        ReadLogAreaBin(fs);
                    }
                }
            }
        }
Beispiel #18
0
        /**
         * バイナリ形式のログファイルにログを出力する
         *
         * @output fs: 書き込み先のファイルオブジェクト
         * @output encoding: 文字列のエンコードタイプ
         */
        public override void WriteToBinFile(UFileStream fs, Encoding encoding)
        {
            // データログ
            fs.WriteByte((byte)LogType.Data);
            // ログID
            fs.WriteUInt32(logId);
            // ログタイプ
            fs.WriteByte((byte)logType);
            // 表示レーンID
            fs.WriteUInt32(laneId);

            if (text == null)
            {
                //タイトルの長さ
                fs.WriteUInt32((UInt32)0);
            }
            else
            {
                //タイトル
                fs.WriteSizeString(text, encoding);
            }
            //時間
            fs.WriteDouble(time);
            if (detail == null)
            {
                // ログデータ(詳細)の種類
                fs.WriteByte((byte)DetailDataType.None);
            }
            else
            {
                // ログデータ(詳細)の種類
                fs.WriteByte(detail.dataTypeByte());
                // ログデータ(詳細)
                fs.WriteSizeString(detail.ToString(), encoding);
            }
        }
Beispiel #19
0
 // Write log to binary file
 public abstract void WriteToBinFile(UFileStream fs, Encoding encoding);
Beispiel #20
0
        /**
         * バイナリログデータを読み込む
         */
        private void ReadLogDataBin(UFileStream fs)
        {
            LogData log = new LogData();

            // ログID
            log.ID = fs.GetUInt32();

            //ログタイプ
            bool        isRangeEnd = false;
            LogDataType dataType   = (LogDataType)fs.GetByte();

            switch (dataType)
            {
            case LogDataType.Single:
                log.Type = MemLogType.Point;
                break;

            case LogDataType.RangeStart:
                log.Type = MemLogType.Range;
                break;

            case LogDataType.RangeEnd:
                // 同じレーンの Range タイプのログに結合する
                // todo
                isRangeEnd = true;
                break;

            case LogDataType.Value:
                log.Type = MemLogType.Value;
                break;
            }

            //表示レーンID
            log.LaneId = fs.GetUInt32();

            //タイトルの長さ
            //タイトル
            log.Text = fs.GetSizeString();

            // 範囲ログの終了タイプの場合、結合する

            //時間
            Double time = fs.GetDouble();

            if (log.Type == MemLogType.Range && isRangeEnd == true)
            {
                // 1つ前の Rangeタイプの Time2 に時間を設定
                // todo
                return;
            }
            else
            {
                log.Time1 = time;
            }

            //ログデータ(詳細)のサイズ
            //ログデータ(詳細)
            if (log.Detail != null)
            {
                log.Detail = MemDetailData.Deserialize(fs.GetSizeString());
            }

            // ログを追加する
            areaManager.AddLogData(log);
        }