VR-Link API Documentation for DIS
vlInetFileTransport.h
Go to the documentation of this file.
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 

Document ID: Generated on Mon May 14 08:06:18 EDT 2012 from SVN revision 114750
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)