//确认已接收 public virtual bool ackDataSwap(dynamic ackInfo) { if (_useAck == false) { return(false); } if (ackInfo == null) { return(false); } var fileName = ackInfo.tagAck.Value + ""; if (fileName == "") { return(false); } if (!_ackInfos.ContainsKey(fileName)) { return(false); } DataSwap_AckInfo pAckInfo = _ackInfos[fileName]; pAckInfo.IsAcked = true; pAckInfo.TimeAcked = DateTime.Now; if (this.SwapData_BackUp(pAckInfo.Path, "")) { _ackInfos.Remove(fileName); } return(true); }
//判断是否需要确认 public virtual bool checkNeedAck(string fileName) { if (_useAck == false) { return(false); } if (!_ackInfos.ContainsKey(fileName)) { return(false); } DataSwap_AckInfo pAckInfo = _ackInfos[fileName]; bool bAcked = false; if (pAckInfo.IsAcked) { bAcked = true; if (this.SwapData_BackUp(pAckInfo.Path, "")) { _ackInfos.Remove(fileName); } } else { DateTime dtNow = DateTime.Now; if ((dtNow - pAckInfo.Time).TotalSeconds > 10) { pAckInfo.Retrys += 1; } else { bAcked = true; } //重试过多则忽略 if (pAckInfo.Retrys > 10) { bAcked = true; this.SwapData_BackUp(pAckInfo.Path, ""); } } return(bAcked); }
public override List <dynamic> SwapData_In(int nStepSwaps = 1) { Console.WriteLine("DataSwap IOFiles::"); Console.WriteLine("\t" + _dirSwap); int result = 0, nums = 0; List <string> errs = new List <string>(); List <dynamic> lstDatas = new List <dynamic>(); nStepSwaps = nStepSwaps <= 0 ? int.MaxValue : nStepSwaps; var provider = new PhysicalFileProvider(_dirSwap); var contents = provider.GetDirectoryContents(string.Empty); Console.WriteLine("\tSwap IOFiles(" + contents.Count() + ")"); foreach (var item in contents) { if (item.IsDirectory) { continue; } if (_delayedTime > 0) //解析时间并校检 { if ((DateTime.Now - item.LastModified.LocalDateTime).TotalSeconds > _delayedTime) { this.SwapData_BackUp(item.PhysicalPath, _dirSwap_back); continue; } } string strExtension = System.IO.Path.GetExtension(item.Name); if (strExtension != ".json" && strExtension != ".geojson") { continue; } if (item.Name.Substring(0, _tagName.Length) != _tagName) { continue; } if (this.checkNeedAck(item.Name)) { continue; } using (System.IO.StreamReader file = System.IO.File.OpenText(item.PhysicalPath)) { Console.WriteLine("\tnew file swap:: " + item.PhysicalPath); using (JsonTextReader reader = new JsonTextReader(file)) { //循环解析文件json数据 JObject jsonFile = (JObject)JToken.ReadFrom(reader); if (jsonFile["datas"] != null) { JArray jsonDatas = (JArray)jsonFile["datas"]; List <dynamic> lstData = new List <dynamic>(); foreach (var jsonData in jsonDatas) { var res = this.CreateData_ClassObj(jsonData); lstData.Add(res); } var data = new { path = file, fileData = lstData }; lstDatas.Add(new { tagAck = item.Name, filePath = item.PhysicalPath, dataInfo = jsonFile }); } else { var data = new { path = file, fileData = jsonFile }; lstDatas.Add(new { tagAck = item.Name, filePath = item.PhysicalPath, dataInfo = jsonFile }); } } //记录Ackinfo if (_useAck) { var ackInfo = new DataSwap_AckInfo(item.PhysicalPath, DateTime.Now); _ackInfos[item.Name] = ackInfo; } else { this.SwapData_BackUp(item.PhysicalPath, _dirSwap_back); // 备份文件 } nums++; if (nums >= nStepSwaps) { break; } } } Console.WriteLine("DataSwap IOFiles End." + "\tMargin Swap IOFiles(" + (contents.Count()) + ")\n"); return(lstDatas); }