Ejemplo n.º 1
0
        //确认已接收
        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);
        }
Ejemplo n.º 2
0
        //判断是否需要确认
        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);
        }
Ejemplo n.º 3
0
        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);
        }