diff options
Diffstat (limited to 'server/src')
| -rw-r--r-- | server/src/server.cc | 256 | ||||
| -rw-r--r-- | server/src/templateparser.cc | 4 | 
2 files changed, 143 insertions, 117 deletions
| diff --git a/server/src/server.cc b/server/src/server.cc index f74c2b0..a896102 100644 --- a/server/src/server.cc +++ b/server/src/server.cc @@ -47,140 +47,162 @@  #include "resumeparser.h"  #include "journal_commit.h" -static void connection(TCPSocket &socket) +static std::string error_box(std::string message)  { -  Transaction transaction; -  TransactionParser parser(socket, transaction); -  parser.parse(); +  std::string errorbox; + +  errorbox += "    <course name=\"error\">\n"; +  errorbox += "      <macro name=\"error\">\n"; +  errorbox += "        <window caption=\"ERROR!\" height=\"240\" layout=\"vbox\" " +               "name=\"err\" width=\"320\">\n"; +  errorbox += "          <textedit name=\"errorlabel\" value=\""; +  errorbox += message; +  errorbox += "\"/>\n"; +  errorbox += "          <button action=\"cancel\" caption=\"Luk\" name=\"cancel\"/>\n"; +  errorbox += "        </window>\n"; +  errorbox += "      </macro>\n"; +  errorbox += "     </course>\n"; + +  return errorbox; +} +static void connection(TCPSocket &socket) +{    socket.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");    socket.write("<pracro version=\"1.0\">\n"); -  Database db; - -  // -  // Handle commits -  // -  if(transaction.commits.size() > 0) { -    Commits::iterator i = transaction.commits.begin(); -    while(i != transaction.commits.end()) { -      Commit &commit = *i; - -      /* -      Macro macro; -      MacroParser parser(commit.macro, macro); -      parser.parse(); -      */ - -       -      Macro macro; -      macro.attributes["name"] = commit.macro; -      macro.attributes["version"] = "1.0";//commit.version; -       -      db.commit(transaction.user, transaction.cpr, macro, commit.fields); - -      /* -      std::string resume = resume_parser(macro.format.c_str(), commit); - -      std::string journal_commit_addr = config()->lookup("journal_commit_addr"); -      int journal_commit_port = config()->lookup("journal_commit_port"); - -      journal_commit(transaction.cpr.c_str(), transaction.user.c_str(), -                     journal_commit_addr.c_str(), journal_commit_port, -                     resume.c_str(), resume.length()); -      */ -      i++; +  try { +    Transaction transaction; +    TransactionParser parser(socket, transaction); +    parser.parse(); + +    Database db; + +    // +    // Handle commits +    // +    if(transaction.commits.size() > 0) { +      Commits::iterator i = transaction.commits.begin(); +      while(i != transaction.commits.end()) { +        Commit &commit = *i; +         +        /* +          Macro macro; +          MacroParser parser(commit.macro, macro); +          parser.parse(); +        */        +         +        Macro macro; +        macro.attributes["name"] = commit.macro; +        macro.attributes["version"] = "1.0";//commit.version; +         +        db.commit(transaction.user, transaction.cpr, macro, commit.fields); +         +        /* +          std::string resume = resume_parser(macro.format.c_str(), commit); +           +          std::string journal_commit_addr = config()->lookup("journal_commit_addr"); +          int journal_commit_port = config()->lookup("journal_commit_port"); +           +          journal_commit(transaction.cpr.c_str(), transaction.user.c_str(), +          journal_commit_addr.c_str(), journal_commit_port, +          resume.c_str(), resume.length()); +        */ +        i++; +      }      } -  } - -  // -  // Handle requests -  // -  Requests::iterator i = transaction.requests.begin(); -  while(i != transaction.requests.end()) { -    Request &request = *i; - -    printf("Handling request - macro: %s, course: %s\n", request.macro.c_str(), request.course.c_str()); - -    // Read and parse the template file. -    TemplateParser tp(request.course); -    tp.parse(); - -    Template *templ = tp.getTemplate(); - -    // Send the queries to Pentominos (if any) -    TCPSocket s; -    s.connect("localhost", 11108); -    QueryHandler qh(&s, transaction.cpr); -    std::vector< Macro >::iterator mi = templ->course.macroes.begin(); -    while(mi != templ->course.macroes.end()) { -      Macro ¯o = (*mi); -      if(macro.attributes["name"] == request.macro) { -        std::vector< Query >::iterator qi = macro.queries.begin(); -        while(qi != macro.queries.end()) { -          qh.addQuery(*qi); +    // +    // Handle requests +    // +    Requests::iterator i = transaction.requests.begin(); +    while(i != transaction.requests.end()) { +      Request &request = *i; +       +      printf("Handling request - macro: %s, course: %s\n", request.macro.c_str(), request.course.c_str()); +       +      // Read and parse the template file. +      TemplateParser tp(request.course); +      tp.parse(); +       +      Template *templ = tp.getTemplate(); +       +      // Send the queries to Pentominos (if any) +      TCPSocket s; +      s.connect("localhost", 11108); +      QueryHandler qh(&s, transaction.cpr); +       +      std::vector< Macro >::iterator mi = templ->course.macroes.begin(); +      while(mi != templ->course.macroes.end()) { +        Macro ¯o = (*mi); +        if(macro.attributes["name"] == request.macro) { +          std::vector< Query >::iterator qi = macro.queries.begin(); +          while(qi != macro.queries.end()) { +            qh.addQuery(*qi);            qi++; +          }          } -      }        mi++; -    } -    std::string result = qh.exec(); - -    printf("Got result: [%s]\n", result.c_str()); - -    // Parse the result from the queries to pentominos -    QueryParser qp(result); -    qp.parse(); - -    // Map the results -    LUAQueryMapper lqm(qp.result); - -    socket.write("  <course name=\""); -    socket.write(templ->course.attributes["name"]); -    socket.write("\">\n"); - -    // Generate the macro and return it to the client -    std::vector< Macro >::iterator mi2 = templ->course.macroes.begin(); -    while(mi2 != templ->course.macroes.end()) { -      Macro ¯o = (*mi2); - -      socket.write("    <macro name=\""); -      socket.write(macro.attributes["name"]); +      } +      std::string result = qh.exec(); +       +      printf("Got result: [%s]\n", result.c_str()); +       +      // Parse the result from the queries to pentominos +      QueryParser qp(result); +      qp.parse(); +       +      // Map the results +      LUAQueryMapper lqm(qp.result); +       +      socket.write("  <course name=\""); +      socket.write(templ->course.attributes["name"]);        socket.write("\">\n"); - -      if(macro.attributes["name"] == request.macro) { -        // Handle lua programs -        if(macro.luaprograms.size()) { -          socket.write("      <luaprograms>\n"); - -          std::vector< LUAProgram >::iterator lpi = macro.luaprograms.begin(); -          while(lpi != macro.luaprograms.end()) { -            socket.write("        <luaprogram name=\""); -            socket.write(lpi->attributes["name"]); -            socket.write("\">\n"); +       +      // Generate the macro and return it to the client +      std::vector< Macro >::iterator mi2 = templ->course.macroes.begin(); +      while(mi2 != templ->course.macroes.end()) { +        Macro ¯o = (*mi2); +         +        socket.write("    <macro name=\""); +        socket.write(macro.attributes["name"]); +        socket.write("\">\n"); +         +        if(macro.attributes["name"] == request.macro) { +          // Handle lua programs +          if(macro.luaprograms.size()) { +            socket.write("      <luaprograms>\n"); -            socket.write(lpi->attributes["lua"]); - -            socket.write("\n        </luaprogram>\n"); - -            lpi++; +            std::vector< LUAProgram >::iterator lpi = macro.luaprograms.begin(); +            while(lpi != macro.luaprograms.end()) { +              socket.write("        <luaprogram name=\""); +              socket.write(lpi->attributes["name"]); +              socket.write("\">\n"); +               +              socket.write(lpi->attributes["lua"]); +               +              socket.write("\n        </luaprogram>\n"); +               +              lpi++; +            } + +            socket.write("      </luaprograms>\n");            } - -          socket.write("      </luaprograms>\n"); +           +          widgetgenerator(socket, macro, lqm, db);          } -        widgetgenerator(socket, macro, lqm, db); +        socket.write("    </macro>\n"); +         +        mi2++;        } - -      socket.write("    </macro>\n"); - -      mi2++; +       +      socket.write("  </course>\n"); +       +      i++;      } - -    socket.write("  </course>\n"); - -    i++; +  } catch(std::exception &e) { +    socket.write(error_box( e.what()));    }    socket.write("</pracro>\n"); diff --git a/server/src/templateparser.cc b/server/src/templateparser.cc index 04650ca..c67ba63 100644 --- a/server/src/templateparser.cc +++ b/server/src/templateparser.cc @@ -45,6 +45,8 @@  #include <errno.h> +#include "exception.h" +  void TemplateParser::error(const char* fmt, ...)  {    // TODO: Throw exception here. @@ -57,6 +59,8 @@ void TemplateParser::error(const char* fmt, ...)    va_end(argp);    fprintf(stderr, "\n"); + +  throw Exception("Error in TemplateParser");  }  TemplateParser::TemplateParser(std::string course) | 
