4#include "Stroika/Frameworks/StroikaPreComp.h"
13#include "Stroika/Foundation/Execution/WaitableEvent.h"
14#include "Stroika/Frameworks/Service/Main.h"
16#include "AppVersion.h"
27using namespace Samples::Service;
35 const Main::ServiceDescription kServiceDescription_{
"Stroika-Sample-Service"_k,
"Stroika Sample Service"_k};
44 struct SomeModuleALikeWebServer_ {
46 SomeModuleALikeWebServer_ ()
47 : fSomeOtherTaskDoingRealWork_{Thread::CleanupPtr::eAbortBeforeWaiting, Thread::New (
49 Execution::Sleep (24h);
54 ~SomeModuleALikeWebServer_ () =
default;
59void SampleAppServiceRep::MainLoop (
const std::function<
void ()>& startedCB)
71 bool successfullyStarted{
false};
73 if (not successfullyStarted) {
74 Logger::sThe.Log (Logger::eError,
"Failed to successfully start service"_f);
85 SomeModuleALikeWebServer_ moduleA;
86 SomeModuleALikeWebServer_ moduleB;
91 Logger::sThe.Log (Logger::eInfo,
"{} (version {}) service started successfully"_f, kServiceDescription_.fPrettyName, AppVersion::kVersion);
92 successfullyStarted =
true;
96 [[maybe_unused]]
auto&& cleanup2 =
Execution::Finally ([&] () { Logger::sThe.Log (Logger::eInfo,
"Beginning service shutdown"_f); });
109Main::ServiceDescription SampleAppServiceRep::GetServiceDescription ()
const
111 return kServiceDescription_;
#define AssertNotReached()
A simple/portable wrapper on syslog/log4j/WindowsEventlog, with features like throttling,...
nonvirtual void Wait(Time::DurationSeconds timeout=Time::kInfinity)
auto Finally(FUNCTION &&f) -> Private_::FinallySentry< FUNCTION >