예제 #1
0
 static void Main()
 {
     H调试.初始化();
     H日志输出.设置(__日志 => H调试.记录(__日志.概要, __日志.等级, __日志.详细, __日志.方法, __日志.文件, __日志.行号), TraceEventType.Warning);
     Application.EnableVisualStyles();
     Application.SetCompatibleTextRenderingDefault(false);
     Application.Run(new F主窗口());
 }
        public DGPS数据()
        {
            _连接字符串 = new SqlConnectionStringBuilder
            {
                DataSource         = H程序配置.获取字符串("数据库地址"),
                UserID             = H程序配置.获取字符串("数据库账号"),
                Password           = H程序配置.获取字符串("数据库密码"),
                InitialCatalog     = H程序配置.获取字符串("数据库名称"),
                IntegratedSecurity = false,
                UserInstance       = false,
            }.ToString();

            Let.Us.Retry(1000, 100, null, exs => H调试.记录致命("建最后位置表失败:" + exs.Last().Message)).Do(() =>
            {
                using (var __连接 = new SqlConnection(_连接字符串))
                {
                    SQLHelper.ExecuteNonQuery(__连接, _建最后位置表);
                }
            });
            DataTable __位置表;
            Dictionary <int, DataRow> __位置映射;

            _最后位置 = 查询最后位置(out __位置表, out __位置映射);

            Task.Factory.StartNew(() =>
            {
                var __当前表 = "";
                while (true)
                {
                    var __更新数量 = 0;
                    Let.Us.DoAndSleep(_批量增加GPS频率, __耗时 => H调试.记录(string.Format("批量增加GPS {1} 条, 耗时 {0} 毫秒", __耗时, __更新数量)))
                    .Do(() => __更新数量 = 批量增加GPS(ref __当前表));
                }
            });

            Task.Factory.StartNew(() =>
            {
                while (true)
                {
                    var __更新数量 = 0;
                    Let.Us.DoAndSleep(_批量更新最后GPS频率, __耗时 => H调试.记录(string.Format("批量更新最后GPS {1} 条, 耗时 {0} 毫秒", __耗时, __更新数量)))
                    .Do(() => { __更新数量 = 批量更新最后GPS(__位置表, __位置映射); });

                    //var __秒表 = new Stopwatch();
                    //__秒表.Start();
                    //var __更新数量 = 批量更新最后GPS(__位置表, __位置映射);
                    //__秒表.Stop();
                    //H调试.记录(string.Format("批量更新最后GPS {1} 耗时 {0} 毫秒", __秒表.Elapsed.TotalMilliseconds, __更新数量));
                    //var __休眠 = _批量更新最后GPS频率 - (int)__秒表.Elapsed.TotalMilliseconds;
                    //if (__休眠 > 0)
                    //{
                    //    Thread.Sleep(__休眠);
                    //}
                }
            });
        }
예제 #3
0
 void _IV_请求隐藏号码(string __号码)
 {
     if (!_当前显示号码集.ContainsKey(__号码))
     {
         H调试.记录(_类型名 + ": _IV_请求隐藏号码", __号码 + "不在当前显示号码集中");
         return;
     }
     if (_当前显示号码集[__号码].绘图标识.HasValue)
     {
         _IF地图.除点(_当前显示号码集[__号码].绘图标识.Value);
     }
     _当前显示号码集.Remove(__号码);
 }
예제 #4
0
        void 开始加载()
        {
            H调试.记录(_类型名 + ": 开始加载");

            //订阅事件
            _IB订阅.位置更新      += _IB订阅_GPS数据上报;
            _IB订阅.GPS更新状态变化 += _IB订阅_GPS更新状态变化;
            _IV.处理定位号码       = _IV_请求定位号码;
            _IV.处理定位号码集      = _IV_请求定位号码集;
            _IV.处理显示号码       = _IV_请求显示号码;
            _IV.处理显示号码集      = _IV_请求显示号码集;
            _IV.处理隐藏号码       = _IV_请求隐藏号码;
            _IV.处理隐藏号码集      = _IV_请求隐藏号码集;
            _IV.处理矩形圈选结束     = _IV_矩形圈选结束;
            _IV.处理圆形圈选结束     = _IV_圆形圈选结束;

            _IF地图      = _IV.IF地图;
            _IF地图.进入点 += IF地图_进入点;
            _IF地图.离开点 += IF地图_离开点;
            _IF地图.单击点 += IF地图_单击点;

            //初始化资源
            var __地图路径列表 = _IB地图路径.查询();

            if (__地图路径列表.Count == 0)
            {
                _IV.显示操作失败("拷贝地图文件到程序目录的\"GIS资源\\离线地图\"目录!");
            }
            else if (!__地图路径列表.Values.ToList().Contains(true))
            {
                _IV.显示操作失败("请配置地图路径!");
            }
            else
            {
                try
                {
                    foreach (var kv in __地图路径列表)
                    {
                        if (kv.Value)
                        {
                            _IV.IF地图.加载地图(kv.Key);
                        }
                    }
                    _IV.IF地图.应用地图(_IV.IF地图.所有地图源[0]);
                }
                catch (Exception ex)
                {
                    _IV.显示操作失败(ex.Message);
                }
            }
        }
예제 #5
0
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);

            this.out标题.Text += " " + Assembly.GetExecutingAssembly().GetName().Version;

            this.out设备列表.ShowNodeToolTips      = true;
            this.out设备列表.NodeMouseDoubleClick += out设备列表_NodeMouseDoubleClick;

            this.do设备_断开.Click     += do设备_断开_Click;
            this.out设备菜单.Opening   += out设备菜单_Opening;
            this.out设备列表.MouseDown += TV_MouseDown;

            this.do编辑设备.Click += do编辑设备_Click;
            this.do折叠.Click   += (sender, e1) => this.splitContainer1.Panel1Collapsed = !this.splitContainer1.Panel1Collapsed;

            H日志输出.设置(__日志 => H调试.记录(__日志.概要, __日志.等级, __日志.详细, __日志.方法, __日志.文件, __日志.行号));

            加载设备列表();
        }
예제 #6
0
 void _IV_请求隐藏号码(string __号码)
 {
     lock (m_lock)
     {
         var __已显示 = _当前显示号码集.ContainsKey(__号码);
         if (!__已显示)
         {
             H调试.记录(_类型名 + ": _IV_请求隐藏号码", __号码 + "不在当前显示号码集中");
             return;
         }
         if (_当前显示号码集[__号码].绘图标识.HasValue)
         {
             _IF地图.除点(_当前显示号码集[__号码].绘图标识.Value);
         }
         if (_当前显示号码集.ContainsKey(__号码))
         {
             _当前显示号码集.Remove(__号码);
         }
     }
 }
예제 #7
0
        void _IV_请求隐藏号码(string __号码)
        {
            m_lock.EnterReadLock();
            var __已显示 = _当前显示号码集.ContainsKey(__号码);

            if (!__已显示)
            {
                H调试.记录(_类型名 + ": _IV_请求隐藏号码", __号码 + "不在当前显示号码集中");
                m_lock.ExitReadLock();
                return;
            }
            if (_当前显示号码集[__号码].绘图标识.HasValue)
            {
                _IF地图.除点(_当前显示号码集[__号码].绘图标识.Value);
            }
            m_lock.ExitReadLock();

            m_lock.EnterWriteLock();
            if (_当前显示号码集.ContainsKey(__号码))
            {
                _当前显示号码集.Remove(__号码);
            }
            m_lock.ExitWriteLock();
        }
예제 #8
0
 void 初始化()
 {
     H调试.记录(_类型名 + ": 初始化");
 }
예제 #9
0
        public DGPS数据()
        {
            _连接字符串 = new SqlConnectionStringBuilder
            {
                DataSource         = H程序配置.获取字符串("数据库地址"),
                UserID             = H程序配置.获取字符串("数据库账号"),
                Password           = H程序配置.获取字符串("数据库密码"),
                InitialCatalog     = H程序配置.获取字符串("数据库名称"),
                IntegratedSecurity = false,
                UserInstance       = false,
            }.ToString();

            Let.Us.Retry(1000, 100, null, exs => H调试.记录致命("建最后位置表失败:" + exs.Last().Message)).Do(() =>
            {
                using (var __连接 = new SqlConnection(_连接字符串))
                {
                    SQLHelper.ExecuteNonQuery(__连接, _建最后位置表);
                }
            });

            _最后位置 = 查询最后位置();
            Task.Factory.StartNew(() =>
            {
                var __当前表 = "";
                while (true)
                {
                    try
                    {
                        var __更新数量 = 0;
                        Let.Us.DelayAfter(_批量增加GPS频率, __耗时 =>
                        {
                            if (__耗时 > 1000)
                            {
                                H调试.记录(string.Format("批量增加GPS {1} 条, 耗时 {0} 毫秒", __耗时, __更新数量));
                            }
                        })
                        .Do(() => __更新数量 = 批量增加GPS(ref __当前表));
                    }
                    catch (Exception ex)
                    {
                        H调试.记录异常(ex);
                    }
                }
            });

            Task.Factory.StartNew(() =>
            {
                while (true)
                {
                    try
                    {
                        var __更新数量 = 0;
                        Let.Us.DelayAfter(_批量更新最后GPS频率, __耗时 =>
                        {
                            if (__耗时 > 1000)
                            {
                                H调试.记录(string.Format("批量更新最后GPS {1} 条, 耗时 {0} 毫秒", __耗时, __更新数量));
                            }
                        })
                        .Do(() => { __更新数量 = 批量更新最后GPS(); });
                    }
                    catch (Exception ex)
                    {
                        H调试.记录异常(ex);
                    }
                }
            });
        }
예제 #10
0
        static void Main()
        {
            H调试.初始化();
            H日志输出.设置(__日志 => H调试.记录(__日志.概要, __日志.等级, __日志.详细, __日志.方法, __日志.文件, __日志.行号), TraceEventType.Warning);
            var __服务端列表 = new List <IT服务端>();
            var __随机数   = new Random();

            for (int __端口 = 8001; __端口 <= 8001; __端口++)
            {
                #region 初始化环境
                IT服务端 __IT服务端 = FT通用访问工厂.创建服务端();
                __IT服务端.端口 = __端口;
                __服务端列表.Add(__IT服务端);
                #endregion

                #region 配置通用命令
                var __标识 = __端口.ToString();
                H容器.注入 <IB名片_S, B名片_S>(true, true, __标识, __IT服务端);
                H容器.注入 <IB系统_S, B系统_S>(true, true, __标识, __IT服务端);
                H容器.注入 <IB状态_S, B状态_S>(true, true, __标识, __IT服务端);
                H容器.注入 <IBFTP_S, BFTP_S>(true, true, __标识, __IT服务端);

                H容器.取出 <IB名片_S>(__标识).初始化(
                    new M名片 {
                    称 = "设备1", 描述 = "描述1", 版本号 = "1.0.0.0", 版本时间 = DateTime.Now.ToString()
                },
                    new List <M参数> {
                    new M参数("IP列表", "192.168.1.1,202.195.114.1"), new M参数("系统", "Windows 7")
                });
                H容器.取出 <IB状态_S>(__标识).初始化(null, DateTime.Now);
                H容器.取出 <IBFTP_S>(__标识);
                H容器.取出 <IB系统_S>(__标识).初始化(() =>
                {
                    Console.WriteLine("重启");
                }, () =>
                {
                    Console.WriteLine("关闭");
                }, () =>
                {
                    Console.WriteLine("查询版本记录");
                    return(new List <M版本记录>
                    {
                        new M版本记录 {
                            版本号 = "1.0.0.0", 修改记录 = "xxx", 标签 = new List <string> {
                                "a", "b"
                            }
                        },
                        new M版本记录 {
                            版本号 = "1.0.1.0", 修改记录 = "yyy", 标签 = new List <string> {
                                "a1", "b1"
                            }
                        },
                    });
                });

                #endregion

                #region 交互
                //H容器.取出<IBFTP_S>(__标识).开启();
                H容器.取出 <IB状态_S>(__标识).设置属性("类别1", "属性1", () => new M业务概要 {
                    类别 = "类别1", 属性 = "属性1", 当前值 = "1", 正常 = true
                });
                H容器.取出 <IB状态_S>(__标识).设置属性("类别1", "属性2", () => new M业务概要 {
                    类别 = "类别1", 属性 = "属性2", 当前值 = "1", 正常 = false
                });
                Task.Factory.StartNew(() =>
                {
                    for (int i = 0; i < 100; i++)
                    {
                        if (i % 8 < 4)
                        {
                            H容器.取出 <IB状态_S>(__标识).新增告警(new M上报告警
                            {
                                标识     = i.ToString(),
                                产生时间   = DateTime.Now,
                                来源设备类型 = "来源设备类型",
                                来源设备标识 = "来源设备标识",
                                重要性    = (通用命令.状态.E重要性)(i % 4),
                                类别     = "类别",
                                描述     = "描述",
                                原因     = "原因",
                                解决方案   = "解决方案"
                            });
                        }
                        else
                        {
                            H容器.取出 <IB状态_S>(__标识).清除告警(new M上报清除
                            {
                                标识     = (i / 8 * 8 + (8 - i % 8)).ToString(),
                                来源设备类型 = "来源设备类型",
                                来源设备标识 = "来源设备标识",
                            });
                        }
                        Thread.Sleep(1000 * __随机数.Next(3, 3));
                    }
                });

                #endregion

                //break;
            }
            __服务端列表.ForEach(q => q.开启());
            Console.WriteLine("启动完毕, 按回车键关闭");
            Console.ReadLine();
            Console.WriteLine("关闭中");
            __服务端列表.ForEach(q => q.关闭());
            Console.WriteLine("按回车键退出");
            Console.ReadLine();
        }
 private void 记录信息(string __概要, string __详细 = null, TraceEventType __等级 = TraceEventType.Verbose)
 {
     H调试.记录(string.Format("{0}: {1}", __概要, __详细), __等级);
 }
예제 #12
0
파일: IB订阅.cs 프로젝트: xiaomiwk/K_gps
        public B订阅_模拟()
        {
            var __随机数 = new Random();

            Task.Factory.StartNew(() =>
            {
                int __更新频率 = 8000;//毫秒/次
                var __轨迹缓存 = new Dictionary <string, Tuple <double, double> >();
                int __数量   = 0;
                while (true)
                {
                    try
                    {
                        _订阅列表锁.EnterReadLock();
                        var __列表 = new List <string>(_订阅列表);
                        if (__列表.Count != __数量)
                        {
                            H调试.记录("模拟订阅数量: " + __列表.Count, TraceEventType.Warning);
                            __数量 = __列表.Count;
                        }
                        _订阅列表锁.ExitReadLock();
                        var __监视器 = new Stopwatch();
                        __监视器.Start();
                        foreach (var __号码 in __列表)
                        {
                            if (!__轨迹缓存.ContainsKey(__号码))
                            {
                                var __初始经度偏移量 = __随机数.NextDouble() * 0.0002 * __数量 * (__随机数.NextDouble() > 0.5 ? -1 : 1);
                                var __初始纬度偏移量 = __随机数.NextDouble() * 0.0002 * __数量 * (__随机数.NextDouble() > 0.5 ? -1 : 1);
                                __轨迹缓存[__号码]  = new Tuple <double, double>(_参照经度 + __初始经度偏移量, _参照纬度 + __初始纬度偏移量);
                            }
                            var __经度     = __轨迹缓存[__号码].Item1 + __随机数.NextDouble() * 0.0005 * (__随机数.NextDouble() > 0.2 ? -1 : 1);
                            var __纬度     = __轨迹缓存[__号码].Item2 + __随机数.NextDouble() * 0.0005 * (__随机数.NextDouble() > 0.2 ? -1 : 1);
                            __轨迹缓存[__号码] = new Tuple <double, double>(__经度, __纬度);
                            On位置更新(__号码, new MGPS
                            {
                                时间 = DateTime.Now,
                                精度 = 20,
                                方向 = 60,
                                经度 = __经度,
                                纬度 = __纬度,
                            }
                                   );
                            //Thread.Sleep(__随机数.Next(0, __更新频率 / __数量));
                        }
                        if (__列表.Count == 0)
                        {
                            Thread.Sleep(1000);
                        }
                        else
                        {
                            __监视器.Stop();
                            var __耗时 = (int)__监视器.ElapsedMilliseconds;
                            if (__耗时 < __更新频率)
                            {
                                Thread.Sleep(__更新频率 - __耗时);
                            }
                            else
                            {
                                H调试.记录(string.Format("超时: {0}毫秒", __耗时 - __更新频率));
                                Debug.WriteLine(string.Format("超时: {0}毫秒", __耗时 - __更新频率));
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        H调试.记录异常(ex);
                    }
                }
            });
        }