#pragma once

#include "../reply.hpp"

namespace demonware
{
	class service_server
	{
	public:
		virtual ~service_server() = default;

		virtual std::shared_ptr<remote_reply> create_message(uint8_t type)
		{
			auto reply = std::make_shared<remote_reply>(this, type);
			return reply;
		}


		virtual std::shared_ptr<service_reply> create_reply(uint8_t type, uint32_t error = 0)
		{
			auto reply = std::make_shared<service_reply>(this, type, error, false);
			return reply;
		}

		virtual std::shared_ptr<structure_reply> create_structed_reply(uint8_t type)
		{
			auto reply = std::make_shared<structure_reply>(this, type);
			return reply;
		}

		virtual void send_reply(reply* data) = 0;
	};
}