Main Page | Class Hierarchy | Class List | Directories | File List | Class Members | File Members | Related Pages | Examples

ArClientFileUtils.h

Go to the documentation of this file.
00001 /*
00002 MobileRobots Advanced Robotics Interface for Applications (ARIA)
00003 Copyright (C) 2004, 2005 ActivMedia Robotics LLC
00004 Copyright (C) 2006, 2007 MobileRobots Inc.
00005 
00006      This program is free software; you can redistribute it and/or modify
00007      it under the terms of the GNU General Public License as published by
00008      the Free Software Foundation; either version 2 of the License, or
00009      (at your option) any later version.
00010 
00011      This program is distributed in the hope that it will be useful,
00012      but WITHOUT ANY WARRANTY; without even the implied warranty of
00013      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014      GNU General Public License for more details.
00015 
00016      You should have received a copy of the GNU General Public License
00017      along with this program; if not, write to the Free Software
00018      Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00019 
00020 If you wish to redistribute ARIA under different terms, contact 
00021 MobileRobots for information about a commercial version of ARIA at 
00022 robots@mobilerobots.com or 
00023 MobileRobots Inc, 19 Columbia Drive, Amherst, NH 03031; 800-639-9481
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

Generated on Tue Feb 20 10:51:49 2007 for ArNetworking by  doxygen 1.4.0