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

MeetingPool.cpp 5.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. #include "StdAfx.h"
  2. #include "MeetingPool.h"
  3. #include "Meeting.h"
  4. #include "DevDsp.h"
  5. CMeetingPool::CMeetingPool(CDevDsp* pParent) : m_pParent(pParent), m_Handle(DEV_HANDLE_INVALID)
  6. {
  7. }
  8. CMeetingPool::~CMeetingPool(void)
  9. {
  10. __release();
  11. }
  12. /*****************************************************************
  13. **【函数名称】 __release
  14. **【函数功能】 释放资源
  15. **【参数】
  16. **【返回值】
  17. ****************************************************************/
  18. void CMeetingPool::__release( void )
  19. {
  20. int Key;
  21. CMeeting* pMeeting;
  22. POSITION Pos = m_MeetingMap.GetStartPosition();
  23. while(Pos != NULL)
  24. {
  25. m_MeetingMap.GetNextAssoc(Pos, Key, pMeeting);
  26. ASSERT(pMeeting != NULL);
  27. delete pMeeting;
  28. }
  29. m_MeetingMap.RemoveAll();
  30. }
  31. /*****************************************************************
  32. **【函数名称】 __getMeeting
  33. **【函数功能】 返回指定会议
  34. **【参数】
  35. **【返回值】
  36. ****************************************************************/
  37. CMeeting* CMeetingPool::__getMeeting( int MeetingId )
  38. {
  39. CMeeting* pMeeting = NULL;
  40. m_MeetingMap.Lookup(MeetingId, pMeeting);
  41. return pMeeting;
  42. }
  43. /*****************************************************************
  44. **【函数名称】 __deleteMeeting
  45. **【函数功能】 删除指定会议
  46. **【参数】
  47. **【返回值】
  48. ****************************************************************/
  49. void CMeetingPool::deleteMeeting( int MeetingId )
  50. {
  51. CMeeting* pMeeting = __getMeeting(MeetingId);
  52. if(pMeeting == NULL)
  53. return;
  54. ASSERT(pMeeting->attendeeCount() == 0);
  55. m_MeetingMap.RemoveKey(MeetingId);
  56. delete pMeeting;
  57. ISX_dcb_delconf(m_Handle, MeetingId);
  58. }
  59. /*****************************************************************
  60. **【函数名称】 open
  61. **【函数功能】 打开会议设备
  62. **【参数】
  63. **【返回值】
  64. ****************************************************************/
  65. bool CMeetingPool::open( void )
  66. {
  67. ASSERT(m_Handle == DEV_HANDLE_INVALID);
  68. m_Handle = ISX_dcb_open(m_pParent->nodeNo(), m_pParent->boardNo());
  69. return m_Handle != DEV_HANDLE_INVALID;
  70. }
  71. /*****************************************************************
  72. **【函数名称】 close
  73. **【函数功能】 关闭会议设备
  74. **【参数】
  75. **【返回值】
  76. ****************************************************************/
  77. void CMeetingPool::close( void )
  78. {
  79. if(m_Handle != DEV_HANDLE_INVALID)
  80. {
  81. ISX_dcb_close(m_Handle);
  82. m_Handle = DEV_HANDLE_INVALID;
  83. }
  84. __release();
  85. }
  86. /*****************************************************************
  87. **【函数名称】 createMeeting
  88. **【函数功能】 创建会议
  89. **【参数】
  90. **【返回值】
  91. ****************************************************************/
  92. bool CMeetingPool::createMeeting( MeetingInfo& MeetInfo )
  93. {
  94. ASSERT(m_Handle != DEV_HANDLE_INVALID);
  95. if(m_Handle == DEV_HANDLE_INVALID)
  96. return false;
  97. int MeetingId;
  98. if(ISX_dcb_estconf(m_Handle, NULL, 0, 0, &MeetingId) == 0)
  99. {
  100. CMeeting* pMeeting = new CMeeting(this, MeetingId);
  101. m_MeetingMap.SetAt(MeetingId, pMeeting);
  102. MeetInfo.NodeNo = m_pParent->nodeNo();
  103. MeetInfo.BoardNo = m_pParent->boardNo();
  104. MeetInfo.MeetingId = MeetingId;
  105. return true;
  106. }
  107. return false;
  108. }
  109. /*****************************************************************
  110. **【函数名称】 accept
  111. **【函数功能】 接受与会方
  112. **【参数】
  113. **【返回值】
  114. ****************************************************************/
  115. bool CMeetingPool::accept( int MeetingId, COneLeg* pAttendee, bool IsOneWay )
  116. {
  117. ASSERT(m_Handle != DEV_HANDLE_INVALID);
  118. if(m_Handle == DEV_HANDLE_INVALID)
  119. return false;
  120. CMeeting* pMeeting = __getMeeting(MeetingId);
  121. if(pMeeting == NULL)
  122. return false;
  123. return pMeeting->accept(pAttendee, IsOneWay);
  124. }
  125. /*****************************************************************
  126. **【函数名称】 remove
  127. **【函数功能】 删除一个与会方
  128. **【参数】
  129. **【返回值】
  130. ****************************************************************/
  131. bool CMeetingPool::remove( int MeetingId, COneLeg* pAttendee )
  132. {
  133. CMeeting* pMeeting = __getMeeting(MeetingId);
  134. if(pMeeting == NULL)
  135. return false;
  136. bool Res = pMeeting->remove(pAttendee);
  137. if(pMeeting->attendeeCount() == 0)
  138. deleteMeeting(MeetingId);
  139. return Res;
  140. }
  141. /*****************************************************************
  142. **【函数名称】 record
  143. **【函数功能】 为与会方录音
  144. **【参数】
  145. **【返回值】
  146. ****************************************************************/
  147. bool CMeetingPool::record( int MeetingId, COneLeg* pAttendee, RecordContent* pContent, bool IsStop )
  148. {
  149. CMeeting* pMeeting = __getMeeting(MeetingId);
  150. if(pMeeting == NULL)
  151. return false;
  152. return pMeeting->record(pAttendee, pContent, IsStop);
  153. }
  154. /*****************************************************************
  155. **【函数名称】 mute
  156. **【函数功能】 静音与会方
  157. **【参数】
  158. **【返回值】
  159. ****************************************************************/
  160. bool CMeetingPool::mute( int MeetingId, COneLeg* pAttendee, bool IsOff )
  161. {
  162. CMeeting* pMeeting = __getMeeting(MeetingId);
  163. if(pMeeting == NULL)
  164. return false;
  165. return pMeeting->mute(pAttendee, IsOff);
  166. }
  167. /*****************************************************************
  168. **【函数名称】 allocDspChan
  169. **【函数功能】 分配DSP通道
  170. **【参数】
  171. **【返回值】
  172. ****************************************************************/
  173. CDspChannel* CMeetingPool::allocDspChan( void )
  174. {
  175. return m_pParent->getFreeDspCh();
  176. }