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

IP电话/视频会议

开发平台:

Visual C++

  1. // Client.h: interface for the CClient class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #ifndef __CLIENT_H__
  5. #define __CLIENT_H__
  6. #if _MSC_VER > 1000
  7. #pragma once
  8. #endif
  9. //标准C++类
  10. #include "....公共类STL.h"
  11. //网络管理类
  12. #include "....公共类TCP.h"
  13. //日志文件类
  14. #include "....公共类LogFile.h"
  15. //通道类型
  16. #include "....公共类PackagePChannelType.h"
  17. //用户注册
  18. #include "....公共类PackagePRegisterREQ.h"
  19. #include "....公共类PackagePRegisterRES.h"
  20. //获得在线用户信息
  21. #include "....公共类PackagePOnlineUserREQ.h"
  22. #include "....公共类PackagePOnlineUserRES.h"
  23. //创建一个数据节点
  24. #include "....公共类PackagePCreateDataNodeREQ.h"
  25. #include "....公共类PackagePCreateDataNodeRES.h"
  26. //加入会议
  27. #include "....公共类PackagePJoinDataNodeREQ.h"
  28. #include "....公共类PackagePJoinDataNodeRES.h"
  29. #include "....公共类PackagePJoinDataNode.h"
  30. //邀请用户
  31. #include "....公共类PackagePInviteUserREQ.h"
  32. #include "....公共类PackagePInviteUserRES.h"
  33. //视频数据头信息
  34. #include "....公共类PackagePVideoData.h"
  35. //接收视频数据
  36. #include "....公共类PackagePRecvVideoREQ.h"
  37. #include "....公共类PackagePSendVideoREQ.h"
  38. //停止发送视频数据
  39. #include "....公共类PackagePStopVideoREQ.h"
  40. //声音数据包
  41. #include "....公共类PackagePAudioData.h"
  42. //申请发言
  43. #include "....公共类PackagePSendAudioREQ.h"
  44. #include "....公共类PackagePSendAudioRES.h"
  45. #include "....公共类PackagePSendAudio.h"
  46. //点名发言
  47. #include "....公共类PackagePRecvAudioREQ.h"
  48. #include "....公共类PackagePRecvAudioRES.h"
  49. //停止发言
  50. #include "....公共类PackagePStopAudioREQ.h"
  51. #include "....公共类PackagePSendAudioRES.h"
  52. //其他模块的数据包
  53. #include "....公共类PackagePModulePackage.h"
  54. //退出会议
  55. #include "....公共类PackagePExitDataNodeREQ.h"
  56. //网络连接测试
  57. #include "....公共类PackagePConnectTest.h"
  58. //云台镜头的控制
  59. #include "....公共类PackagePPanelCommand.h"
  60. //广播
  61. #include "....公共类PackagePBroadcastREQ.h"
  62. #include "....公共类PackagePBroadcastRES.h"
  63. #include "....公共类PackagePStopBroadcast.h"
  64. //视频类
  65. #include "VideoVideoUSB.h"
  66. //声音类
  67. #include "SoundSoundIn.h"
  68. #include "SoundDirectSound.h"
  69. //云台镜头控制类
  70. #include "ComPelcod.h"
  71. //同步工作
  72. #include "....公共类PackagePSynCommand.h"
  73. //广播类
  74. #include "Multicast.h"
  75. //组播地址 224.0.0.99
  76. #define   MULTICAST_IP   "224.0.0.99"
  77. //组播视频端口 5000
  78. #define   MULTICAST_VIDEO_PORT  5000
  79. //组播音频端口 6000
  80. #define   MULTICAST_AUDIO_PORT  6000
  81. class CClient  
  82. {
  83. public: 
  84. enum { MSG = WM_USER + 100 };
  85.          CClient( );
  86. virtual ~CClient( );
  87.     //运行客户端
  88. bool     Run( const char * IP , const int Port );
  89.     //断开与服务器的连接
  90. void     Stop( void );
  91. //初始化视频
  92. void     InitVideo( HWND hWnd );
  93.     //获得视频
  94. CVideoUSB & GetVideo( ){ return  video; };
  95. //获得声音控制 
  96. CSoundIn  & GetSoundIn( void ){ return sound_in; }
  97.     //获得网络连接
  98. CTCP   & GetTCP( bool command = true ){ return command ? cmdTCP : videoTCP; }
  99. //是否广播
  100. bool     IsBroadcast( void ){ return this->broadcast_video.IsConnected( ) || this->broadcast_audio.IsConnected( ); }
  101. //获得服务器的IP
  102. const char * GetServerIP( void ){ return this->serverIP.c_str( );}
  103. //获得服务器的端口
  104. const int    GetServerPort( void ){ return this->serverPort; }
  105. //获得当前的用户名
  106. const char * GetUserName( void ){ return this->userName.empty( ) ? NULL : this->userName.c_str( ); }
  107. //获得当前用户密码
  108. const char * GetUserPassword( void ){ return this->password.empty( ) ? NULL : this->password.c_str( ); }
  109.     //获得当前的用户名
  110. const int    GetUserID( void ) { return this->user_id; }
  111. //获得用户所在的会议名
  112. string & GetConferenceName( void ){ return this->conference_name; } 
  113. //是否主持人
  114. bool  IsCharement( void ){ return this->m_bCharement; }
  115.     //赋予消息处理函数
  116.     void     AttachMsgHandler( void * handle );
  117.     //用户注册
  118. int      Register( const char * username , const char * password );
  119. //发送视频头信息
  120. void     SendVideoHeader( void );
  121. //获得在线用户信息
  122. void     SendOnlineUserREQ( void );
  123.     //创建会议
  124. void     SendCreateDataNode( const char * name );
  125.     //加入会议请求
  126. bool     SendJoinDataNodeREQ( const char * c_name );
  127. //邀请用户加入我的会议
  128. void     SendInviteUserREQ( int user_id , bool prompt );
  129.     //发送接收对方视频数据
  130. void     SendRecvVideoREQ( int user_id );
  131. //发送请求发言
  132.     void     SendSendAudioREQ( void );
  133. //发送点名发言
  134. void     SendRecvAudioREQ( int user_id );
  135. //发送停止发言(如果是自己请求停止发言,那么user_id == -1 、否则为请求停止的用户id)
  136. void     SendStopAudioREQ( int user_id = -1 );
  137. //发送模块的信息
  138. void     SendModulePackage( int module , char * buffer , int size );
  139.     //发送退出会议
  140. void     SendExitDataNode( void );
  141. //发送网络连接测试
  142. void     SendTestConnect( void );
  143. //发送同步信息包
  144. void     SendSynCommand( int command , bool fullScreen );
  145.     //发送广播请求
  146. void     SendBroadCastREQ( int user_id );
  147. //停止广播
  148. void     StopBroadCast( void );
  149. protected:
  150.     //停止广播
  151. void    OnStopBroadcast( CBuffer & buffer );
  152. //广播回复
  153. void    OnBroadCastRES( CBuffer & buffer );
  154. //广播请求
  155. void    OnBroadCastREQ( CBuffer & buffer );
  156.     //会议同步命令包
  157.     void    OnSynCommand( CBuffer & buffer );
  158. //云台镜头控制信息
  159. void    OnPanelCommand( CBuffer & buffer );
  160. //模块信息
  161. void    OnModulePackage( CBuffer & buffer );
  162.     //请求发言回复
  163. void    OnSendAudioRES( CBuffer & buffer );
  164. //请求发言
  165. void    OnSendAudioREQ( CBuffer & buffer );
  166. //主持人点名发言
  167. void    OnRecvAudioREQ( CBuffer & buffer );
  168. //点名发言回复
  169. void    OnRecvAudioRES( CBuffer & buffer );
  170.     //处理停止接收视频数据请求
  171. void    OnStopVideoREQ( CBuffer & buffer );
  172.     //处理发送视频请求
  173. void    OnSendVideoREQ( CBuffer & buffer );
  174.     //邀请用户加入会议请求
  175. void    OnInviteUserREQ( CBuffer & buffer );
  176. //邀请用户加入会议回复
  177. void    OnInviteUserRES( CBuffer & buffer );
  178.     //处理加入会议请求
  179. void    OnJoinDataNodeREQ( CBuffer & buffer );
  180.     //处理加入会议回复
  181. void    OnJoinDataNodeRES( CBuffer & buffer );
  182. //创建会议回复
  183. void    OnCreateDataNodeRES( CBuffer & buffer );
  184. //在线用户状态
  185. void    OnlineUserRES( CBuffer & buffer );
  186.     //发送消息
  187. int     SendMsg( CDataPackage * package );
  188.     //处理命包线程
  189. static  void OnCommand( void * pContext );
  190.     //处理视频线程
  191. static  void OnVideo( void * pContext );
  192.     //处理声音线程
  193. static  void OnAudio( void * pContext );
  194.     //视频数据捕捉
  195. static  void OnCapture( void * pContext , char * buffer , int size , bool m_bHeader );
  196.     //声音捕捉
  197. static  void OnSound( void * pContext , char * buffer , int size );
  198.     //接收视频广播
  199. static  void OnBroadCastVideo( void * pContext );
  200.     //接收声音广播
  201. static  void OnBroadCastAudio( void * pContext );
  202. private:
  203.     //服务器的IP
  204. string  serverIP;
  205.     //服务器端口
  206. int     serverPort;
  207.     //命令通道
  208. CTCP    cmdTCP;
  209.     //视频数据通道
  210. CTCP    videoTCP;
  211. //声音数据通道
  212. CTCP    audioTCP;
  213.     //消息处理句柄
  214. void  * msg_handle;
  215.     //用户名
  216. string  userName;
  217. //密码
  218. string  password;
  219.     //用户id
  220. int     user_id;
  221. //用户所在的会议名称
  222.     string  conference_name;
  223. //主持人标志
  224. bool    m_bCharement;
  225.     //视频采集
  226. CVideoUSB video;
  227.     //声音采集 
  228. CSoundIn sound_in;
  229.     //显示视频数据列表
  230. INT_PTR_MAP recv_video_map;
  231. //声音播放数据列表
  232. INT_PTR_MAP recv_audio_map;
  233. //云台镜头控制
  234. CPelcod Pelcod;
  235.     //广播视频
  236. CMulticast broadcast_video;
  237. //广播音频
  238. CMulticast broadcast_audio;
  239. //接收广播着id
  240. int        broadcast_id;
  241. //是否需要发送视频数据
  242. bool       m_bSendVideo;
  243. };
  244. #endif // !defined(AFX_CLIENT_H__F98C0EA3_59C3_404F_B706_EE5BBFE3F2E9__INCLUDED_)