鬼鬼Jacky
DiretPlay Lobby ServerDirectPlay中最有趣的莫过于Lobby Server了。什么是lobby呢?lobby有大厅的意思,想象一下参加博览会的情形吧,你在展厅(lobby)里随意浏览,你可能会发现许多你感兴趣的讲座或讨论(session),你也可以召集一些有相同兴趣的游客(player)展开一组新的讨论。一句话lobby是一个真正的虚拟现实环境。这样解释不知道是不是更形象一些,说实话,用外语读各种技术文章,再用母语来表述实在是一种痛苦的事情,总觉得词不达意,弄不好就是画蛇添足。这里主要一个原因可能是专业术语的解释没有一个统一规范,要是世界都统一一种语言就没那么麻烦了。所以我在文章里专业术语尽量不做翻译,自已英文水平差,还找这么多理由,够难为情的了。好吧,台阶也找了,下面就开始我们的lobby server。如果你对DiretPlay不是很熟悉的话,赶紧去看SDK文档吧。本文的例程源码可点这里下载,编译需VC,DX SDK6.0。 大家一定还记得SDK中带有一个lobby server,它初始时创建了一个session,并在此session下创建了四个group,用SDK带的另外一个例程bellhop就可在lobby中漫游了。同时SDK中还有一个lobby provider(lobbysrv.dll),客户程序bellhop就是通过它实现与lobby server的通讯。遗憾的是我找遍所有SDK文档,包括很多网上资源,没有半字介绍如何实现lobby provider(有谁知道?请通知我)。所以不要问我任何关于实现lobby provider的问题。 我们这里的lobby server要具备的功能有:可选择通讯方式(service provider),可随意创建多个session,可随意主持(host)任一session。方便起见,客户程序采用SDK带的dpchart例程。下面我们一步一步来看看程序是如何实现的:首先,是要取得一个DirectPlayLobby interface,然后枚举出所有service provider供选择,程序重写了service provider对话框,如何重写service provider对话框请参考SDK文档。// get ANSI DirectPlayLobby interfacehr = CoCreateInstance( CLSID_DirectPlayLobby,NULL,CLSCTX_INPROC_SERVER,IID_IDirectPlayLobby3A,(LPVOID*)&lpDPlayLobby3A);if SUCCEEDED(hr){ // put all the service providers in combo box SendDlgItemMessage(IDC_COMBO_ServiceProvider, CB_ADDSTRING, 0, (LPARAM)"<
weiyiqinww
Xilin(西林)mika(麦卡) kulian(酷立安)Dafei(达飞)killa( 奇拉)habby(哈比)lobby(乐比)lumma(陆玛)Uka(尤卡)ert(尔特)
优质英语培训问答知识库