/// <summary> /// DBデータの文字列項目 /// </summary> /// <param name="status">読み込み経過状態</param> /// <param name="values">読み込み結果</param> private void ReadDbDataStringValues(FileReadStatus status, out IReadOnlyList <DBItemValue> values) { // 数値項目数 var length = status.ReadInt(); status.IncreaseIntOffset(); Logger.Debug(FileIOMessage.SuccessRead(typeof(DBDataFileReader), "文字列項目数", length)); var result = new List <DBItemValue>(); for (var i = 0; i < length; i++) { var value = status.ReadString(); status.AddOffset(value.ByteLength); Logger.Debug(FileIOMessage.SuccessRead(typeof(DBDataFileReader), $" 文字列項目{i,2}", value)); DBValueString dbValueString = value.String; result.Add(dbValueString); } values = result; }
/// <summary> /// DBデータの数値項目 /// </summary> /// <param name="status">読み込み経過状態</param> /// <param name="values">読み込み結果</param> private void ReadDbDataIntValues(FileReadStatus status, out IReadOnlyList <DBItemValue> values) { // 数値項目数 var length = status.ReadInt(); status.IncreaseIntOffset(); Logger.Debug(FileIOMessage.SuccessRead(typeof(DBDataFileReader), "数値項目数", length)); var result = new List <DBItemValue>(); for (var i = 0; i < length; i++) { var value = status.ReadInt(); status.IncreaseIntOffset(); Logger.Debug(FileIOMessage.SuccessRead(typeof(DBDataFileReader), $" 数値項目{i,2}", value)); result.Add((DBValueInt)value); } values = result; }
// _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ // ReadMethod // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ private void ReadOneData(TIniTarget target) { var section = target.SectionName; var properties = GetAllPropertyInfo(); foreach (var propertyInfo in properties) { var iniTargetAttr = (IniTargetAttribute)propertyInfo.GetCustomAttribute(typeof(IniTargetAttribute), true); if (VersionConfig.IsUnderVersion(iniTargetAttr.SupportMinVersion)) { // サポート対象外の場合、ファイルからは取得できないため固定で空文字をセット propertyInfo.SetValue(target, string.Empty); continue; } var sb = new StringBuilder(256); IniFileHelper.GetPrivateProfileString(section ?? "", propertyInfo.Name, "", sb, sb.Capacity, FilePath); var result = sb.ToString(); Logger.Debug(FileIOMessage.SuccessRead(GetType(), $"プロパティ:{propertyInfo.Name}", result)); propertyInfo.SetValue(target, sb.ToString()); } }
/// <summary> /// イベントコマンドの動作指定コマンド /// </summary> /// <param name="status">読み込み経過状態</param> /// <param name="actionEntry">データ格納先</param> /// <exception cref="InvalidOperationException">ファイル仕様が異なる場合</exception> private void ReadEventActionEntry(FileReadStatus status, ActionEntry actionEntry) { Logger.Debug(FileIOMessage.StartCommonRead(typeof(EventCommandListReader), "動作指定コマンド")); // ヘッダチェック foreach (var b in ActionEntry.HeaderBytes) { if (status.ReadByte() != b) { throw new InvalidOperationException( $"イベントコマンド中のイベントコマンドヘッダの値が異なります。(offset: {status.Offset})"); } status.IncreaseByteOffset(); } Logger.Debug(FileIOMessage.CheckOk(typeof(EventCommandListReader), "動作指定コマンドヘッダ")); // 動作フラグ var optionFlag = status.ReadByte(); actionEntry.SetOptionFlag(optionFlag); status.IncreaseByteOffset(); Logger.Debug(FileIOMessage.SuccessRead(typeof(EventCommandListReader), "数値変数の数", optionFlag)); // 動作コマンドリスト actionEntry.CommandList = ReadCharaMoveCommand(status); Logger.Debug(FileIOMessage.EndCommonRead(typeof(EventCommandListReader), "動作指定コマンド")); }
/// <summary> /// 項目特殊指定 /// </summary> /// <param name="status">読み込み経過状態</param> /// <returns>項目項目特殊指定リスト</returns> private List <DBItemSpecialSettingType> ReadItemSpecialSettingType(FileReadStatus status) { var length = status.ReadInt(); status.IncreaseIntOffset(); Logger.Debug(FileIOMessage.SuccessRead(typeof(DBTypeSettingReader), "項目特殊指定数", length)); var result = new List <DBItemSpecialSettingType>(); for (var i = 0; i < length; i++) { var value = status.ReadByte(); status.IncreaseByteOffset(); var type = DBItemSpecialSettingType.FromByte(value); Logger.Debug(FileIOMessage.SuccessRead(typeof(DBTypeSettingReader), $" 項目特殊指定{i,2}", type)); result.Add(type); } return(result); }
// _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ // Public Method // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ /// <summary> /// ファイルを同期的に読み込む /// </summary> /// <returns>読み込んだデータ</returns> /// <exception cref="InvalidOperationException"> /// ファイルが正しく読み込めなかった場合 /// </exception> public override DatabaseDat ReadSync() { lock (readLock) { Logger.Info(FileIOMessage.StartFileRead(GetType())); var result = new DatabaseDat(); // ヘッダチェック ReadHeader(ReadStatus); // DBデータ ReadDBData(ReadStatus, result); // フッタチェック ReadFooter(ReadStatus); // DB種別 result.DBKind = DBKind; Logger.Info(FileIOMessage.EndFileRead(GetType())); return(result); } }
private void ReadTypeSetting(FileReadStatus status, DBTypeSet data, IReadOnlyList <DBItemType> itemTypes) { Logger.Debug(FileIOMessage.StartCommonRead(typeof(DBTypeSetFileReader), "タイプ設定")); var reader = new DBTypeSettingReader(status, 1, false); var settings = reader.Read(); data.TypeName = settings[0].TypeName; data.Memo = settings[0].Memo; data.ItemSettingList.AddRange(settings[0].ItemSettingList); if (data.ItemSettingList.Count != itemTypes.Count) { throw new InvalidOperationException( $"項目値種別数と項目設定数が一致しません。"); } for (var i = 0; i < data.ItemSettingList.Count; i++) { data.ItemSettingList[i].ItemType = itemTypes[i]; } Logger.Debug(FileIOMessage.EndCommonRead(typeof(DBTypeSetFileReader), "タイプ設定リスト")); }
/// <summary> /// コモンイベント末尾A /// </summary> /// <param name="status">読み込み経過状態</param> /// <returns>あとに返戻値が続く場合true</returns> /// <exception cref="InvalidOperationException">データが仕様と異なる場合</exception> private HasNext ReadFooterA(FileReadStatus status) { var b1 = status.ReadByte(); if (b1 == CommonEvent.BeforeReturnValueSummaryBytesBefore[0]) { foreach (var b in CommonEvent.BeforeReturnValueSummaryBytesBefore) { if (status.ReadByte() != b) { throw new InvalidOperationException( $"ファイルデータが仕様と異なります。(offset:{status.Offset})"); } status.IncreaseByteOffset(); } Logger.Debug(FileIOMessage.CheckOk(typeof(CommonEventReader), "コモンイベント末尾", "(返戻値あり)")); return(HasNext.Yes); } if (b1 == CommonEvent.FooterBytesBeforeVer2_00[0]) { status.IncreaseByteOffset(); return(HasNext.No); } throw new InvalidOperationException( $"ファイルデータが仕様と異なります。(offset:{status.Offset})"); }
/// <summary> /// 数値特殊指定数値初期値 /// </summary> /// <param name="status">読み込み経過状態</param> /// <returns>数値特殊指定数値初期値リスト</returns> private List <int> ReadInitValue(FileReadStatus status) { Logger.Debug(FileIOMessage.StartCommonRead(typeof(SpecialArgDescReader), "数値特殊指定数値初期値")); var result = new List <int>(); var length = status.ReadInt(); status.IncreaseIntOffset(); Logger.Debug(FileIOMessage.SuccessRead(typeof(SpecialArgDescReader), "数値特殊指定数値初期値の数", length)); for (var i = 0; i < length; i++) { var value = status.ReadInt(); status.IncreaseIntOffset(); result.Add(value); Logger.Debug(FileIOMessage.SuccessRead(typeof(SpecialArgDescReader), $"数値特殊指定数値{i}の初期値", value)); } Logger.Debug(FileIOMessage.EndCommonRead(typeof(SpecialArgDescReader), "数値特殊指定数値初期値")); return(result); }
/// <summary> /// タイルセット設定 /// </summary> /// <param name="status">読み込み経過状態</param> /// <param name="nodes">読み込み結果格納インスタンス</param> private void ReadTreeNodeList(FileReadStatus status, out List <MapTreeNode> nodes) { // ノード数 var length = status.ReadInt(); status.IncreaseIntOffset(); Logger.Debug(FileIOMessage.SuccessRead(typeof(MapTreeDataFileReader), "マップツリーノード数", length)); nodes = new List <MapTreeNode>(); for (var i = 0; i < length; i++) { var parent = status.ReadInt(); status.IncreaseIntOffset(); Logger.Debug(FileIOMessage.SuccessRead(typeof(MapTreeDataFileReader), $"マップツリーノード{i} 親マップID", parent)); var me = status.ReadInt(); status.IncreaseIntOffset(); Logger.Debug(FileIOMessage.SuccessRead(typeof(MapTreeDataFileReader), $"マップツリーノード{i} 自身マップID", me)); nodes.Add(new MapTreeNode(me, parent)); } }
// _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ // Public Method // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ /// <summary> /// ファイルを同期的に読み込む /// </summary> /// <returns>読み込んだデータ</returns> /// <exception cref="InvalidOperationException"> /// すでにファイルを読み込んでいる場合、 /// またはファイルが正しく読み込めなかった場合 /// </exception> public override DBType ReadSync() { lock (readLock) { Logger.Info(FileIOMessage.StartFileRead(GetType())); var result = new DBType(); // ヘッダチェック ReadHeader(ReadStatus); // タイプ設定 ReadTypeSetting(ReadStatus, out var typeSetting); result.TypeName = typeSetting.TypeName; result.Memo = typeSetting.Memo; // データ設定 ReadDataSetting(ReadStatus, out var dataSetting); result.SetDataSettingType(dataSetting); result.ItemDescList.AddRange(MakeItemDescList(typeSetting, dataSetting)); result.DataDescList.Overwrite(0, MakeDataDescList(typeSetting, dataSetting)); Logger.Info(FileIOMessage.EndFileRead(GetType())); return(result); } }
/// <summary> /// データIDの設定方法 /// </summary> /// <param name="status">読み込み経過状態</param> /// <param name="setting">結果格納インスタンス</param> private void ReadDataSettingType(FileReadStatus status, DBDataSetting setting) { var typeCode = status.ReadInt(); status.IncreaseIntOffset(); var settingType = DBDataSettingType.FromValue(typeCode); Logger.Debug(FileIOMessage.SuccessRead(typeof(DBDataSettingReader), "データID設定方法", settingType)); // 「指定DBの指定タイプ」の場合、DB種別とタイプIDを取り出す DBKind dbKind = null; TypeId typeId = 0; if (settingType == DBDataSettingType.DesignatedType) { dbKind = DbKindFromSettingTypeCode(typeCode); Logger.Debug(FileIOMessage.SuccessRead(typeof(DBDataSettingReader), "DB種別", dbKind)); typeId = TypeIdFromSettingTypeCode(typeCode); Logger.Debug(FileIOMessage.SuccessRead(typeof(DBDataSettingReader), "タイプID", typeId)); } setting.SetDataSettingType(settingType, dbKind, typeId); }
// _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ // Public Method // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ /// <summary> /// ファイルを同期的に読み込む /// </summary> /// <returns>読み込んだデータ</returns> /// <exception cref="InvalidOperationException"> /// すでにファイルを読み込んでいる場合、 /// またはファイルが正しく読み込めなかった場合 /// </exception> public DatabaseMergedData ReadSync() { lock (readLock) { Logger.Info(FileIOMessage.StartFileRead(GetType())); if (!(Data is null)) { throw new InvalidOperationException( $"すでに読み込み完了しています。"); } var datFileReader = new DatabaseDatFileReader(DatFilePath, DbKind); var dataSettingList = datFileReader.ReadSync().SettingList; var projectFile = new DatabaseProjectFileReader(ProjectFilePath, DbKind); var typeSettingList = projectFile.ReadSync().TypeSettingList; Data = new DatabaseMergedData(typeSettingList, dataSettingList); Logger.Info(FileIOMessage.EndFileRead(GetType())); return(Data); } }
/// <summary> /// タイルセットID /// </summary> /// <param name="status">読み込み経過状態</param> /// <param name="mapData">データ格納マップデータインスタンス</param> private void ReadTileSetId(FileReadStatus status, MapData mapData) { mapData.TileSetId = status.ReadInt(); status.IncreaseIntOffset(); Logger.Debug(FileIOMessage.SuccessRead(typeof(MpsFileReader), "タイルセットID", mapData.TileSetId)); }
/// <summary> /// 文字列引数の数 /// </summary> /// <param name="status">読み込み経過状態</param> /// <param name="commonEvent">結果格納インスタンス</param> private void ReadStringArgLength(FileReadStatus status, CommonEvent commonEvent) { commonEvent.StrArgsLength = status.ReadByte(); status.IncreaseByteOffset(); Logger.Debug(FileIOMessage.SuccessRead(typeof(CommonEventReader), "文字列引数の数", commonEvent.StrArgsLength)); }
/// <summary> /// コモンイベントID /// </summary> /// <param name="status">読み込み経過状態</param> /// <param name="commonEvent">結果格納インスタンス</param> private void ReadCommonEventId(FileReadStatus status, CommonEvent commonEvent) { commonEvent.Id = status.ReadInt(); status.IncreaseIntOffset(); Logger.Debug(FileIOMessage.SuccessRead(typeof(CommonEventReader), "コモンイベントID", commonEvent.Id)); }
/// <summary> /// マップサイズ縦 /// </summary> /// <param name="status">読み込み経過状態</param> /// <param name="mapData">データ格納マップデータインスタンス</param> private void ReadMapSizeHeight(FileReadStatus status, MapData mapData) { mapData.UpdateMapSizeHeight(status.ReadInt()); status.IncreaseIntOffset(); Logger.Debug(FileIOMessage.SuccessRead(typeof(MpsFileReader), "マップサイズ縦", mapData.MapSizeHeight)); }
/// <summary> /// 起動条件右辺 /// </summary> /// <param name="status">読み込み経過状態</param> /// <param name="condition">結果格納インスタンス</param> private void ReadBootConditionRightSide(FileReadStatus status, CommonEventBootCondition condition) { condition.RightSide = status.ReadInt(); status.IncreaseIntOffset(); Logger.Debug(FileIOMessage.SuccessRead(typeof(CommonEventReader), "起動条件右辺", condition.RightSide)); }
/// <summary> /// メモ /// </summary> /// <param name="status">読み込み経過状態</param> /// <param name="commonEvent">結果格納インスタンス</param> private void ReadMemo(FileReadStatus status, CommonEvent commonEvent) { var str = status.ReadString(); commonEvent.Memo = str.String; status.AddOffset(str.ByteLength); Logger.Debug(FileIOMessage.SuccessRead(typeof(CommonEventReader), "メモ", commonEvent.Memo)); }
/// <summary> /// コモンイベント名 /// </summary> /// <param name="status">読み込み経過状態</param> /// <param name="commonEvent">結果格納インスタンス</param> private void ReadCommonEventName(FileReadStatus status, CommonEvent commonEvent) { var commonEventName = status.ReadString(); commonEvent.Name = commonEventName.String; status.AddOffset(commonEventName.ByteLength); Logger.Debug(FileIOMessage.SuccessRead(typeof(CommonEventReader), "コモンイベント名", commonEvent.Name)); }
// _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ // Public Method // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ /// <summary> /// タイルセット設定を読み込み、返す。 /// </summary> /// <exception cref="InvalidOperationException">ファイルが仕様と異なる場合</exception> public TileSetSetting Read() { Logger.Debug(FileIOMessage.StartCommonRead(GetType(), "")); var result = ReadOneTileSetSetting(Status); Logger.Debug(FileIOMessage.EndCommonRead(GetType(), "")); return(result); }
/// <summary> /// メモ前の文字列 /// </summary> /// <param name="status">読み込み経過状態</param> /// <param name="commonEvent">結果格納インスタンス</param> private void ReadBeforeMemoString(FileReadStatus status, CommonEvent commonEvent) { var str = status.ReadString(); commonEvent.Description = str.String; status.AddOffset(str.ByteLength); Logger.Debug(FileIOMessage.SuccessRead(typeof(CommonEventReader), "メモ前の文字列", commonEvent.Description)); }
/// <summary> /// ヘッダ文字列 /// </summary> /// <param name="status">読み込み経過状態</param> /// <param name="mapData">データ格納マップデータインスタンス</param> private void ReadHeaderMemo(FileReadStatus status, MapData mapData) { var woditorString = status.ReadString(); mapData.Memo = woditorString.String; status.AddOffset(woditorString.ByteLength); Logger.Debug(FileIOMessage.SuccessRead(typeof(MpsFileReader), "ヘッダ文字列", mapData.Memo)); }
/// <summary> /// メモ /// </summary> /// <param name="status">読み込み経過状態</param> /// <param name="setting">結果格納インスタンス</param> private void ReadMemo(FileReadStatus status, DBTypeSetting setting) { var memo = status.ReadString(); setting.Memo = memo.String; status.AddOffset(memo.ByteLength); Logger.Debug(FileIOMessage.SuccessRead(typeof(DBTypeSettingReader), "メモ", memo.String)); }
/// <summary> /// フッタ文字列 /// </summary> /// <param name="status">読み込み経過状態</param> /// <param name="commonEvent">結果格納インスタンス</param> private void ReadFooterString(FileReadStatus status, CommonEvent commonEvent) { var footerString = status.ReadString(); status.AddOffset(footerString.ByteLength); commonEvent.FooterString = footerString.String; Logger.Debug(FileIOMessage.SuccessRead(typeof(CommonEventReader), "フッタ文字列", commonEvent.FooterString)); }
/// <summary> /// タイプ名 /// </summary> /// <param name="status">読み込み経過状態</param> /// <param name="setting">結果格納インスタンス</param> private void ReadTypeName(FileReadStatus status, DBTypeSetting setting) { var typeName = status.ReadString(); setting.TypeName = typeName.String; status.AddOffset(typeName.ByteLength); Logger.Debug(FileIOMessage.SuccessRead(typeof(DBTypeSettingReader), "タイプ名", setting.TypeName)); }
/// <summary> /// 基本タイルセットファイル名 /// </summary> /// <param name="status">読み込み経過状態</param> /// <param name="fileName">結果格納インスタンス</param> private void ReadBaseTileSetFileName(FileReadStatus status, out BaseTileSetFileName fileName) { var read = status.ReadString(); fileName = read.String; status.AddOffset(read.ByteLength); Logger.Debug(FileIOMessage.SuccessRead(typeof(TileSetSettingReader), "基本タイルセットファイル名", fileName)); }
/// <summary> /// ラベル色 /// </summary> /// <param name="status">読み込み経過状態</param> /// <param name="commonEvent">結果格納インスタンス</param> private void ReadLabelColor(FileReadStatus status, CommonEvent commonEvent) { var colorNumber = status.ReadInt(); status.IncreaseIntOffset(); commonEvent.LabelColor = CommonEventLabelColor.FromInt(colorNumber); Logger.Debug(FileIOMessage.SuccessRead(typeof(CommonEventReader), "ラベル色", commonEvent.LabelColor)); }
/// <summary> /// 返戻値の意味 /// </summary> /// <param name="status">読み込み経過状態</param> /// <param name="commonEvent">結果格納インスタンス</param> private void ReadReturnValueDescription(FileReadStatus status, CommonEvent commonEvent) { var description = status.ReadString(); status.AddOffset(description.ByteLength); commonEvent.ReturnValueDescription = description.String; Logger.Debug(FileIOMessage.SuccessRead(typeof(CommonEventReader), "返戻値の意味", commonEvent.ReturnValueDescription)); }
/// <summary> /// 返戻セルフ変数インデックス /// </summary> /// <param name="status">読み込み経過状態</param> /// <param name="commonEvent">結果格納インスタンス</param> private void ReadReturnVariableIndex(FileReadStatus status, CommonEvent commonEvent) { var index = status.ReadInt(); status.IncreaseIntOffset(); commonEvent.SetReturnVariableIndex(index); Logger.Debug(FileIOMessage.SuccessRead(typeof(CommonEventReader), "返戻セルフ変数インデックス", index)); }