Refine folder structure; add rapidjson as submodule.

This commit is contained in:
Adam Gu
2018-04-10 17:34:00 +08:00
parent 9abf8d99d5
commit 5bc988b093
61 changed files with 43 additions and 28 deletions
+10
View File
@@ -0,0 +1,10 @@
if(UNIX)
add_definitions(-std=c++11)
endif()
file(GLOB SRCS *.cc *.h)
add_executable(soap_calc_server ${SRCS})
target_link_libraries(soap_calc_server webcc pugixml ${Boost_LIBRARIES})
target_link_libraries(soap_calc_server "${CMAKE_THREAD_LIBS_INIT}")
+36
View File
@@ -0,0 +1,36 @@
#include "calc_service.h"
#include "boost/lexical_cast.hpp"
#include "webcc/soap_request.h"
#include "webcc/soap_response.h"
bool CalcService::Handle(const webcc::SoapRequest& soap_request,
webcc::SoapResponse* soap_response) {
try {
if (soap_request.operation() == "add") {
double x = boost::lexical_cast<double>(soap_request.GetParameter("x"));
double y = boost::lexical_cast<double>(soap_request.GetParameter("y"));
double result = x + y;
soap_response->set_soapenv_ns(webcc::kSoapEnvNamespace);
soap_response->set_service_ns({
"cal",
"http://www.example.com/calculator/"
});
soap_response->set_operation(soap_request.operation());
soap_response->set_result_name("Result");
soap_response->set_result(std::to_string(result));
return true;
} else {
// NOT_IMPLEMENTED
}
} catch (boost::bad_lexical_cast&) {
// BAD_REQUEST
}
return false;
}
+15
View File
@@ -0,0 +1,15 @@
#ifndef CALC_SERVICE_H_
#define CALC_SERVICE_H_
#include "webcc/soap_service.h"
class CalcService : public webcc::SoapService {
public:
CalcService() = default;
~CalcService() override = default;
bool Handle(const webcc::SoapRequest& soap_request,
webcc::SoapResponse* soap_response) override;
};
#endif // CALC_SERVICE_H_
+35
View File
@@ -0,0 +1,35 @@
#include <iostream>
#include "webcc/soap_server.h"
#include "calc_service.h"
static void Help(const char* argv0) {
std::cout << "Usage: " << argv0 << " <port>" << std::endl;
std::cout << " E.g.," << std::endl;
std::cout << " " << argv0 << " 8080" << std::endl;
}
int main(int argc, char* argv[]) {
if (argc != 2) {
Help(argv[0]);
return 1;
}
unsigned short port = std::atoi(argv[1]);
std::size_t workers = 2;
try {
webcc::SoapServer server(port, workers);
server.RegisterService(std::make_shared<CalcService>(),
"/calculator");
server.Run();
} catch (std::exception& e) {
std::cerr << "Exception: " << e.what() << std::endl;
return 1;
}
return 0;
}