#pragma once #include #include #include namespace erebos { class Service { public: Service(); virtual ~Service(); 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; virtual void serverStarted(const class Server &); }; }