Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008 #include "NativeFeatureIncludes.h"
00009 #if _RAKNET_SUPPORT_FileListTransfer==1
00010
00011 #ifndef __FILE_LIST_TRANFER_H
00012 #define __FILE_LIST_TRANFER_H
00013
00014 #include "RakNetTypes.h"
00015 #include "Export.h"
00016 #include "PluginInterface2.h"
00017 #include "DS_Map.h"
00018 #include "RakNetTypes.h"
00019 #include "PacketPriority.h"
00020 #include "RakMemoryOverride.h"
00021 #include "FileList.h"
00022 #include "DS_Queue.h"
00023 #include "SimpleMutex.h"
00024
00025 class IncrementalReadInterface;
00026 class FileListTransferCBInterface;
00027 class FileListProgress;
00028 struct FileListReceiver;
00029
00034
00045 class RAK_DLL_EXPORT FileListTransfer : public PluginInterface2
00046 {
00047 public:
00048 FileListTransfer();
00049 virtual ~FileListTransfer();
00050
00056 unsigned short SetupReceive(FileListTransferCBInterface *handler, bool deleteHandler, SystemAddress allowedSender);
00057
00068 void Send(FileList *fileList, RakPeerInterface *rakPeer, SystemAddress recipient, unsigned short setID, PacketPriority priority, char orderingChannel, bool compressData, IncrementalReadInterface *_incrementalReadInterface=0, unsigned int _chunkSize=262144*4*16);
00069
00071 unsigned int GetPendingFilesToAddress(SystemAddress recipient);
00072
00074 void CancelReceive(unsigned short setId);
00075
00077 void RemoveReceiver(SystemAddress systemAddress);
00078
00080 bool IsHandlerActive(unsigned short setId);
00081
00084 void SetCallback(FileListProgress *cb);
00085
00088 FileListProgress *GetCallback(void) const;
00089
00091 virtual PluginReceiveResult OnReceive(Packet *packet);
00093 virtual void OnRakPeerShutdown(void);
00095 virtual void OnClosedConnection(SystemAddress systemAddress, RakNetGUID rakNetGUID, PI2_LostConnectionReason lostConnectionReason );
00097 virtual void Update(void);
00098
00099 protected:
00100 bool DecodeSetHeader(Packet *packet);
00101 bool DecodeFile(Packet *packet, bool fullFile);
00102
00103 void Clear(void);
00104
00105 void OnReferencePush(Packet *packet, bool fullFile);
00106 void OnReferencePushAck(Packet *packet);
00107 void SendIRIToAddress(SystemAddress systemAddress);
00108
00109 DataStructures::Map<unsigned short, FileListReceiver*> fileListReceivers;
00110 unsigned short setId;
00111 FileListProgress *callback;
00112
00113 struct FileToPush
00114 {
00115 FileListNode fileListNode;
00116 PacketPriority packetPriority;
00117 char orderingChannel;
00118 unsigned int currentOffset;
00119 unsigned short setID;
00120 unsigned int setIndex;
00121 IncrementalReadInterface *incrementalReadInterface;
00122 unsigned int chunkSize;
00123 };
00124 struct FileToPushRecipient
00125 {
00126 SystemAddress systemAddress;
00127 DataStructures::Queue<FileToPush*> filesToPush;
00128 };
00129 DataStructures::List< FileToPushRecipient* > filesToPushAllSameAddress;
00130
00131 SimpleMutex filesToPushAllSameAddressMutex;
00132 };
00133
00134 #endif
00135
00136 #endif // _RAKNET_SUPPORT_*