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, MafiaNet::Priority::High, 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
Ordering Channel¶
Send() takes the ordering channel for every chunk of the transfer. Use a channel nothing else sends on: the transfer is ReliableOrdered, and a lost chunk holds back every later message on its channel until the chunk is retransmitted. See Ordering Channels.
See Also¶
DirectoryDeltaTransfer Plugin - Directory synchronization
Autopatcher Plugin - Delta patching system
BitStreams - Binary data handling