Remove operation help.
[anna.git] / example / diameter / launcher / MyHandler.cpp
index e69de29..6638fc3 100644 (file)
@@ -0,0 +1,83 @@
+// ANNA - Anna is Not Nothingness Anymore                                                         //
+//                                                                                                //
+// (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo                         //
+//                                                                                                //
+// See project site at http://redmine.teslayout.com/projects/anna-suite                           //
+// See accompanying file LICENSE or copy at http://www.teslayout.com/projects/public/anna.LICENSE //
+
+
+// Standard
+#include <string>
+#include <sstream>
+#include <iomanip>
+
+// Project
+#include <anna/http/Request.hpp>
+
+// Process
+#include <MyHandler.hpp>
+#include <Launcher.hpp>
+#include <EventOperation.hpp>
+
+
+void MyHandler::evRequest(anna::comm::ClientSocket& clientSocket, const anna::http::Request& request)
+throw(anna::RuntimeException) {
+  const anna::DataBlock& body = request.getBody();
+
+  if(body.getSize() == 0)
+    throw anna::RuntimeException("Missing operation parameters on HTTP request", ANNA_FILE_LOCATION);
+
+  LOGINFORMATION(
+    std::string msg("Received body: ");
+    msg += anna::functions::asString(body);
+    anna::Logger::information(msg, ANNA_FILE_LOCATION);
+  );
+  std::string body_content;
+  body_content.assign(body.getData(), body.getSize());
+  auto json_body = nlohmann::json::parse(body_content);
+
+  // Operation:
+  std::string response_content;
+
+  bool opOk{};
+
+  try {
+    Launcher& my_app = static_cast <Launcher&>(anna::app::functions::getApp());
+    opOk = my_app.eventOperation(EventOperation::json2piped(json_body), response_content);
+  } catch(RuntimeException &ex) {
+    ex.trace();
+    opOk = false;
+  }
+
+  anna::http::Response* response = allocateResponse();
+  response->setStatusCode(200);  // http://en.wikipedia.org/wiki/List_of_HTTP_status_codes
+
+// EXAMPLES TO SET HEADERS:
+//   response->find(anna::http::Header::Type::Date)->setValue("Mon, 30 Jan 2006 14:36:18 GMT");
+//   anna::http::Header* keepAlive = response->find("Keep-Alive");
+//
+//   if (keepAlive == NULL)
+//      keepAlive = response->createHeader("Keep-Alive");
+//
+//   keepAlive->setValue("Verificacion del cambio 1.0.7");
+
+  // Content-Type header:
+  anna::http::Header* contentType = response->find("Content-Type");
+  if (contentType == NULL)
+    contentType = response->createHeader("Content-Type");
+  contentType->setValue("application/json");
+
+  // Json Body for response:
+  std::stringstream ss;
+
+  ss << R"({ "result":")" << (opOk ? "true":"false") << R"(", "data": )" << std::quoted(response_content) << R"( })";
+  anna::DataBlock db_content(true);
+  db_content = ss.str();
+  response->setBody(db_content);
+
+  try {
+    clientSocket.send(*response);
+  } catch(Exception& ex) {
+    ex.trace();
+  }
+}