一日一点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北洋小郭
转载请注明出处,请勿用于商业用途,谢谢!
- 一日一点RakNet(36)--FileListTransfer
- 一日一点RakNet(1)--RakNet
- 一日一点RakNet(1)--RakNet
- RakNet学习(35) -- FileListTransfer
- 一日一点RakNet(0) -- 开篇
- 一日一点RakNet(3)--介绍
- 一日一点RakNet(10)--Startup
- 一日一点RakNet(11)--Connecting
- 一日一点RakNet(15)--SystemAddress
- 一日一点RakNet(16)--BitStream
- 一日一点RakNet(20)--NetworkIDObject
- 一日一点RakNet(21)--Statistics
- 一日一点RakNet(31)--Autopatcher
- 一日一点RakNet(41)--Lobby2Client_360
- 一日一点RakNet(47)--RakVoice
- 一日一点RakNet(48)--ReadyEvent
- 一日一点RakNet(50)--Router2
- 一日一点RakNet(52)--SQLite3Plugin
- 重温经典 ——《计算机网络 第五版》读书随想
- 通过PID获取进程名
- C/C++中的经典垃圾回收算法概论
- C/C++中宏和内敛函数(inline)的区别
- linux下tomcat自启动配置
- 一日一点RakNet(36)--FileListTransfer
- C语言中动态内存的堆和栈
- Mac系统如何卸载Sophos杀毒软件
- 保持饥饿,保持愚蠢 Stay Hungry,Stay Foolish
- 散列表(HashTable)探秘 --上
- 今天刚刚开通博客,来看看
- 重学设计模式 - Facade模式
- 企业应用架构(.Net)
- 《桃姐》观后感