void DirectoryDeltaTransfer::OnDownloadRequest(Packet *packet) { char subdir[256]; char remoteSubdir[256]; RakNet::BitStream inBitstream(packet->data, packet->length, false); FileList remoteFileHash; FileList delta; unsigned short setId; inBitstream.IgnoreBits(8); inBitstream.Read(setId); StringCompressor::Instance()->DecodeString(subdir, 256, &inBitstream); StringCompressor::Instance()->DecodeString(remoteSubdir, 256, &inBitstream); if (remoteFileHash.Deserialize(&inBitstream)==false) { #ifdef _DEBUG RakAssert(0); #endif return; } availableUploads->GetDeltaToCurrent(&remoteFileHash, &delta, subdir, remoteSubdir); if (incrementalReadInterface==0) delta.PopulateDataFromDisk(applicationDirectory, true, false, true); else delta.FlagFilesAsReferences(); // This will call the ddtCallback interface that was passed to FileListTransfer::SetupReceive on the remote system fileListTransfer->Send(&delta, rakPeerInterface, packet->systemAddress, setId, priority, orderingChannel, incrementalReadInterface, chunkSize); }
void AutopatcherClient::OnDeletionList(Packet *packet) { if (packet->systemAddress!=serverId) return; RakNet::BitStream inBitStream(packet->data, packet->length, false); RakNet::BitStream outBitStream; inBitStream.IgnoreBits(8); FileList fileList; if (fileList.Deserialize(&inBitStream)==false) return; fileList.DeleteFiles(applicationDirectory); }