(workProxy控制本地进程本地进程(workStub从Layer1读取数据,workProxyLocalServer负责给用户显示信息LocalServer支持同时与多个播放插件进行交互Layer1负责下载数据并存储到缓冲文件多语言独立的DLL,提供从ID到String的查找升级程序负责检查程序版本是否最新负责下载最新程序并解压,同时显示下载进度安装过程中能够提示用户关闭占用目标文件的进程,workStub通信使用Socket或者WindowsMessageLayer1播放插件客户端各个模块关系图->开始下载->停止下载->获取数据->显示讯息->获取讯息->初始化->开始下载->停止下载->获取数据->此次缓冲结束->获取缓冲进度->获取传输信息->获取频道名称->获取频道码率<-显示讯息中转调用(Message)本地进程->开始下载->停止下载->获取数据->显示讯息<-请求下载->创建Update->启动升级进程并等待升级完成<-创建->workProxy::Request()workProxyconnecttoLocalServerLocalServernewChannelMgr,,::Request()Proxy&StubProxyStubMessageAudioVideo声音和视频要分开传输,因为数据不是严格同步的。分开之后,使用阻塞的Socket更加方便。流程:(LocalServer=LS)Proxy启动升级程序,等待升级程序退出(升级完毕)。Proxy发送MSG(包含gtvurl和Proxy接收消息的窗口名)给LS。LS初始化一个Stub,Stub初始化一个Layer1。Stub发送MSG告知Proxy初始化失败或者成功。Proxy连接上LS,说明自己属于某个Stub。LS将连接交给Stub。Stub从Layer1读取数据,分视频/音频通过Socket发送给Proxy。Proxy开始播放。Proxy发送MSG通知Stub停止播放。Stub释放Layer1及自身。辅助:Proxy和Layer1将要显示的消息发送给Stub,Stub交给LS显示。Stub发现Layer1的数据不足,开始循环检查缓冲进度(同时交给LS显示),缓冲结束后通知Layer1。异常:Stub初始化Layer1失败,通知Proxy停止播放,交给LS显示信息。Layer1下载过程中发生致命错误,通知Stub,Stub通知Proxy停止播放,交给LS显示信息。不允许同时打开一个以上的player播放同一个频道。每个Proxy有一个接收消息的Window(随机名字),LocalServer有一个接收消息的Window(固定名字),都可以通过FindWindow查找。例外情况播放插件进程被突然中止本地进程每隔一段时间检查每个播放插件的线程是否还存在。本地进程进程被突然中止播放插件每隔一段时间检查网络程序是否存在。如果不存在,则重复启动过程,并且准备接受新的播放位置(可能有些难度)。workProxy检查网络程序是否存在(准备好重新启动播放的流程)根据播放状态控制网络程序多语言切换本地进程结构TheEXE显示信息(托盘图标/菜单/气泡)(workStubB检查缓冲进度Layer1结构TheEXETrackServer通讯管理P2P连接下载数据并存储到缓冲文件对外接口多语言切换升级程序TheUpdater检查是否最新版本下载并解压最新版本提示用户关闭占用目标文件的进程覆盖目标文件,安装完成等待目标进程退出,覆盖目标文件关闭不关闭多语言切换
客户端分拆方案 来自淘豆网m.daumloan.com转载请标明出处.