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 北洋小郭
转载请注明出处,请勿用于商业用途,谢谢!