MCUInformation.cpp
上传用户:popouu88
上传日期:2013-02-11
资源大小:2894k
文件大小:2k
源码类别:

IP电话/视频会议

开发平台:

Visual C++

  1. // MCUInformation.cpp: implementation of the CMCUInformation class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "MCUInformation.h"
  5. //////////////////////////////////////////////////////////////////////
  6. // Construction/Destruction
  7. //////////////////////////////////////////////////////////////////////
  8. CMCUInformation::CMCUInformation()
  9. {
  10. ::InitializeCriticalSection( & this->session );
  11. }
  12. CMCUInformation::~CMCUInformation()
  13. {
  14. ::DeleteCriticalSection( &this->session );
  15. }
  16. void CMCUInformation::Release( void )
  17. {
  18. int size = 0;
  19. while( ! this->mcu_map.empty( ) )
  20. {
  21. CMCUNode * node = ( CMCUNode * )this->mcu_map.begin( )->second;
  22. size = this->mcu_map.size( );
  23. node->cmdTCP->Close( );
  24. while( size == this->mcu_map.size( ) ) ::Sleep( 100 );
  25. }
  26. }
  27. CMCUNode * CMCUInformation::AddMCUNode( CTCP * cmdTCP , const char * mcu_name )
  28. {
  29. this->LockMap( );
  30. for( INT_PTR_MAP::iterator itr = this->mcu_map.begin( ); itr != this->mcu_map.end( ); itr ++ )
  31. {
  32. CMCUNode * node = ( CMCUNode * )itr->second;
  33. if( node->mcu_name == mcu_name )
  34. {
  35. this->UnlockMap( );
  36. return NULL;
  37. }
  38. }
  39. CMCUNode * node = new CMCUNode( );
  40. node->cmdTCP = cmdTCP;
  41. node->mcu_name = mcu_name;
  42. node->mcu_id = ( int )cmdTCP;
  43. this->mcu_map[ node->mcu_id ] = node;
  44. this->UnlockMap( );
  45. return node;
  46. }
  47. void CMCUInformation::RemoveMCUNode( int mcu_id )
  48. {
  49. this->LockMap( );
  50. INT_PTR_MAP::iterator itr = this->mcu_map.find( mcu_id );
  51. if( itr!= this->mcu_map.end( ) )
  52. {
  53. CMCUNode * node = ( CMCUNode * )itr->second;
  54. this->mcu_map.erase( itr );
  55. node->cmdTCP->Close( );
  56. ::Sleep( 1000 );
  57. delete node->cmdTCP;
  58. delete node;
  59. }
  60. this->UnlockMap( );
  61. }
  62. CMCUNode * CMCUInformation::GetMCUNode( int mcu_id )
  63. {
  64. this->LockMap( );
  65. INT_PTR_MAP::iterator itr = this->mcu_map.find( mcu_id );
  66. if( itr == this->mcu_map.end( ) )
  67. {
  68. this->UnlockMap( );
  69. return NULL;
  70. }
  71. this->UnlockMap( );
  72. return ( CMCUNode * )itr->second;
  73. }
  74. INT_PTR_MAP * CMCUInformation::LockMap( void )
  75. {
  76. ::EnterCriticalSection( &this->session );
  77. return &this->mcu_map;
  78. }
  79. void CMCUInformation::UnlockMap( void )
  80. {
  81. ::LeaveCriticalSection( &this->session );
  82. }