/usr/include/jsonrpccpp/server/abstractserver.h is in libjsonrpccpp-dev 0.7.0-1+b2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | /*************************************************************************
* libjson-rpc-cpp
*************************************************************************
* @file abstractserver.h
* @date 30.12.2012
* @author Peter Spiess-Knafl <peter.knafl@gmail.com>
* @license See attached LICENSE.txt
************************************************************************/
#ifndef JSONRPC_CPP_ABSTRACTSERVER_H_
#define JSONRPC_CPP_ABSTRACTSERVER_H_
#include <map>
#include <string>
#include <vector>
#include <jsonrpccpp/common/procedure.h>
#include "abstractserverconnector.h"
#include "iprocedureinvokationhandler.h"
#include "iclientconnectionhandler.h"
#include "requesthandlerfactory.h"
namespace jsonrpc
{
template<class S>
class AbstractServer : public IProcedureInvokationHandler
{
public:
typedef void(S::*methodPointer_t) (const Json::Value ¶meter, Json::Value &result);
typedef void(S::*notificationPointer_t) (const Json::Value ¶meter);
AbstractServer(AbstractServerConnector &connector, serverVersion_t type = JSONRPC_SERVER_V2) :
connection(connector)
{
this->handler = RequestHandlerFactory::createProtocolHandler(type, *this);
connector.SetHandler(this->handler);
}
virtual ~AbstractServer()
{
delete this->handler;
}
bool StartListening()
{
return connection.StartListening();
}
bool StopListening()
{
return connection.StopListening();
}
virtual void HandleMethodCall(Procedure &proc, const Json::Value& input, Json::Value& output)
{
S* instance = dynamic_cast<S*>(this);
(instance->*methods[proc.GetProcedureName()])(input, output);
}
virtual void HandleNotificationCall(Procedure &proc, const Json::Value& input)
{
S* instance = dynamic_cast<S*>(this);
(instance->*notifications[proc.GetProcedureName()])(input);
}
protected:
bool bindAndAddMethod(const Procedure& proc, methodPointer_t pointer)
{
if(proc.GetProcedureType() == RPC_METHOD && !this->symbolExists(proc.GetProcedureName()))
{
this->handler->AddProcedure(proc);
this->methods[proc.GetProcedureName()] = pointer;
return true;
}
return false;
}
bool bindAndAddNotification(const Procedure& proc, notificationPointer_t pointer)
{
if(proc.GetProcedureType() == RPC_NOTIFICATION && !this->symbolExists(proc.GetProcedureName()))
{
this->handler->AddProcedure(proc);
this->notifications[proc.GetProcedureName()] = pointer;
return true;
}
return false;
}
private:
AbstractServerConnector &connection;
IProtocolHandler *handler;
std::map<std::string, methodPointer_t> methods;
std::map<std::string, notificationPointer_t> notifications;
bool symbolExists(const std::string &name)
{
if (methods.find(name) != methods.end())
return true;
if (notifications.find(name) != notifications.end())
return true;
return false;
}
};
} /* namespace jsonrpc */
#endif /* JSONRPC_CPP_ABSTRACTSERVER_H_ */
|