private static void HDAPIRefresh() { uint i, iDtuAmount; string str = ""; StringBuilder mess = new StringBuilder(1000); GPRS_USER_INFO user_info = new GPRS_USER_INFO(); str = str + 0x00 + 0x00 + 0x00; iDtuAmount = HDDTUAPI.get_max_user_amount(); // 取最大数量, 为 3000 for (i = 0; i < iDtuAmount; i++) { HDDTUAPI.get_user_at(i, ref user_info); if (user_info.m_status == 1) // 在线 { // 判断 DTU 最后注册时间与现在时间的差值是否超过设置的超时时间 if ((DateTime.Now - HDDTUAPI.ConvertToDateTime(user_info.m_update_time)) > TimeSpan.FromMinutes(dtuTimeoutNum)) { string dtuID = user_info.m_userid; // 若超时则认为该 DTU 不在线, 调用开发包函数使其下线 HDDTUAPI.do_close_one_user2(dtuID, mess); // 从缓存队列移除 DTUInfo dtuCache = DTUCacheManager.GetDTUInfo(dtuID); if (dtuCache != null) { DTUCacheManager.OperDTUCache(DTUCacheManager.OPeratingType.Delete, dtuID, null);//DTUCacheManager.RemoveDtuCache(dtuID); // 下线状态回填数据库 DBWorker.Append(DBCommand.CreateDtuOffline(dtuID)); } else { TraceManager.AppendWarning("DTU:" + dtuID + "超时未注册,从缓存队列移除未发现该对象!"); } continue; } } } }
private static void Excute(GPRS_DATA_RECORD item) { switch (item.m_data_type) { case 0x01: // 注册包 GPRS_USER_INFO userInfo = new GPRS_USER_INFO(); if (HDDTUAPI.get_user_info(item.m_userid, ref userInfo) == 0) { DTUInfo sourceDTU = DTUInfo.ToDTUInfoForSoc(userInfo); if (sourceDTU == null) { return; } DTUInfo targetDTU = DTUCacheManager.GetDTUInfo(item.m_userid); if (targetDTU == null) { // 首次注册--在DBWorker从数据读取业务信息添加到缓存 DBWorker.Append(DBCommand.CreateDtuRegister(sourceDTU)); } else { // 更新链路 DTUCacheManager.OperDTUCache(DTUCacheManager.OPeratingType.UpdateSocketInfo, targetDTU, sourceDTU); } } break; case 0x02: // 注销包 { DTUCacheManager.OperDTUCache(DTUCacheManager.OPeratingType.Delete, item.m_userid, null); } break; case 0x04: // 无效包 TraceManager.AppendInfo(item.m_userid + "---接收无效的数据包"); break; case 0x05: // DTU已经接收到DSC发送的用户数据包 TraceManager.AppendInfo(item.m_userid + "---已经接收到DSC发送的用户数据包"); break; case 0x09: // 数据包 { //TraceManager.AppendInfo("DTU:" + item.m_userid + "接收了" + // ByteUtil.BytesToText(item.m_data_buf, item.m_data_len) // + "--共计" + item.m_data_len.ToString() + "个字节"); DTUInfo dtu = DTUCacheManager.GetDTUInfo(item.m_userid); if (dtu == null) { return; } dtu.Analysis(item.m_data_buf, item.m_data_len); } break; case 0x0d: TraceManager.AppendInfo(item.m_userid + "---参数设置成功"); break; case 0x0b: TraceManager.AppendInfo(item.m_userid + "---参数查询成功"); // config.readconf(); break; case 0x06: TraceManager.AppendInfo("---断开PPP连接成功"); break; case 0x07: TraceManager.AppendInfo(item.m_userid + "---停止向DSC发送数据"); break; case 0x08: TraceManager.AppendInfo("---允许向DSC发送数据"); break; case 0x0A: TraceManager.AppendInfo("---丢弃用户数据"); break; default: break; } }
public void Start(out string errMsg) { errMsg = ""; if (IsRuning) { return; } try { TraceManager.Start(TriggerTrace); // 环境检查 if (!EnvChecker.Check(out errMsg)) { return; } TraceManager.AppendDebug("环境检查通过"); //数据库工作服务打开 if (DBWorker.IsRuning) { DBWorker.Stop(); } DBWorker.Start(); if (DBWorker.IsRuning) { TraceManager.AppendDebug("数据库工作器已经打开"); } else { errMsg = "数据库工作器打开失败"; TraceManager.AppendErrMsg(errMsg); Stop(); return; } // 打开DTU缓存管理器 if (DTUCacheManager.IsRuning) { DTUCacheManager.Stop(); } DTUCacheManager.Start(); if (DTUCacheManager.IsRuning) { TraceManager.AppendDebug("DTU缓存管理器已经打开"); } else { errMsg = "DTU缓存管理器打开失败"; TraceManager.AppendErrMsg(errMsg); Stop(); return; } // DTU通信器 if (HDDTUService.IsRuning) { HDDTUService.Stop(); } HDDTUService.Start(out string err); if (HDDTUService.IsRuning) { TraceManager.AppendDebug("DTU监听器已经打开"); } else { errMsg = "DTU控制器打开失败:" + err; TraceManager.AppendErrMsg(errMsg); Stop(); return; } // DTU控制器 if (DTUController.IsRuning) { DTUController.Stop(); } DTUController.Start(); if (DTUController.IsRuning) { TraceManager.AppendDebug("DTU控制器已经打开"); } else { errMsg = "DTU控制器打开失败"; TraceManager.AppendErrMsg(errMsg); Stop(); return; } // DTU监听器 if (DTUListener.IsRuning) { DTUListener.Stop(); } DTUListener.Start(); if (DTUListener.IsRuning) { TraceManager.AppendDebug("DTU监听器已经打开"); } else { errMsg = "DTU监听器打开失败"; TraceManager.AppendErrMsg(errMsg); Stop(); return; } } catch (Exception e) { errMsg = e.Message; Stop(); return; } IsRuning = true; }
public void Stop() { try { // DTU监听器 if (DTUListener.IsRuning) { DTUListener.Stop(); if (!DTUListener.IsRuning) { TraceManager.AppendDebug("DTU监听器已经关闭"); } else { TraceManager.AppendErrMsg("DTU监听器关闭失败"); } } // DTU控制器 if (DTUController.IsRuning) { DTUController.Stop(); if (!DTUController.IsRuning) { TraceManager.AppendDebug("DTU控制器已经关闭"); } else { TraceManager.AppendErrMsg("DTU控制器关闭失败"); } } // DTU通信器 if (HDDTUService.IsRuning) { HDDTUService.Stop(); if (!HDDTUService.IsRuning) { TraceManager.AppendDebug("DTU通信器已经关闭"); } else { TraceManager.AppendErrMsg("DTU控制器关闭失败"); } } // DTU缓存管理器 if (DTUCacheManager.IsRuning) { DTUCacheManager.Stop(); if (!DTUCacheManager.IsRuning) { TraceManager.AppendDebug("DTU缓存管理器已经关闭"); } else { TraceManager.AppendErrMsg("DTU缓存管理器关闭失败"); } } //数据库工作器 if (DBWorker.IsRuning) { DBWorker.Stop(); if (!DBWorker.IsRuning) { TraceManager.AppendDebug("数据库工作器已经关闭"); } else { TraceManager.AppendErrMsg("数据库工作器关闭失败"); } } // 日志管理器 if (TraceManager.IsRuning) { TraceManager.Stop(); } } catch { } IsRuning = false; }