一日一点RakNet(36)--FileListTransfer

FileListTransfer概览

 

接收发送文件更加容易

 

        FileListTransfer插件用于发送可以读取进FileList类的文件列表。它与DirectoryDeltaTransfer插件类似,它并不发送预先存在的文件的目录信息,也不是完成将文件写到disk的任务。它仅仅处理要发送文件的网络传输部分。

      

使用:

       1.服务器:使用一个允许发送文件的系统的地址作为参数,调用SetupReceive(…),当数据到达时,系统会调用FileListTransferCBInterface派生的回调处理器。

       2.客户端:将要发送数据编码到FileList类。

       3.客户端:使用FileList类实例调用Send(…),一组用户定义的ID用来标识这一组文件,参数传递给RakPeerInterface::Send()TCPInterface::Send(),需要一个布尔类型的参数,它标识文件是否需要压缩。压缩速度并不快,因此除非带宽非常有限,否则保持原始参数不要修改。

 

FileList概览

       FileList类存储了一个文件和数据列表,并且包含了一组处理硬件驱动的功能函数。它最初是为Autopatcher写的,但是也可以用于你自己专用目的。

       参考FileList.h,查看所有的函数和参数的一个完整的描述信息。

      // 在一个指定的目录增加所有的文件

      void AddFilesFromDirectory(const char *applicationDirectory, const char *subDirectory, bool writeHash, bool writeData, bool recursive, unsigned char context);

      // 释放所有的内存

      void Clear(void);

      // 将所有的编码数据写入到bitstream

      void Serialize(RakNet::BitStream *outBitStream);

      // bitstream中读取出所有的编码数据,在反序列化之前调用Clear()

      bool Deserialize(RakNet::BitStream *inBitStream);

      // 给定已存的一组文件,从applicationDirectory指定目录中搜索相同的文件

      // 对于每一个丢失或者不同的文件,将这个文件添加到missingOrChangedFiles

      // 注意:此处没有写入文件内容,如果alwaysWriteHash参数为真,仅仅写入hash

      void ListMissingOrChangedFiles(const char *applicationDirectory, FileList *missingOrChangedFiles, bool alwaysWriteHash, bool neverWriteHash);

      // 返回需要写入与当前的FileList对象对比的文件。

      void GetDeltaToCurrent(FileList *input, FileList *output, const char *dirSubset, const char *remoteSubdir);

      // 假设FileList包含了大概的文件名列表,其中并不包含数据,为这些文件读取数据

      void PopulateDataFromDisk(const char *applicationDirectory, bool writeFileData, bool writeFileHash, bool removeUnknownFiles);

      // 将所有的文件写到磁盘,使用applicationDirectory参数传递目录前缀。

      void WriteDataToDisk(const char *applicationDirectory);

      // 假设文件数据已经放到了内存,增加一个文件。

      void AddFile(const char *filename, const char *data, const unsigned dataLength, const unsigned fileLength, unsigned char context);

      // 增加一个文件,从磁盘读取文件。

      void AddFile(const char *filepath, const char *filename, unsigned char context);

      // 删除所有存储在文件列表中的文件

      void DeleteFiles(const char *applicationDirectory);

       

      By 北洋小郭

      转载请注明出处,请勿用于商业用途,谢谢!

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Raknet是一个基于UDP网络传输协议的C++网络库,允许程序员在他们自己的程序中实现高效的网络传输服务。通常情况下用于游戏,但也可以用于其它项目。   Radnet有以下特点:   l 高性能 在同一台计算机上,Raknet可以实现在两个程序之间每秒传输25,000条信息;   l 容易使用 Radnet有在线用户手册,视频教程。每一个函数和类都有详细的讲解,每一个功能都有自己的例程;   l 跨平台,当前Radnet支持Windows, Linux, Macs,可以建立在Visual Studio, GCC, Code: Blocks, DevCPP 和其它平台上;   l 在线技术支持 RakNet有一个活跃的论坛,邮件列表,你只要给他们发信,他们可以在几小时之内回复你。   l 安全的传输 RakNet在你的代码中自动使用SHA1, AES128, SYN,用RSA避免传输受到攻击   l 音频传输 用Speex编码解码,8位的音频只需要每秒500字节传输。   l 远程终端 用RakNet,你能远程管理你的程序,包括程序的设置,密码的管理和日志的管理。   l 目录服务器 目录服务器允许服务器列举他们自己需要的客户端,并与他们连接。   l Autopatcher Autopatcher系统将限制客户端传输到服务端的文件,这样是为了避免一些不合法的用户将一些不合法的文件传输到服务端。   l 对象重载系统   l 网络数据压缩 BitStream类允许压缩矢量,矩阵,四元数和在-1到1之间的实数。   l 远程功能调用   l 强健的通信层 可以保障信息按照不同的信道传输   RakNet支持两种版权,如果你是做免费游戏,RakNet将是免费的。相反,你必须支付一定的费用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值