00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef ARCLIENTFILEUTILS_H
00027 #define ARCLIENTFILEUTILS_H
00028
00029 #include "Aria.h"
00030 #include "ArClientBase.h"
00031
00033 class ArClientFileListerItem
00034 {
00035 public:
00037 ArClientFileListerItem(const char *name, time_t atime, time_t mtime,
00038 ArTypes::UByte4 size)
00039 { myName = name; myATime = atime; myMTime = mtime; mySize = size; }
00041 ArClientFileListerItem(const ArClientFileListerItem &item)
00042 { myName = item.myName; myATime = item.myATime; myMTime = item.myMTime;
00043 mySize = item.mySize; }
00045 AREXPORT ArClientFileListerItem &operator=(const
00046 ArClientFileListerItem &item)
00047 {
00048 if (this != &item)
00049 {
00050 myName = item.myName; myATime = item.myATime; myMTime = item.myMTime;
00051 mySize = item.mySize;
00052 }
00053 return *this;
00054 }
00056 virtual ~ArClientFileListerItem() {}
00058 const char *getName(void) const { return myName.c_str(); }
00060 time_t getLastAccessedTime(void) const { return myATime; }
00062 time_t getLastModifiedTime(void) const { return myMTime; }
00064 ArTypes::UByte4 getSize(void) const { return mySize; }
00065 protected:
00066 std::string myName;
00067 time_t myATime;
00068 time_t myMTime;
00069 ArTypes::UByte4 mySize;
00070 };
00071
00073
00090 class ArClientFileLister
00091 {
00092 public:
00094 AREXPORT ArClientFileLister(ArClientBase *client);
00096 AREXPORT virtual ~ArClientFileLister();
00098 AREXPORT bool isAvailable(void);
00100 AREXPORT void changeToTopDir(void);
00102 AREXPORT void changeToDir(const char *dir);
00104 AREXPORT void upOneDir(void);
00106 AREXPORT void changeToAbsDir(const char *dir);
00108 AREXPORT const char *getCurrentDir(void) const;
00110 AREXPORT std::list<ArClientFileListerItem> getDirectories(void) const;
00112 AREXPORT std::list<ArClientFileListerItem> getFiles(void) const;
00114 AREXPORT void addUpdatedCallback(ArFunctor1<int> *functor,
00115 ArListPos::Pos position = ArListPos::LAST);
00117 AREXPORT void remUpdatedCallback(ArFunctor1<int> *functor);
00119 AREXPORT ArTime getLastUpdated(void);
00121 AREXPORT ArTime getLastRequested(void);
00123 AREXPORT void log(bool withTimes);
00124 protected:
00125 AREXPORT void netGetDirListing(ArNetPacket *packet);
00126 AREXPORT void callUpdatedCallbacks(int val);
00127 AREXPORT void logList(
00128 std::list<ArClientFileListerItem> *logThis,
00129 bool withTimes);
00130 ArMutex myDataMutex;
00131 ArMutex myCallbackMutex;
00132 ArClientBase *myClient;
00133 char myCurrentDir[2048];
00134 char myWaitingForDir[2048];
00135 ArTime myLastRequested;
00136 ArTime myLastUpdated;
00137 std::list<ArClientFileListerItem> myDirectories;
00138 std::list<ArClientFileListerItem> myFiles;
00139 std::list<ArFunctor1<int> *> myUpdatedCallbacks;
00140 ArFunctor1C<ArClientFileLister, ArNetPacket *> myGetDirListingCB;
00141 };
00142
00143
00145
00160 class ArClientFileToClient
00161 {
00162 public:
00164 AREXPORT ArClientFileToClient(ArClientBase *client);
00166 AREXPORT virtual ~ArClientFileToClient();
00168 AREXPORT bool isAvailable(void);
00170 AREXPORT bool getFileFromDirectory(const char *directory,
00171 const char *fileName,
00172 const char *clientFileName);
00174 AREXPORT void cancelGet(void);
00176 AREXPORT bool isWaitingForFile(void);
00178 AREXPORT const char *getDirectory(void);
00180 AREXPORT const char *getFileName(void);
00182 AREXPORT const char *getClientFileName(void);
00184 AREXPORT void addFileReceivedCallback(ArFunctor1<int> *functor,
00185 ArListPos::Pos position = ArListPos::LAST);
00187 AREXPORT void remFileReceivedCallback(ArFunctor1<int> *functor);
00189 AREXPORT ArTime getLastReceived(void);
00191 AREXPORT ArTime getLastRequested(void);
00192 protected:
00193 AREXPORT void netGetFile(ArNetPacket *packet);
00194 AREXPORT void callFileReceivedCallbacks(int val);
00195 ArMutex myDataMutex;
00196 ArMutex myCallbackMutex;
00197 ArClientBase *myClient;
00198 bool myIsWaitingForFile;
00199 std::string myDirectory;
00200 std::string myFileName;
00201 std::string myWholeFileName;
00202 std::string myClientFileName;
00203 FILE *myFile;
00204 ArTime myLastRequested;
00205 ArTime myLastReceived;
00206 std::list<ArFunctor1<int> *> myFileReceivedCallbacks;
00207 ArFunctor1C<ArClientFileToClient, ArNetPacket *> myGetFileCB;
00208 };
00209
00211
00228 class ArClientFileFromClient
00229 {
00230 public:
00232 AREXPORT ArClientFileFromClient(ArClientBase *client);
00234 AREXPORT virtual ~ArClientFileFromClient();
00236 AREXPORT bool isAvailable(void);
00238 AREXPORT bool isAvailableSlow(void);
00240 AREXPORT bool isAvailableFast(void);
00242 enum SendSpeed
00243 {
00244 SPEED_AUTO,
00245 SPEED_FAST,
00246 SPEED_SLOW
00247 };
00249 AREXPORT bool putFileToDirectory(const char *directory,
00250 const char *fileName,
00251 const char *clientFileName,
00252 SendSpeed sendSpeed = SPEED_AUTO);
00254 AREXPORT void cancelPut(void);
00256 AREXPORT bool isWaitingForReturn(void);
00258 AREXPORT const char *getDirectory(void);
00260 AREXPORT const char *getFileName(void);
00262 AREXPORT const char *getClientFileName(void);
00264 AREXPORT void addFileSentCallback(ArFunctor1<int> *functor,
00265 ArListPos::Pos position = ArListPos::LAST);
00267 AREXPORT void remFileSentCallback(ArFunctor1<int> *functor);
00269 AREXPORT ArTime getLastCompletedSend(void);
00271 AREXPORT ArTime getLastStartedSend(void);
00272 protected:
00273 AREXPORT void netPutFile(ArNetPacket *packet);
00274 AREXPORT void callFileSentCallbacks(int val);
00275 ArMutex myDataMutex;
00276 ArMutex myCallbackMutex;
00277 ArClientBase *myClient;
00278 bool myIsWaitingForReturn;
00279 bool myInterleaved;
00280 std::string myCommandName;
00281 std::string myDirectory;
00282 std::string myFileName;
00283 std::string myWholeFileName;
00284 std::string myClientFileName;
00285
00286 bool myReadyForNextPacket;
00287 FILE *myFile;
00288 ArTime myLastStartedSend;
00289 ArTime myLastCompletedSend;
00290 std::list<ArFunctor1<int> *> myFileSentCallbacks;
00291 ArFunctor1C<ArClientFileFromClient, ArNetPacket *> myPutFileCB;
00292 };
00293
00294
00296
00313 class ArClientDeleteFileOnServer
00314 {
00315 public:
00317 AREXPORT ArClientDeleteFileOnServer(ArClientBase *client);
00319 AREXPORT virtual ~ArClientDeleteFileOnServer();
00321 AREXPORT bool isAvailable(void);
00323 AREXPORT bool deleteFileFromDirectory(const char *directory,
00324 const char *fileName);
00326 AREXPORT bool isWaitingForReturn(void);
00328 AREXPORT const char *getDirectory(void);
00330 AREXPORT const char *getFileName(void);
00332 AREXPORT void addFileDeletedCallback(ArFunctor1<int> *functor,
00333 ArListPos::Pos position = ArListPos::LAST);
00335 AREXPORT void remFileDeletedCallback(ArFunctor1<int> *functor);
00337 AREXPORT ArTime getLastCompletedSend(void);
00339 AREXPORT ArTime getLastStartedSend(void);
00340 protected:
00341 AREXPORT void netDeleteFile(ArNetPacket *packet);
00342 AREXPORT void callFileDeletedCallbacks(int val);
00343 ArMutex myDataMutex;
00344 ArMutex myCallbackMutex;
00345 ArClientBase *myClient;
00346 bool myIsWaitingForReturn;
00347 std::string myDirectory;
00348 std::string myFileName;
00349 std::string myWholeFileName;
00350 FILE *myFile;
00351 ArTime myLastStartedSend;
00352 ArTime myLastCompletedSend;
00353 std::list<ArFunctor1<int> *> myFileDeletedCallbacks;
00354 ArFunctor1C<ArClientDeleteFileOnServer, ArNetPacket *> myDeleteFileCB;
00355 };
00356
00357 #endif //ARCLIENTFILEUTILS_H