RestartRequestServer

This commit is contained in:
Pavel Kirienko
2014-03-19 10:45:20 +04:00
parent 1bc411f3af
commit b353c5b9d8
3 changed files with 164 additions and 0 deletions
@@ -0,0 +1,46 @@
/*
* Copyright (C) 2014 Pavel Kirienko <pavel.kirienko@gmail.com>
*/
#pragma once
#include <uavcan/node/service_server.hpp>
#include <uavcan/util/method_binder.hpp>
#include <uavcan/protocol/RestartNode.hpp>
namespace uavcan
{
class IRestartRequestHandler
{
public:
virtual ~IRestartRequestHandler() { }
virtual bool handleRestartRequest(NodeID request_source) = 0;
};
class RestartRequestServer : Noncopyable
{
typedef MethodBinder<const RestartRequestServer*,
void(RestartRequestServer::*)(const ReceivedDataStructure<protocol::RestartNode::Request>&,
protocol::RestartNode::Response&) const> RestartNodeCallback;
ServiceServer<protocol::RestartNode, RestartNodeCallback> srv_;
IRestartRequestHandler* handler_;
void handleRestartNode(const ReceivedDataStructure<protocol::RestartNode::Request>& request,
protocol::RestartNode::Response& response) const;
public:
RestartRequestServer(INode& node)
: srv_(node)
, handler_(NULL)
{ }
IRestartRequestHandler* getHandler() const { return handler_; }
void setHandler(IRestartRequestHandler* handler) { handler_ = handler; }
int start();
};
}