public async Task Start(Action <DataPreprocessorOptions> action) { Stopped = false; var options = new DataPreprocessorOptions(); if (action == null) { throw new ArgumentNullException(); } action.Invoke(options); long completed = 0; FileInfo fileInfo = null; if (string.IsNullOrWhiteSpace(options.DataFileName) || string.IsNullOrWhiteSpace(options.PDataFileName)) { throw new ArgumentException(); } var chunks = XmlDataFilesStorage.GetAsyncChunks(options.DataFileName); var ptdList = new List <PTurnData>(); await foreach (var chunk in chunks) { ptdList.AddRange(GetPTurnData(chunk)); if (ptdList.Count >= PTurnOptions.BufferSize) { await TurnDataFilesStorage.WriteAsync(options.PDataFileName, ptdList.ToArray()); fileInfo ??= await GetFileInfoAsync(options.DataFileName); completed += PTurnOptions.BufferSize * GetUnitSize(ptdList[0]); if (Stopped) { if (OnPreprocessorStop != null) { OnPreprocessorStop.Invoke(new PreprocessorTracker(completed, fileInfo.Length)); } break; } else if (OnPreprocessorChanged != null) { OnPreprocessorChanged.Invoke(new PreprocessorTracker(completed, fileInfo.Length)); } ptdList.Clear(); } } }
public async Task SaveAsync(string fileName, bool validateDataFile = false) { if (string.IsNullOrWhiteSpace(fileName)) { throw new ArgumentException(); } if (XmlDataFilesStorage.Exists(fileName) && validateDataFile && !(await XmlDataFilesStorage.ValidateXmlFile(fileName))) { throw new InvalidOperationException("Invalid xml data format"); } var xmlStr = GetXmlString(); await XmlDataFilesStorage.WriteXmlAsync(fileName, xmlStr); PlayDataList.Clear(); }
private async Task <FileInfo> GetFileInfoAsync(string fileName) { return(await XmlDataFilesStorage.GetFileInfoAsync(fileName)); }