一日一点RakNet(36)--FileListTransfer

来源:互联网 发布:淘宝中老年男士羽绒服 编辑:程序博客网 时间:2024/03/29 13:06

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北洋小郭

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

 

原创粉丝点击