Layer1.dll概要设计分析.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Layer1.dll概要设计分析.doc

Layer1.dll概要设计分析 功能描述 Layer1.dll在openmysee软件中承担的作用是: 向上与ChaosFilter交互,从ChaosFilter获取指令,为ChaosFilter提供播放的数据 向下与Tracker交互,登记和报告自己的状态,得到初始的Peers列表;与Peers交互,交换媒体数据和Peers列表。 模块划分 Layer1.dll主要逻辑由以下几个类组成: Layer1 对外的接口,可以看成是对Communicator的线程安全包装 Layer1运行在调用者所在的线程,通过Communicator::resEvent,Communicator::resAckEvent,Communicator::needControl三个变量实现和主线程的同步 Communicator 控制类,LiveResource 、CSCClient、TryClient、P2PMgr的容器。 提供启动、停止服务的接口。 对其它所有对象的访问都通过这个类 CSCClient 和Tracker通信 P2PClient 和Peer通信 TryClient 负责发起和Peer的连接 LiveResource(继承自BaseResource) 存放流媒体数据的pool 保存流媒体的metadata P2PMgr 主线程所在的类 RunManager是主线程方法,一个for(;;) select 死循环。 Layer1.dll 包含的其它较重要的辅助逻辑 BufferMgr 一个内存池 BlockInterval/IntervalArray 用区间来描述一组blockID的序列,可以视作一种简单压缩。 NormalAddress/P2PAddress 地址描述 CorePeerInfo/PeerInfoWithAddr 描述peer的信息 TransferCalculator 辅助统计传输状态 TransferInfo 描述传输状态 PushList 描述待上传/下载的block id列表 LogMgr 日志系统 模块间关系 Layer1 运行在调用者的线程中。 P2PMgr::RunManager运行在一个独立线程中,由它调度其它的模块。 运行流程说明 概要 ChaoFilter创建Layer1对象 ChaoFilter调用Layer1::Init,初始化对象 此时P2PMgr::RunManager独立线程启动 ChaoFilter调用Layer1::Request 此时P2PMgr::RunManager独立线程开始在后台下载数据 ChaoFilter调用Layer1::GetXXX获取各种数据 ChaoFilter调用Layer1::Stop P2PMgr::RunManager独立线程暂停干活动 ChaoFilter调用Layer1::Init 若Communicator尚未创建,创建Communicator对象 Communicator::Init Init Socket Init CSClient Bind UDP Socket Init P2PMgr If not Running 创建P2PClient池 Bind TCP Socket 创建线程 ChaoFilter调用Layer1::Request 加锁 (主线程暂停运行) Communicator::Request Communicator::StopCurrentRes P2PMgr::StopAll 删除旧的LiveResource CSClient::SendLogout 创建新的LiveResource LiveResource::Init CSClient::SendReqRes Login (只在第一次调用时) Send Request To Tracker 解锁 (主线程继续运行) ChaoFilter调用Layer1::GetXXX 直接转发到LiveResource的对应方法 LiveResource内部有一个Critical Section控制同步 ChaoFilter调用Layer1::Stop 加锁 (主线程暂停运行) Communicator::StopCurrentRes 解锁 (主线程继续运行) P2PMgr::RunManager 该函数在独立线程中执行一个大循环: while(isRunning) { SELECT check non-blocking connecting

文档评论(0)

suijiazhuang1 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档