Beispiel #1
0
        /// <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;
        }
Beispiel #2
0
        /// <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;
        }