diff options
-rw-r--r-- | server/src/database.cc | 11 | ||||
-rw-r--r-- | server/src/database.h | 11 | ||||
-rw-r--r-- | server/src/macroparser.cc | 18 | ||||
-rw-r--r-- | server/src/macroparser.h | 1 | ||||
-rw-r--r-- | server/src/server.cc | 20 | ||||
-rw-r--r-- | server/src/template.h | 6 | ||||
-rw-r--r-- | server/src/templateparser.h | 7 |
7 files changed, 49 insertions, 25 deletions
diff --git a/server/src/database.cc b/server/src/database.cc index 2338bb6..371a870 100644 --- a/server/src/database.cc +++ b/server/src/database.cc @@ -142,11 +142,12 @@ void Database::commit(std::string user, #endif/*0*/ } -void Database::putJournal(std::string user, - std::string cpr, - Macro &_macro, - std::string resume, - time_t now) +void Database::putResume(std::string user, + std::string cpr, + Macro &_macro, + std::string resume, + time_t now, + bool store_in_journal) { std::string version = _macro.attributes["version"]; std::string macro = _macro.attributes["name"]; diff --git a/server/src/database.h b/server/src/database.h index 684cd6c..e311584 100644 --- a/server/src/database.h +++ b/server/src/database.h @@ -73,11 +73,12 @@ public: time_t oldest = 0); // Put an entry in the journal table - void putJournal(std::string user, - std::string cpr, - Macro &_macro, - std::string resume, - time_t now); + void putResume(std::string user, + std::string cpr, + Macro &_macro, + std::string resume, + time_t now, + bool store_in_journal); // Get latest resume of a given macro std::string getResume(std::string cpr, diff --git a/server/src/macroparser.cc b/server/src/macroparser.cc index 356de1f..582c90c 100644 --- a/server/src/macroparser.cc +++ b/server/src/macroparser.cc @@ -86,6 +86,11 @@ MacroParser::~MacroParser() void MacroParser::characterData(std::string &data) { + if(state == RESUME) { + assert(m); // No macro present! + m->resume.attributes["format"].append(data); + } + if(state == MAP) { assert(current_map); // No map present! current_map->attributes["lua"].append(data); @@ -112,6 +117,18 @@ void MacroParser::startTag(std::string name, std::map< std::string, std::string> return; } + // Enable resume parsing + if(name == "resume") { + if(state != MACRO) error("resume found outside macro."); + state = RESUME; + + m->resume.attributes = attributes; + + assert(m); // No macro is currently available, cannot create queries! + + return; + } + // Enable Query parsing if(name == "queries") { if(state != MACRO) error("queries found outside macro."); @@ -236,6 +253,7 @@ void MacroParser::endTag(std::string name) if(name == "macro") { state = UNDEFINED; } + if(name == "resume") state = MACRO; if(name == "queries") state = MACRO; if(name == "query") state = QUERIES; if(name == "maps") state = MACRO; diff --git a/server/src/macroparser.h b/server/src/macroparser.h index cbd36ba..843cb55 100644 --- a/server/src/macroparser.h +++ b/server/src/macroparser.h @@ -34,6 +34,7 @@ class MacroParser : public SAXParser { typedef enum { UNDEFINED, MACRO, + RESUME, QUERIES, QUERY, MAPS, diff --git a/server/src/server.cc b/server/src/server.cc index 92afbd0..2f2ee69 100644 --- a/server/src/server.cc +++ b/server/src/server.cc @@ -94,16 +94,20 @@ static std::string handleTransaction(Transaction *transaction, db->commit(transaction->user, transaction->cpr, *macro, commit.fields); - std::string resume = resume_parser(macro->attributes["resume"].c_str(), commit); - - // if(resume != "") { + std::string resume = resume_parser(macro->resume.attributes["format"].c_str(), commit); + + bool store_in_journal = + macro->resume.attributes.find("store_in_journal") != macro->resume.attributes.end() && + macro->resume.attributes["store_in_journal"] == "true"; + + if(resume != "" && store_in_journal) { journal_commit(transaction->cpr.c_str(), transaction->user.c_str(), Conf::journal_commit_addr.c_str(), Conf::journal_commit_port, resume.c_str(), resume.length()); - - db->putJournal(transaction->user, transaction->cpr, - *macro, resume, time(NULL)); - // } + } + + db->putResume(transaction->user, transaction->cpr, + *macro, resume, time(NULL), store_in_journal); i++; } @@ -205,7 +209,7 @@ static std::string handleTransaction(Transaction *transaction, if(completed) { answer += " <resume>"; answer += db->getResume(transaction->cpr, macro.attributes["name"], time(NULL) - Conf::db_max_ttl); - answer += " </resume>\n"; + answer += "</resume>\n"; } answer += " </macro>\n"; diff --git a/server/src/template.h b/server/src/template.h index d047712..0e016d4 100644 --- a/server/src/template.h +++ b/server/src/template.h @@ -51,6 +51,11 @@ public: std::map< std::string, std::string > attributes; }; +class Resume { +public: + std::map< std::string, std::string > attributes; +}; + class Macro { public: std::vector< Query > queries; @@ -58,6 +63,7 @@ public: std::vector< Script > scripts; Widget window; std::map< std::string, std::string > attributes; + Resume resume; }; class Course { diff --git a/server/src/templateparser.h b/server/src/templateparser.h index f69009a..845e605 100644 --- a/server/src/templateparser.h +++ b/server/src/templateparser.h @@ -34,13 +34,6 @@ typedef enum { UNDEFINED, COURSE, MACRO, - QUERIES, - QUERY, - MAPS, - MAP, - WINDOW, - LUAPROGRAMS, - LUAPROGRAM } ParserState; class TemplateParser : public SAXParser { |