/// <summary> /// 지정된 이름의 파일로부터 SIMONObject target에 대한 History Record를 전부 로드해서 2차원 배열로 반환합니다. /// </summary> /// <param name="fileName">history를 불러올 대상 파일입니다.</param> /// <param name="sObject">대상 targetObject입니다.</param> /// <returns>history를 반환할 2차원 배열 map.</returns> public SIMONProperty[][] LoadHistory(string fileName, SIMONObject targetObject) { SIMONDataIOCommand ioCmd = new SIMONDataIOCommand(); ioCmd.order = SIMONDataIO.READ; ioCmd.fileName = fileName; ioCmd.contents = ""; IAsyncResult aResult = SimonDataManager.Service(ref ioCmd); bool readErr = false; string readStr = ""; int lineCnt = 0; SimonDataManager.ReadResult(ref readErr, ref readStr, ref lineCnt, aResult); char delimiter = ','; SIMONProperty[][] historyData = new SIMONProperty[lineCnt][]; for (int i = 0; i < lineCnt; i++) { historyData[i] = new SIMONProperty[targetObject.Properties.Count]; for (int j = 0; j < targetObject.Properties.Count; j++) historyData[i][j] = new SIMONProperty(); } int prevDelimIdx = 0; int propIdx = 0; int historyLineIdx = 0; for (int i = 0; i < readStr.Length; i++) { if (readStr[i].Equals(delimiter)) { string sVal = ""; for (int j = prevDelimIdx+1; j < i; j++) { sVal += readStr[j]; } double dval = Double.Parse(sVal); prevDelimIdx = i; historyData[historyLineIdx][propIdx].PropertyName = targetObject.Properties[propIdx].PropertyName; historyData[historyLineIdx][propIdx].PropertyValue = dval; propIdx++; } if (propIdx == targetObject.Properties.Count) { historyLineIdx++; propIdx = 0; } } return historyData; }
/// <summary> /// fileName 을 경로로 하는 히스토리 파일에 대해서 targetObject의 프로퍼티 내용들을 기록합니다. /// </summary> /// <param name="fileName">History를 저장할 파일의 이름입니다.</param> /// <param name="targetObject">History로 만들 대상 SIMONObject입니다.</param> public void SaveHistory(string fileName, SIMONObject targetObject) { SIMONDataIOCommand iocmd = new SIMONDataIOCommand(); iocmd.order = SIMONDataIO.WRITE; iocmd.fileName = System.IO.Directory.GetCurrentDirectory() + fileName; iocmd.contents = ""; string delimiter = ","; string linefeed = "\n"; if (!File.Exists(iocmd.fileName)) { for (int i = 0; i < targetObject.Properties.Count; i++) iocmd.contents += targetObject.Properties[i].PropertyName + delimiter; iocmd.contents += linefeed; } for (int i = 0; i < targetObject.Properties.Count; i++) iocmd.contents += targetObject.Properties[i].PropertyValue + delimiter; iocmd.contents += linefeed; IAsyncResult aResult = SimonDataManager.Service(ref iocmd); bool error = false; SimonDataManager.WriteResult(ref error, aResult); }
/// <summary> /// 주문을 받아서 비동기 파일 입출력에 대한 서비스를 실행해주는 함수입니다. /// </summary> /// <param name="data">입력받는 Request에 대한 참조입니다.</param> /// <returns>비동기 작업결과입니다.</returns> public IAsyncResult Service(ref SIMONDataIOCommand data) { //주문(order)을 받아서 서비스를 실행함. 서비스의 결과를 리턴해줘야함. bool serviceChecker = false; IAsyncResult serviceResult = null; int lineCount = 0; //비동기 루틴을 실행하고 AsyncResult를 반환한다. if (data.order.Equals(SIMONDataIO.READ)) { serviceResult = AsyncRead.BeginInvoke(data.fileName, ref serviceChecker, ref lineCount, null, null); } else if (data.order.Equals(SIMONDataIO.WRITE)) { serviceResult = AsyncWrite.BeginInvoke(data.fileName, data.contents, ref serviceChecker, null, null); } return serviceResult; }