![]() |
VR-Link API Documentation for DIS
|
00001 /********************************************************************* 00002 ** Copyright (c) 1992-2010 VT MAK 00003 ** All rights reserved. 00004 *********************************************************************/ 00008 #pragma once 00009 00010 #ifndef VXWORKS 00011 00014 #include "vlFilename.h" 00015 #include "vlString.h" 00016 #include "vlUtil.h" 00017 #include "vlInetAddr.h" 00018 00019 #include <fstream> 00020 #include <map> 00021 #include <vector> 00022 00023 #ifdef DtUSE_UTILITIES_NAMESPACE 00024 namespace DtUSE_UTILITIES_NAMESPACE 00025 { 00026 #endif 00027 00028 00029 class DtInetSocket; 00030 class DtInetTcpSocket; 00031 class DtInetSocketMgr; 00032 00033 class DT_DLL_VLUTIL DtInetFileTransportObject 00034 { 00035 public: 00036 DtInetFileTransportObject(); 00037 DtInetFileTransportObject(const DtInetFileTransportObject&); 00038 00039 DtInetFileTransportObject& operator=(const DtInetFileTransportObject&); 00040 00041 int myFileIdentifier; 00042 DtFilename myFilename; 00043 int myFileLength; 00044 unsigned long myBufferLength; 00045 unsigned long myBytesReceived; 00046 std::vector<char> myBuffer; 00047 int myFlags; 00048 }; 00049 00050 class DT_DLL_VLUTIL DtInetFileTransporter 00051 { 00052 public: 00053 00054 typedef void (*DtInetFileTransferedCallbackFn) 00055 (const DtFilename& file, void* usr); 00056 00057 typedef std::map<int, DtInetFileTransportObject> DtFileObjectMap; 00058 00059 enum DtInetFileTransportFlags 00060 { 00061 DtFileNormal = 0, 00062 DtFileCompressed = 1, 00063 DtFileEncrypted = 2 00064 }; 00065 00066 public: 00067 00075 DtInetFileTransporter( 00076 int port = 3000, 00077 bool findFirstAvailable = false, 00078 int portRangeToTry = 10, 00079 const DtFilename &tagetDirectory = ".", 00080 int *status = 0, 00081 bool useIpv6 = false); 00082 00084 virtual ~DtInetFileTransporter(); 00085 00087 virtual void tick(); 00088 00091 virtual unsigned int port() const; 00092 00095 virtual void addFileTransferedCallback( 00096 DtInetFileTransferedCallbackFn fn, void* data); 00097 virtual void removeFileTransferedCallback( 00098 DtInetFileTransferedCallbackFn fn, void* data); 00099 00101 virtual bool sendFile( 00102 const DtFilename& filename, const DtInetAddr& destAddr, int port); 00103 00105 virtual bool sendFile( 00106 const DtFilename& filename, const DtInetAddr& destAddr); 00107 00112 const DtFilename& targetDirectory() const; 00113 void setTargetDirectory(const DtFilename& f); 00114 00115 public: 00116 00118 // static void receiveFileCb(DtTcpSocket* sock, void* usr); 00119 static bool receiveFileCb(DtInetSocket* sock, void* usr); 00120 00121 protected: 00122 00127 // virtual void receiveFile(DtTcpSocket* sock); 00128 virtual void receiveFile(DtInetTcpSocket* sock); 00129 00133 virtual int nextFileIdentifier(); 00134 00141 virtual bool readFileToBuffer(std::ifstream& inFile, 00142 std::vector<char>& fileBuffer, int fileLengthInBytes, int& retBufLen, 00143 DtInetFileTransportFlags& flags); 00144 00146 virtual void finishFile(DtInetFileTransportObject& object); 00147 00148 virtual DtInetFileTransportObject& transportObject(int iFileIdentifier); 00149 00150 protected: 00151 00153 DtInetFileTransporter(const DtInetFileTransporter&); 00154 00156 DtInetFileTransporter& operator=(const DtInetFileTransporter&); 00157 00158 protected: 00159 00160 typedef std::map<DtInetFileTransferedCallbackFn, void*> FileTransferedCallbackMapType; 00161 00162 protected: 00163 00164 FileTransferedCallbackMapType myCallbacks; 00165 int myPort; 00166 DtInetSocketMgr* mySocketMgr; 00167 DtFilename myTargetDirectory; 00168 00169 DtFileObjectMap myActiveFiles; 00170 }; 00171 00172 #ifdef DtUSE_UTILITIES_NAMESPACE 00173 } 00174 #endif 00175 00176 #endif //! !VXWORKS 00177