2D网络游戏开发(网络篇)(七)2
来源:互联网 发布:打车软件司机端 编辑:程序博客网 时间:2024/04/30 03:05
autoPatcher.SetNetworkingSystem(rakPeer);
SetNetworkingSystem函数的原型如下:
void SetNetworkingSystem (RakPeerInterface *localSystem)
void SetNetworkingSystem (RakClientInterface *localSystem)
void SetNetworkingSystem (RakServerInterface *localSystem)
这个函数的作用就是设置使用哪个系统的实例来传输文件。
这些设置好了以后,下一步我们将在服务器端设置加载文件,在客户端设置下载文件,设置如下:
服务器端:
if (AutoPatcher::CreateFileSignature(input)==false)
printf("Unable to create file signature %s.shan", input);
if (autoPatcher.SetFileDownloadable(input, true)!=SET_FILE_DOWNLOADABLE_SUCCESS)
printf("Unable to make %s downloadablen", input);
}
printf("Enter name of second file to make downloadable or hit enter for nonen");
gets(input);
if (input[0] && autoPatcher.SetFileDownloadable(input, false)!=SET_FILE_DOWNLOADABLE_SUCCESS)
printf("Unable to make %s downloadablen", input);
前面两个if语句用于设置带签名的文件,最后一个if用于设置不带签名的下载。三个函数原型如下:
bool AutoPatcher::CreateFileSignature ( char * filename ) [static]
为filename建立一个以.sha为扩展名的签名文件。
SetFileDownloadableResult AutoPatcher::SetFileDownloadable ( char * filename,
bool checkFileSignature
)
这个函数,我们已经在前面讲解了。
然后需要在客户端设置文件的下载目录:
autoPatcher.SetDownloadedFileDirectoryPrefix(input);
函数原型如下:
void AutoPatcher::SetDownloadedFileDirectoryPrefix ( char * prefix )
就是设置文件下载到什么地方,用prefix设置,例如 c:.
现在进入循环当中,在消息检测当中,加入下面的代码:
case ID_AUTOPATCHER_REQUEST_FILE_LIST:
printf("Got a request for the file listn");
autoPatcher.SendDownloadableFileList(packet->playerId);
break;
case ID_AUTOPATCHER_FILE_LIST:
printf("n-------nGot the list of available server files.nRequesting downloads.n-------n");
autoPatcher.OnAutopatcherFileList(packet, true);
if (ShowDownloadStatus(&autoPatcher)==0)
{
rakPeer->DeallocatePacket(packet);
goto QUIT;
}
break;
case ID_AUTOPATCHER_REQUEST_FILES:
printf("Got a request for filesn");
autoPatcher.OnAutopatcherRequestFiles(packet);
break;
case ID_AUTOPATCHER_SET_DOWNLOAD_LIST:
printf("* Confirmed download listn");
autoPatcher.OnAutopatcherSetDownloadList(packet);
break;
case ID_AUTOPATCHER_WRITE_FILE:
printf("-------nGot a filen-------n");
autoPatcher.OnAutopatcherWriteFile(packet);
if (ShowDownloadStatus(&autoPatcher)==0)
{
rakPeer->DeallocatePacket(packet);
goto QUIT;
}
break;
}
autoPatcher.SendDownloadableFileList函数的原型如下:
void AutoPatcher::SendDownloadableFileList ( const PlayerID remoteSystem )
这个函数的作用就是将下载列表中的全部文件发送到以PlayerID为标致的客户端去。
.OnAutopatcherFileList的函数如下:
void AutoPatcher::OnAutopatcherFileList ( Packet * packet,
bool onlyAcceptFilesIfRequested
)
这个函数的作用就是分析服务器端的下载文件列表,看是否有我们没有的文件,或是不匹配的文件。然后以包的形式将分析结果传给服务器。
第二个参数,如果设置成真,那么就调用了这个函数以后就用GetDownloadStatus函数进行分析。如果设置成假,就马上下载文件。
autoPatcher.OnAutopatcherRequestFiles(packet);
这个函数原型如下:
void AutoPatcher::OnAutopatcherRequestFiles ( Packet * packet )
这个函数的作用就是从内存中读取文件,然后将它们发送到客户端。
autoPatcher.OnAutopatcherSetDownloadList(packet);
这个函数原型如下:
void AutoPatcher::OnAutopatcherSetDownloadList ( Packet * packet )
这个函数的作用就是服务器端同意下载下载列表上的文件。
autoPatcher.OnAutopatcherWriteFile(packet);
函数原型如下:
bool AutoPatcher::OnAutopatcherWriteFile ( Packet * packet )
这个函数的作用就是将接受到的文件全部写入到我们设置的硬盘里。
其它就没什么了,大家可以参考其源代码就在raknet的例程当中。关于程序执行的效果,请大家自己去编译。
Over!
关于更多内容请访问金桥科普网站( http://popul.jqcq.com )游戏开发栏目,如你需要游戏开发方面的书籍请参考金桥书城游戏频道(http://book.jqcq.com/category/1_70_740.html )。如果你在阅读本篇文章时有什么好的建议请来信给我,我的E_mail: akinggw@126.com. 如果你在使用SDL时有什么问题,请到金桥科普网站(http://popul.jqcq.com )游戏开发栏目,我将详细地为你解答。
- 2D网络游戏开发(网络篇)(七)2
- 2D网络游戏开发(网络篇)(七)1
- 2D网络游戏开发(网络篇)(八)2
- 2D网络游戏开发(网络篇)(一)
- 2D网络游戏开发(网络篇)(二)
- 2D网络游戏开发(网络篇)(三)
- 2D网络游戏开发(网络篇)(四)
- 2D网络游戏开发(网络篇)(五)
- 2D网络游戏开发(网络篇)(六)
- 2D网络游戏开发(网络篇)(六)
- 2D网络游戏开发(网络篇)(六)
- 2D网络游戏开发(网络篇)(八)1
- 2D网络游戏开发(网络篇)(九)
- 2D网络游戏开发(网络篇)(十)
- 2D网络游戏开发(网络篇)(十一)
- 2D网络游戏开发(网络篇)(一)
- 多核的网络游戏服务器开发 之 网络库(一)
- 多核的网络游戏服务器开发 之 网络库(二)
- 2D网络游戏开发(网络篇)(六)
- 2D网络游戏开发(网络篇)(六)
- 最聪明的如何成为优秀的——微软高管指点成材路
- Ajax二级动态菜单
- 2D网络游戏开发(网络篇)(七)1
- 2D网络游戏开发(网络篇)(七)2
- 2D网络游戏开发(网络篇)(八)1
- ORACLE常用傻瓜问题1000问
- 2D网络游戏开发(网络篇)(八)2
- 2D网络游戏开发(网络篇)(九)
- 2D网络游戏开发(网络篇)(十)
- 2D网络游戏开发(网络篇)(十一)
- 一些入门的java小程序
- 一个冒泡算法