升龙物业 老版本 ocx IPO, 加密狗 转值班电话

DevSpan.h 3.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. /*************************************************************************
  2. 【文件名】 DevSpan.h
  3. 【功能模块和目的】 数字中继通道管理类头文件
  4. 【开发者及日期】 郑石诺 2015/03/09
  5. 【版本】 V1.0.0
  6. 【版权信息】 Copyright (C)2015 河南华谊网络科技有限公司
  7. 【更改记录】
  8. *************************************************************************/
  9. #pragma once
  10. #include "DevResource.h"
  11. #include "SpanChannel.h"
  12. #include "MC.h"
  13. /*************************************************************************
  14. 【类名】 CDevSpan
  15. 【功能】
  16. 【接口说明】 数字中继通道管理类
  17. 【开发者及日期】 郑石诺 2015/03/09
  18. 【版本】 V1.0.0
  19. 【版权信息】 Copyright (C)2015 河南华谊网络科技有限公司
  20. 【更改记录】
  21. *************************************************************************/
  22. class CDevSpan : public CDevResource
  23. {
  24. private:
  25. class CSpan
  26. {
  27. public:
  28. CSpan(void) : m_CurPos(0) {}
  29. ~CSpan(void) {}
  30. int channelCount(void) const { return m_SpanChList.GetCount(); }
  31. int open(DEV_RES_NO_TYPE NodeNo, DEV_RES_NO_TYPE BoardNo, DEV_RES_NO_TYPE SpanNo)
  32. {
  33. m_CurPos = 0;
  34. for(int i = 1; i < 31; i++)
  35. {
  36. CSpanChannel* pChannel = new CSpanChannel(i, SpanNo, NodeNo, BoardNo);
  37. ASSERT(pChannel != NULL);
  38. if(pChannel != NULL)
  39. {
  40. if(pChannel->open())
  41. {
  42. m_SpanChList.Add(pChannel);
  43. CMC::GetInstance().onDevResCreate(pChannel->id());
  44. }
  45. else
  46. delete pChannel;
  47. }
  48. }
  49. return m_SpanChList.GetCount();
  50. }
  51. void close(void)
  52. {
  53. for(int i = 0; i < m_SpanChList.GetCount(); ++i)
  54. {
  55. CSpanChannel* pChannel = m_SpanChList[i];
  56. ASSERT(pChannel != NULL);
  57. CMC::GetInstance().onDevResDestroy(pChannel->id());
  58. pChannel->close();
  59. delete pChannel;
  60. }
  61. m_SpanChList.RemoveAll();
  62. m_CurPos = 0;
  63. }
  64. CSpanChannel* getFreeSpanCh(void)
  65. {
  66. for(int i = 0; i < m_SpanChList.GetCount(); ++i) // 保证遍历一轮
  67. {
  68. if(m_CurPos >= m_SpanChList.GetCount())
  69. m_CurPos = 0;
  70. CSpanChannel* pChannel = m_SpanChList[m_CurPos++];
  71. ASSERT(pChannel != NULL);
  72. // 当前外线是否空闲
  73. if(pChannel->isValid() && pChannel->isFree())
  74. return pChannel;
  75. }
  76. return NULL;
  77. }
  78. CSpanChannel* findChan(int ResId)
  79. {
  80. if(ResId > 0 && ResId < 31)
  81. return m_SpanChList[ResId - 1];
  82. else
  83. return NULL;
  84. }
  85. private:
  86. CArray<CSpanChannel*, CSpanChannel*> m_SpanChList;
  87. int m_CurPos;
  88. };
  89. public:
  90. CDevSpan(DEV_RES_NO_TYPE NodeNo, DEV_RES_NO_TYPE BoardNo);
  91. virtual ~CDevSpan(void);
  92. MIX_CAP mixCapacity(void) const { return m_MixCap; }
  93. int channelCount(void) const { return m_ChannelCount; }
  94. bool open(void) { return false; }
  95. bool open(DEV_RES_NO_TYPE SpanNo);
  96. void close(void);
  97. void close(DEV_RES_NO_TYPE SpanNo);
  98. bool isOk(void) const;
  99. CSpanChannel* getFreeSpanCh(void);
  100. CSpanChannel* getFreeSpanCh(int SpanNo);
  101. CSpanChannel* findChan(DEV_RES_NO_TYPE SpanNo, int ResId);
  102. private:
  103. bool __openMix(MIX_TYPE MixTp);
  104. CDevSpan::CSpan* __getSpan(DEV_RES_NO_TYPE SpanNo, bool NewWhenNull = false);
  105. bool __freeSpan(DEV_RES_NO_TYPE SpanNo);
  106. void __freeSpan(void);
  107. private:
  108. MIX_CAP m_MixCap;
  109. int m_ChannelCount;
  110. CArray<CSpan*, CSpan*> m_SpanList;
  111. };