summaryrefslogtreecommitdiff
path: root/server/src/server.cc
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/server.cc')
-rw-r--r--server/src/server.cc41
1 files changed, 29 insertions, 12 deletions
diff --git a/server/src/server.cc b/server/src/server.cc
index 2641b8a..6e480ed 100644
--- a/server/src/server.cc
+++ b/server/src/server.cc
@@ -54,6 +54,9 @@
#include "journal_commit.h"
#include "xml_encode_decode.h"
+#include "macrolist.h"
+#include "version.h"
+
static std::string error_box(std::string message)
{
std::string errorbox =
@@ -79,7 +82,8 @@ public:
static std::string handleTransaction(Transaction *transaction,
TCPSocket *pentominos_socket,
Database *db,
- JournalWriter &journalwriter)
+ JournalWriter &journalwriter,
+ MacroList &macrolist)
{
std::string answer;
answer += "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
@@ -93,8 +97,8 @@ static std::string handleTransaction(Transaction *transaction,
Commits::iterator i = transaction->commits.begin();
while(i != transaction->commits.end()) {
Commit &commit = *i;
-
- MacroParser mp(commit.macro);
+
+ MacroParser mp(macrolist.getLatestVersion(commit.macro));
mp.parse();
Macro *macro = mp.getMacro();
@@ -173,7 +177,7 @@ static std::string handleTransaction(Transaction *transaction,
) {
foundmacro = true;
- MacroParser mp(macro.attributes["name"]);
+ MacroParser mp(macrolist.getLatestVersion(macro.attributes["name"]));
mp.parse();
Macro *m = mp.getMacro();
answer += " caption=\"" + m->window.attributes["caption"] + "\"";
@@ -225,7 +229,7 @@ static std::string handleTransaction(Transaction *transaction,
answer += widgetgenerator(transaction->cpr, *m, lqm, db);
} else {
// only find macro title
- MacroParser mp(macro.attributes["name"]);
+ MacroParser mp(macrolist.getLatestVersion(macro.attributes["name"]));
mp.parse();
Macro *m = mp.getMacro();
answer += " caption=\"" + m->window.attributes["caption"] + "\"";
@@ -275,6 +279,21 @@ static void handleConnection(TCPSocket *socket)
JournalWriter journalwriter(Conf::journal_commit_addr.c_str(), Conf::journal_commit_port);
+ MacroList macrolist(Conf::xml_basedir + "/macros");
+
+ MacroList::iterator i = macrolist.begin();
+ while(i != macrolist.end()) {
+ MacroListItem::iterator j = i->second.begin();
+ while(j != i->second.end()) {
+ PRACRO_DEBUG(server, "%s - v%s file: %s\n",
+ i->first.c_str(),
+ ((std::string)j->first).c_str(),
+ j->second.c_str());
+ j++;
+ }
+ i++;
+ }
+
ssize_t size;
char buf[4096];
@@ -300,7 +319,7 @@ static void handleConnection(TCPSocket *socket)
if(parser->parse(buf, size)) {
PRACRO_DEBUG(server, "Got complete XML document %d bytes used, %d bytes in current buffer.\n", parser->usedBytes(), size);
- socket->write(handleTransaction(transaction, &pentominos_socket, db, journalwriter));
+ socket->write(handleTransaction(transaction, &pentominos_socket, db, journalwriter, macrolist));
size = size - parser->usedBytes();
delete transaction; transaction = NULL;
@@ -398,6 +417,8 @@ void server()
#ifdef TEST_SERVER
+bool pracro_is_running = true;
+
char request[] =
"<?xml version='1.0' encoding='UTF-8'?>\n"
"<pracro cpr=\"2003791613\" version=\"1.0\">\n"
@@ -406,9 +427,6 @@ char request[] =
int main()
{
- Configuration conf("../etc/pracrod.conf");
- initConfig(&conf);
-
switch(fork()) {
case -1: // error
return 1;
@@ -420,13 +438,12 @@ int main()
default: // parent
{
TCPSocket socket;
- int port = config()->lookup("port");
- socket.connect("localhost", port);
+ socket.connect("localhost", Conf::server_port);
socket.write(request);
char buf[32];
memset(buf, 0, sizeof(buf));
- while(socket.read(buf, 31)) {
+ while(socket.read(buf, 31, 1000)) {
printf(buf); fflush(stdout);
memset(buf, 0, sizeof(buf));
}