diff options
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/service.cpp | 37 | ||||
| -rw-r--r-- | src/test/service.h | 35 | 
2 files changed, 72 insertions, 0 deletions
| diff --git a/src/test/service.cpp b/src/test/service.cpp new file mode 100644 index 0000000..32fca52 --- /dev/null +++ b/src/test/service.cpp @@ -0,0 +1,37 @@ +#include "service.h" + +#include <erebos/network.h> + +using namespace erebos; + +static const UUID myUUID("cb46b92c-9203-4694-8370-8742d8ac9dc8"); + +TestService::TestService( Config && c, const Server & ): +	config( move(c) ) +{ +} + +TestService::~TestService() = default; + +UUID TestService::uuid() const +{ +	return myUUID; +} + +void TestService::handle( Context & ctx ) +{ +	auto msg = Stored< Object >::load( ctx.ref() ); +	for (const auto & w : config.watchers) +		w( msg ); +} + +void TestService::send( const Peer & peer, const Ref & msg ) +{ +	peer.send( myUUID, msg ); +} + +TestService::Config & TestService::Config::onMessage( MessageWatcher w ) +{ +	watchers.push_back(w); +	return *this; +} diff --git a/src/test/service.h b/src/test/service.h new file mode 100644 index 0000000..c693ce4 --- /dev/null +++ b/src/test/service.h @@ -0,0 +1,35 @@ +#pragma once + +#include <erebos/service.h> + +namespace erebos +{ + +class TestService : public Service +{ +public: +	using MessageWatcher = std::function<void( const Stored< Object > & )>; + +	class Config +	{ +	public: +		Config & onMessage( MessageWatcher ); + +	private: +		friend class TestService; +		vector< MessageWatcher > watchers; +	}; + +	TestService( Config &&, const Server & ); +	virtual ~TestService(); + +	UUID uuid() const override; +	void handle( Context & ) override; + +	static void send( const Peer &, const Ref & ); + +private: +	const Config config; +}; + +} |