summaryrefslogtreecommitdiffstats
path: root/src/uscxml/plugins/invoker/filesystem/dirmon
diff options
context:
space:
mode:
authorStefan Radomski <radomski@tk.informatik.tu-darmstadt.de>2013-09-23 16:30:04 (GMT)
committerStefan Radomski <radomski@tk.informatik.tu-darmstadt.de>2013-09-23 16:30:04 (GMT)
commitbe3c180fec71866a91b5f9297708d581bc1d6435 (patch)
tree830acee295b8456d1e629a0db6c3734f629074a3 /src/uscxml/plugins/invoker/filesystem/dirmon
parent8dde1311719b29c63efb379566916cb1aa9a7cd7 (diff)
downloaduscxml-be3c180fec71866a91b5f9297708d581bc1d6435.zip
uscxml-be3c180fec71866a91b5f9297708d581bc1d6435.tar.gz
uscxml-be3c180fec71866a91b5f9297708d581bc1d6435.tar.bz2
Added instant messaging invoker
Diffstat (limited to 'src/uscxml/plugins/invoker/filesystem/dirmon')
-rw-r--r--src/uscxml/plugins/invoker/filesystem/dirmon/DirMonInvoker.cpp31
-rw-r--r--src/uscxml/plugins/invoker/filesystem/dirmon/DirMonInvoker.h2
2 files changed, 28 insertions, 5 deletions
diff --git a/src/uscxml/plugins/invoker/filesystem/dirmon/DirMonInvoker.cpp b/src/uscxml/plugins/invoker/filesystem/dirmon/DirMonInvoker.cpp
index 1292e3a..559e441 100644
--- a/src/uscxml/plugins/invoker/filesystem/dirmon/DirMonInvoker.cpp
+++ b/src/uscxml/plugins/invoker/filesystem/dirmon/DirMonInvoker.cpp
@@ -49,7 +49,27 @@ boost::shared_ptr<InvokerImpl> DirMonInvoker::create(InterpreterImpl* interprete
}
Data DirMonInvoker::getDataModelVariables() {
+ tthread::lock_guard<tthread::recursive_mutex> lock(_mutex);
+
Data data;
+ data.compound["dir"] = Data(_dir, Data::VERBATIM);
+
+ std::set<std::string>::iterator suffixIter = _suffixes.begin();
+ while(suffixIter != _suffixes.end()) {
+ data.compound["suffixes"].array.push_back(Data(*suffixIter, Data::VERBATIM));
+ suffixIter++;
+ }
+
+ std::map<std::string, struct stat> entries = _watcher->getAllEntries();
+ std::map<std::string, struct stat>::iterator entryIter = entries.begin();
+ while(entryIter != entries.end()) {
+ data.compound["file"].compound[entryIter->first].compound["mtime"] = toStr(entryIter->second.st_mtime);
+ data.compound["file"].compound[entryIter->first].compound["ctime"] = toStr(entryIter->second.st_mtime);
+ data.compound["file"].compound[entryIter->first].compound["atime"] = toStr(entryIter->second.st_mtime);
+ data.compound["file"].compound[entryIter->first].compound["size"] = toStr(entryIter->second.st_mtime);
+ entryIter++;
+ }
+
return data;
}
@@ -115,7 +135,10 @@ void DirMonInvoker::invoke(const InvokeRequest& req) {
void DirMonInvoker::run(void* instance) {
while(((DirMonInvoker*)instance)->_isRunning) {
- ((DirMonInvoker*)instance)->_watcher->updateEntries();
+ {
+ tthread::lock_guard<tthread::recursive_mutex> lock(((DirMonInvoker*)instance)->_mutex);
+ ((DirMonInvoker*)instance)->_watcher->updateEntries();
+ }
tthread::this_thread::sleep_for(tthread::chrono::milliseconds(20));
}
}
@@ -233,7 +256,7 @@ DirectoryWatch::~DirectoryWatch() {
}
}
-
+
void DirectoryWatch::reportAsDeleted() {
std::map<std::string, struct stat>::iterator fileIter = _knownEntries.begin();
while(fileIter != _knownEntries.end()) {
@@ -248,8 +271,8 @@ void DirectoryWatch::reportAsDeleted() {
monIter++;
}
}
- _knownEntries.erase(fileIter->first);
- fileIter++;
+ _knownEntries.erase(fileIter++);
+// fileIter++;
}
assert(_knownDirs.size() == 0);
assert(_knownEntries.size() == 0);
diff --git a/src/uscxml/plugins/invoker/filesystem/dirmon/DirMonInvoker.h b/src/uscxml/plugins/invoker/filesystem/dirmon/DirMonInvoker.h
index 59eee81..f5aa4bc 100644
--- a/src/uscxml/plugins/invoker/filesystem/dirmon/DirMonInvoker.h
+++ b/src/uscxml/plugins/invoker/filesystem/dirmon/DirMonInvoker.h
@@ -44,7 +44,7 @@ public:
std::map<std::string, struct stat> dirEntries = dirIter->second->getAllEntries();
std::map<std::string, struct stat>::iterator dirEntryIter = dirEntries.begin();
while(dirEntryIter != dirEntries.end()) {
- entries[dirIter->first + PATH_SEPERATOR + dirEntryIter->first] = dirEntryIter->second;
+ entries[dirIter->first + '/' + dirEntryIter->first] = dirEntryIter->second;
dirEntryIter++;
}
dirIter++;