FileListTransfer Plugin¶
The FileListTransfer plugin enables efficient transfer of multiple files between systems. It supports compression, incremental transfers, and progress callbacks, making it ideal for game asset distribution and patching.
Basic Usage¶
Sending files:
#include "mafianet/FileListTransfer.h"
#include "mafianet/FileList.h"
MafiaNet::FileListTransfer flt;
peer->AttachPlugin(&flt);
// Create file list
MafiaNet::FileList files;
files.AddFile("assets/texture.png", "texture.png",
FileListNodeContext(0, 0, 0, 0));
files.AddFile("assets/model.obj", "model.obj",
FileListNodeContext(0, 0, 0, 0));
// Send to remote system
unsigned short setId = flt.SetupReceive(&transferCallback, false, targetAddress);
flt.Send(&files, peer, targetAddress, setId, HIGH_PRIORITY, 0, false);
Receiving files:
class MyTransferCallback : public MafiaNet::FileListTransferCBInterface {
public:
bool OnFile(OnFileStruct* ofs) override {
// Save received file
FILE* fp = fopen(ofs->fileName, "wb");
fwrite(ofs->fileData, 1, ofs->byteLengthOfThisFile, fp);
fclose(fp);
return true; // Continue receiving
}
void OnFileProgress(FileProgressStruct* fps) override {
printf("Progress: %d/%d bytes\n",
fps->partCount * fps->partLength,
fps->byteLengthOfThisFile);
}
};
MyTransferCallback callback;
flt.SetupReceive(&callback, false, MafiaNet::UNASSIGNED_SYSTEM_ADDRESS);
Key Features¶
Transfer multiple files in a single operation
Built-in compression support (requires zlib)
Incremental transfer with delta encoding
Progress callbacks for UI updates
Automatic chunking for large files
Resume capability after disconnection
Memory-efficient streaming mode
Configuration Options¶
SetupReceive()- Configure receive callbackSend()- Initiate file transferCancelReceive()- Abort ongoing transferGetPendingFilesToAddress()- Check transfer queueSetCallbackThreadSafe()- Enable thread-safe callbacks
See Also¶
DirectoryDeltaTransfer Plugin - Directory synchronization
Autopatcher Plugin - Delta patching system
BitStreams - Binary data handling