Esempio n. 1
0
        /// <summary>数据交换-泵出(线程处理蹦出数据)
        /// </summary>
        /// <param name="nStepSwaps"></param>
        /// <param name="nFrequency"></param>
        /// <returns></returns>
        protected virtual bool thrdSwapData_Out(int nStepSwaps = 1, int nFrequency = 1000)
        {
            while (_nSteps != 0)
            {
                try
                {
                    _nSteps--;
                    AckInfo        ackInfo  = null;
                    List <dynamic> lstDatas = SwapData_In(nStepSwaps, out ackInfo);

                    if (this.SwapData_Change != null)
                    {
                        if (lstDatas.Count > 0)
                        {
                            this.SwapData_Change(this, this.CreateDataSwap_EventArgs(lstDatas, ackInfo));
                        }
                    }
                    Thread.Sleep(nFrequency);         //模拟长时间运算

                    //确认操作监测、修正
                    this.SwapData_Check();
                }
                catch (Exception e)
                {
                    Console.WriteLine("Error(DataSwap IOFiles):" + e.ToString());
                    //throw;
                }
            }
            return(true);
        }
Esempio n. 2
0
        /// <summary>确认操作
        /// </summary>
        /// <param name="ackInfo"></param>
        /// <returns></returns>
        public virtual bool SwapData_Ack(dynamic ackTag)
        {
            if (!_useAck)
            {
                return(false);
            }
            AckInfo pAckInfo = SwapData_AckQuery(ackTag);

            if (pAckInfo != null)
            {
                pAckInfo.Acked = true;
                return(true);
            }
            return(false);
        }
Esempio n. 3
0
        /// <summary>缓存确认信息
        /// </summary>
        /// <param name="ackInfo"></param>
        /// <returns></returns>
        protected virtual bool SwapData_Buffer(string ackTag, dynamic ackInfo)
        {
            if (!_useAck)
            {
                return(false);
            }
            var query = _ackInfo.Where(e => e.AckTag == ackTag);

            if (query.Count() == 0)
            {
                AckInfo pAckInfo = new AckInfo(ackTag, ackInfo);
                _ackInfo.Add(pAckInfo);
                return(true);
            }
            return(false);
        }
Esempio n. 4
0
        /// <summary>是否缓存确认信息
        /// </summary>
        /// <param name="ackInfo"></param>
        /// <returns></returns>
        protected virtual bool SwapData_AckNeed(dynamic ackTag)
        {
            if (!_useAck)
            {
                return(false);
            }
            AckInfo pAckInfo = SwapData_AckQuery(ackTag);

            if (pAckInfo != null)
            {
                if (!pAckInfo.Acked)
                {
                    return(true);
                }
            }
            return(false);
        }
Esempio n. 5
0
        /// <summary>创建数据交换事件对象
        /// </summary>
        /// <param name="datas"></param>
        /// <param name="ackInfo"></param>
        /// <returns></returns>
        protected internal DataSwap_Event CreateDataSwap_EventArgs(List <dynamic> datas, AckInfo ackInfo = null)
        {
            DataSwap_Event pArgs = new DataSwap_Event();

            pArgs._Datas   = datas;
            pArgs._AckInfo = ackInfo;
            return(pArgs);
        }
Esempio n. 6
0
 /// <summary>数据交换-泵入
 /// </summary>
 /// <param name="nStepSwaps">交换数据数量</param>
 /// <param name="ackInfo">交换确认信息</param>
 /// <returns></returns>
 public virtual List <dynamic> SwapData_In(int nStepSwaps, out AckInfo ackInfo)
 {
     ackInfo = null;
     return(null);
 }
Esempio n. 7
0
        public override List <dynamic> SwapData_In(int nStepSwaps, out AckInfo ackInfo)
        {
            int nums = 0;

            ackInfo = null;
            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).OrderBy(e => e.Name);  //升序排序

            if (contents.Count() > 0)
            {
                if (_canDebug)
                {
                    Console.WriteLine(DateTime.Now.ToLongTimeString() + "  DataSwap IOFiles::");
                    Console.WriteLine("\t" + _dirSwap);
                    Console.WriteLine("\tSwap IOFiles(" + contents.Count() + ")");
                }
                foreach (var item in contents)
                {
                    if (SwapData_AckNeed(item.PhysicalPath))
                    {
                        continue;
                    }
                    if (item.IsDirectory)
                    {
                        continue;
                    }
                    if (_delayedTime > 0)  //解析时间并校检
                    {
                        if ((DateTime.Now - item.LastModified.LocalDateTime).TotalSeconds > _delayedTime)
                        {
                            this.SwapData_BackUp(item.PhysicalPath, _dirSwap_back);
                            continue;
                        }
                    }
                    if (item.Length == 0)
                    {
                        File.Delete(item.PhysicalPath);
                        continue;
                    }

                    string strExtension = System.IO.Path.GetExtension(item.Name);
                    if (strExtension != ".json" && strExtension != ".geojson")
                    {
                        continue;
                    }
                    if (item.Name.Substring(0, _tagName.Length) != _tagName)
                    {
                        continue;
                    }

                    using (System.IO.StreamReader file = System.IO.File.OpenText(item.PhysicalPath))
                    {
                        if (_canDebug)
                        {
                            Console.WriteLine("\tnew file swap:: " + item.PhysicalPath);
                        }
                        using (JsonTextReader reader = new JsonTextReader(file))
                        {
                            //循环解析文件json数据
                            JToken jsonFile  = JToken.ReadFrom(reader);
                            JArray jsonDatas = null;

                            //提取数据,兼容多种格式
                            if (jsonFile.Type == JTokenType.Array)
                            {
                                jsonDatas = (JArray)jsonFile;
                            }
                            else
                            {
                                jsonDatas = (JArray)jsonFile["datas"];
                            }

                            //循环生成数据对象
                            foreach (var jsonData in jsonDatas)
                            {
                                var data = this.CreateData_ClassObj(jsonData);
                                lstDatas.Add(data);
                            }
                        }
                        if (this.SwapData_BackUp(item.PhysicalPath, _dirSwap_back)) // 备份文件
                        {
                            if (_useAck)                                            //生成确认信息
                            {
                                ackInfo = new AckInfo(item.Name, item.PhysicalPath);
                            }
                            this.SwapData_Buffer(item.Name, item.PhysicalPath);
                        }
                        nums++;
                        if (nums >= nStepSwaps)
                        {
                            break;
                        }
                    }
                }

                if (_canDebug)
                {
                    Console.WriteLine("DataSwap IOFiles End." + "\tMargin Swap IOFiles(" + (contents.Count()) + ")\n");
                }
            }
            return(lstDatas);
        }