#pragma once #include #include #include namespace erebos { class Server; class Service { public: Service(); virtual ~Service(); using Config = monostate; class Context { public: struct Priv; Context(Priv *); Priv & priv(); const class Ref & ref() const; const class Peer & peer() const; const Stored & local() const; void local(const LocalState &); void afterCommit(function); void runAfterCommitHooks() const; private: std::unique_ptr p; }; virtual UUID uuid() const = 0; virtual void handle(Context &) = 0; }; }