# HG changeset patch # User Sebastien Jodogne # Date 1504086515 -7200 # Node ID 88402bd5dbf5227db12d1745ff37bc46a2bfa99a # Parent 50cde8246542cff7f2e07985f13d63ea49afd916 sample of a micro-service diff -r 50cde8246542 -r 88402bd5dbf5 CMakeLists.txt --- a/CMakeLists.txt Wed Aug 30 11:26:08 2017 +0200 +++ b/CMakeLists.txt Wed Aug 30 11:48:35 2017 +0200 @@ -250,7 +250,7 @@ add_definitions(-DORTHANC_USE_PRECOMPILED_HEADERS=1) ADD_VISUAL_STUDIO_PRECOMPILED_HEADERS( - "PrecompiledHeaders.h" "Core/PrecompiledHeaders.cpp" ORTHANC_CORE_SOURCES) + "PrecompiledHeaders.h" "Core/PrecompiledHeaders.cpp" ORTHANC_CORE_SOURCES_INTERNAL) ADD_VISUAL_STUDIO_PRECOMPILED_HEADERS( "PrecompiledHeadersServer.h" "OrthancServer/PrecompiledHeadersServer.cpp" ORTHANC_SERVER_SOURCES) diff -r 50cde8246542 -r 88402bd5dbf5 Resources/Samples/OrthancFramework/MicroService/CMakeLists.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Resources/Samples/OrthancFramework/MicroService/CMakeLists.txt Wed Aug 30 11:48:35 2017 +0200 @@ -0,0 +1,16 @@ +cmake_minimum_required(VERSION 2.8) + +project(Sample) + +include(${CMAKE_SOURCE_DIR}/../../../CMake/OrthancFrameworkParameters.cmake) + +set(ENABLE_WEB_SERVER ON) + +include(${CMAKE_SOURCE_DIR}/../../../CMake/OrthancFrameworkConfiguration.cmake) + +add_executable(Sample + ${ORTHANC_CORE_SOURCES} + Sample.cpp + ) + +include_directories(${ORTHANC_ROOT}/Core) diff -r 50cde8246542 -r 88402bd5dbf5 Resources/Samples/OrthancFramework/MicroService/README.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Resources/Samples/OrthancFramework/MicroService/README.txt Wed Aug 30 11:48:35 2017 +0200 @@ -0,0 +1,2 @@ +This file shows how to create a simple Web service in C++ (similar to +Python's Flask) using the Orthanc standalone framework. diff -r 50cde8246542 -r 88402bd5dbf5 Resources/Samples/OrthancFramework/MicroService/Sample.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Resources/Samples/OrthancFramework/MicroService/Sample.cpp Wed Aug 30 11:48:35 2017 +0200 @@ -0,0 +1,60 @@ +#include + +#include +#include +#include +#include + +class MicroService : public Orthanc::RestApi +{ +private: + static MicroService& GetSelf(Orthanc::RestApiCall& call) + { + return dynamic_cast(call.GetContext()); + } + + void SayHello() + { + printf("Hello\n"); + } + + static void Hello(Orthanc::RestApiGetCall& call) + { + GetSelf(call).SayHello(); + + Json::Value value = Json::arrayValue; + value.append("World"); + + call.GetOutput().AnswerJson(value); + } + +public: + MicroService() + { + Register("/hello", Hello); + } +}; + +int main() +{ + Orthanc::Logging::Initialize(); + Orthanc::Logging::EnableTraceLevel(true); + + MicroService rest; + + { + Orthanc::MongooseServer httpServer; + httpServer.SetPortNumber(8000); + httpServer.Register(rest); + httpServer.Start(); + + LOG(WARNING) << "Micro-service started on port " << httpServer.GetPortNumber(); + Orthanc::SystemToolbox::ServerBarrier(); + } + + LOG(WARNING) << "Micro-service stopped"; + + Orthanc::Logging::Finalize(); + + return 0; +}