IBR-DTNSuite
0.8
|
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_ */