• Main Page
  • Related Pages
  • Modules
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

FileListTransfer.h

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         // TODO - overagressive, only one read can happen at a time. See SendIRIToAddress
00131         SimpleMutex filesToPushAllSameAddressMutex;
00132 };
00133 
00134 #endif
00135 
00136 #endif // _RAKNET_SUPPORT_*

Generated on Thu Sep 30 2010 01:27:23 for RakNet by  doxygen 1.7.1