ChannelMgr.h
上传用户:liguizhu
上传日期:2015-11-01
资源大小:2422k
文件大小:3k
源码类别:

P2P编程

开发平台:

Visual C++

  1. /*
  2.  *  Openmysee
  3.  *
  4.  *  This program is free software; you can redistribute it and/or modify
  5.  *  it under the terms of the GNU General Public License as published by
  6.  *  the Free Software Foundation; either version 2 of the License, or
  7.  *  (at your option) any later version.
  8.  *
  9.  *  This program is distributed in the hope that it will be useful,
  10.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.  *  GNU General Public License for more details.
  13.  *
  14.  *  You should have received a copy of the GNU General Public License
  15.  *  along with this program; if not, write to the Free Software
  16.  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  17.  *
  18.  */
  19. #ifndef __CHANNELMGR_H_
  20. #define __CHANNELMGR_H_
  21. typedef UINT16 CHANNELID;
  22. #include "Layer1Pin.h"
  23. #include "NetWorkStub.h"
  24. #include "MsgMgr.h"
  25. #include "ZZLFileReader.h"
  26. class HttpRequest;
  27. class InfAnime;
  28. class CChannelMgr
  29. {
  30. protected:
  31. CChannelMgr(CHANNELID ChannelID);
  32. virtual ~CChannelMgr();
  33. public:
  34. static CChannelMgr* Allocator(CHANNELID ChannelID);
  35. static  void Dellocator(CChannelMgr* pdel, BOOL block = FALSE);
  36. private:
  37. static unsigned int CALLBACK _DellocatorProc(void* lpParameter);
  38. static unsigned int CALLBACK _RequestFunc(void* lpParameter);
  39. HANDLE h_RequestThread;
  40. enum REQUEST_STATUS{
  41.     REQUEST_DEAD = -2,
  42. REQUEST_FAIL = -1,
  43. REQUEST_NOPP = 0,
  44. REQUEST_INIT,
  45.     REQUEST_BUFFER,
  46.     REQUEST_TESTSTATE,
  47. REQUEST_OK
  48. };
  49.     // 处理状态切换时的初始化,包括ZZL文件的初始化和气球消息
  50.     void    TestSwitchStatus(void);
  51. volatile LONG m_bRequesting;
  52.     volatile    LONG    m_PrevRequest;
  53.     volatile    LONG    m_CoutPinInit;
  54. P2P_RETURN_TYPE m_errorcode;
  55. HttpRequest* pHttpSession;
  56. CString m_RequestURL;
  57. CString m_ChannelNameBuf;
  58. public:
  59. BOOL Init(
  60. SOCKET SockFromProxy // in, 来自NetworkProxy的连接
  61. );
  62. // 开始下载这个频道
  63. BOOL Request(
  64. LPCTSTR url // in, 要播放的文件
  65. );
  66. // 停止下载当前频道
  67. void Stop();
  68. BOOL DeadforFatalError(){return m_bRequesting == REQUEST_FAIL;}
  69. P2P_RETURN_TYPE GetErrorCode(){return m_errorcode;}
  70. void SendMsgToShow(LPCTSTR msg, UINT len) { return; }
  71. // 获取数据,可能得到普通Sample或者MediaType(参考struct SampleHeader的注释)
  72. // 返回值:>=1 表示成功;0表示暂时没有数据;<=-1 表示错误
  73.     // *这个函数有递归调用的可能
  74. int GetData(
  75. SampleHeader& header, // out, 数据头
  76. PBYTE& pData, // out, 存储数据的缓冲区
  77. const UINT maxSize, // in, 缓冲区的长度
  78. const bool bAudio, // in, 获取音频还是视频
  79. const bool bKeySample // in, 是否寻找关键帧
  80. );
  81. static int HandleLayerErrCode(P2P_RETURN_TYPE RetType, CString& strRetErr); //将字符串strRetErr变成错误的消息(支持多语言),并根据消息返回一个iRet
  82. void  GetChannelName(CString& strRet); //将字符串strRet变成格式化的频道名
  83. CMsgMgr* GetMsgMgr();
  84. private:
  85. CMsgMgr m_MsgMgr;
  86. private:
  87.     Layer1Pin   m_videopin;
  88.     Layer1Pin   m_audiopin;
  89. NPLayer1::Layer1 m_Layer1;
  90. NetworkStub m_NetworkStub;
  91. SOCKET m_SockFromProxy;
  92. CCritSec m_MapCritSec;
  93. CHANNELID m_ChannelID;
  94. MSGID m_NameMsgID;
  95.     InfAnime*   pInfAnime;
  96. };
  97. #endif