IBR-DTNSuite  0.8
daemon/src/net/FileMonitor.h
Go to the documentation of this file.
00001 /*
00002  * FileMonitor.h
00003  *
00004  *  Created on: 10.04.2012
00005  *      Author: morgenro
00006  */
00007 
00008 #include "Component.h"
00009 #include "core/Node.h"
00010 #include <ibrcommon/data/File.h>
00011 #include <ibrcommon/net/vsocket.h>
00012 #include <map>
00013 
00014 #ifndef FILEMONITOR_H_
00015 #define FILEMONITOR_H_
00016 
00017 namespace dtn
00018 {
00019         namespace net
00020         {
00021                 class FileMonitor : public dtn::daemon::IndependentComponent
00022                 {
00023                 public:
00024                         FileMonitor();
00025                         virtual ~FileMonitor();
00026 
00027                         void watch(const ibrcommon::File &watch);
00028 
00029                         const std::string getName() const;
00030 
00031                 protected:
00032                         void componentUp();
00033                         void componentRun();
00034                         void componentDown();
00035 
00036                         void __cancellation();
00037 
00038                 private:
00039                         void scan();
00040                         bool isActive(const ibrcommon::File &path) const;
00041 
00042                         void adopt(const ibrcommon::File &path);
00043 
00044                         ibrcommon::File _watch;
00045                         ibrcommon::vsocket _socket;
00046                         int _inotify_sock;
00047                         typedef std::map<int, ibrcommon::File> watch_map;
00048                         watch_map _watch_map;
00049                         bool _running;
00050 
00051                         std::map<ibrcommon::File, dtn::core::Node> _active_paths;
00052 
00053                 };
00054         }
00055 } /* namespace ibrcommon */
00056 #endif /* FILEMONITOR_H_ */