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(__休眠); //} } }); }
void _IV_请求隐藏号码(string __号码) { if (!_当前显示号码集.ContainsKey(__号码)) { H调试.记录(_类型名 + ": _IV_请求隐藏号码", __号码 + "不在当前显示号码集中"); return; } if (_当前显示号码集[__号码].绘图标识.HasValue) { _IF地图.除点(_当前显示号码集[__号码].绘图标识.Value); } _当前显示号码集.Remove(__号码); }
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); } } }
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调试.记录(__日志.概要, __日志.等级, __日志.详细, __日志.方法, __日志.文件, __日志.行号)); 加载设备列表(); }
void _IV_请求隐藏号码(string __号码) { lock (m_lock) { var __已显示 = _当前显示号码集.ContainsKey(__号码); if (!__已显示) { H调试.记录(_类型名 + ": _IV_请求隐藏号码", __号码 + "不在当前显示号码集中"); return; } if (_当前显示号码集[__号码].绘图标识.HasValue) { _IF地图.除点(_当前显示号码集[__号码].绘图标识.Value); } if (_当前显示号码集.ContainsKey(__号码)) { _当前显示号码集.Remove(__号码); } } }
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(); }
void 初始化() { H调试.记录(_类型名 + ": 初始化"); }
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); } } }); }
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}", __概要, __详细), __等级); }
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); } } }); }