Skip to content

Commit e3b18fa

Browse files
committed
[rpc] Added RPC server implementation
1 parent dac8452 commit e3b18fa

File tree

12 files changed

+377
-46
lines changed

12 files changed

+377
-46
lines changed

src/chargepoint/ChargePoint.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,8 @@ bool ChargePoint::start()
207207
m_rpc_client->registerClientListener(*this);
208208
m_rpc_client->registerSpy(*this);
209209
m_msg_dispatcher = std::make_unique<ocpp::messages::MessageDispatcher>(m_stack_config.jsonSchemasPath());
210-
m_msg_sender = std::make_unique<ocpp::messages::GenericMessageSender>(m_stack_config, *m_rpc_client, m_messages_converter);
210+
m_msg_sender = std::make_unique<ocpp::messages::GenericMessageSender>(
211+
*m_rpc_client, m_messages_converter, m_stack_config.callRequestTimeout());
211212

212213
m_config_manager = std::make_unique<ConfigManager>(m_ocpp_config, m_messages_converter, *m_msg_dispatcher);
213214
m_trigger_manager = std::make_unique<TriggerMessageManager>(m_connectors, m_messages_converter, *m_msg_dispatcher);

src/messages/GenericMessageSender.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@ class GenericMessageSender
4545
{
4646
public:
4747
/** @brief Constructor */
48-
GenericMessageSender(const ocpp::config::IChargePointConfig& stack_config, ocpp::rpc::IRpc& rpc, MessagesConverter& messages_converter)
49-
: m_stack_config(stack_config), m_rpc(rpc), m_messages_converter(messages_converter)
48+
GenericMessageSender(ocpp::rpc::IRpc& rpc, MessagesConverter& messages_converter, std::chrono::milliseconds timeout)
49+
: m_rpc(rpc), m_messages_converter(messages_converter), m_timeout(timeout)
5050
{
5151
}
5252

@@ -89,7 +89,7 @@ class GenericMessageSender
8989
// Execute call
9090
rapidjson::Document resp;
9191
resp.Parse("{}");
92-
if (m_rpc.call(action, payload, resp, static_cast<unsigned int>(m_stack_config.callRequestTimeout().count())))
92+
if (m_rpc.call(action, payload, resp, m_timeout))
9393
{
9494
// Convert response
9595
const char* error_code = nullptr;
@@ -141,7 +141,7 @@ class GenericMessageSender
141141
// Execute call
142142
rapidjson::Document resp;
143143
resp.Parse("{}");
144-
if (m_rpc.call(action, request, resp, static_cast<unsigned int>(m_stack_config.callRequestTimeout().count())))
144+
if (m_rpc.call(action, request, resp, m_timeout))
145145
{
146146
// Convert response
147147
const char* error_code = nullptr;
@@ -158,12 +158,12 @@ class GenericMessageSender
158158
}
159159

160160
private:
161-
/** @brief Stack internal configuration */
162-
const ocpp::config::IChargePointConfig& m_stack_config;
163161
/** @brief RPC */
164162
ocpp::rpc::IRpc& m_rpc;
165163
/** @brief Messages converter */
166164
MessagesConverter& m_messages_converter;
165+
/** @brief Request timeout */
166+
std::chrono::milliseconds m_timeout;
167167
};
168168

169169
} // namespace messages

src/rpc/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
add_library(rpc STATIC
88
RpcBase.cpp
99
RpcClient.cpp
10+
RpcServer.cpp
1011
)
1112

1213
# Exported includes

src/rpc/IRpc.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ along with OpenOCPP. If not, see <http://www.gnu.org/licenses/>.
2121

2222
#include "json.h"
2323

24+
#include <chrono>
2425
#include <string>
2526

2627
namespace ocpp
@@ -50,13 +51,13 @@ class IRpc
5051
* @param action Remote action
5152
* @param payload JSON payload for the action
5253
* @param response JSON response received
53-
* @param timeout Response timeout in ms
54+
* @param timeout Response timeout
5455
* @return true if a response has been received, false otherwise
5556
*/
5657
virtual bool call(const std::string& action,
5758
const rapidjson::Document& payload,
5859
rapidjson::Document& response,
59-
unsigned int timeout = 2000u) = 0;
60+
std::chrono::milliseconds timeout = std::chrono::seconds(2)) = 0;
6061

6162
/**
6263
* @brief Register a listener to the RPC events

src/rpc/RpcBase.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,11 @@ RpcBase::~RpcBase()
4545
stop();
4646
}
4747

48-
/** @copydoc bool IRpc::call(const std::string&, const rapidjson::Document&, rapidjson::Document&, unsigned int) */
49-
bool RpcBase::call(const std::string& action, const rapidjson::Document& payload, rapidjson::Document& response, unsigned int timeout)
48+
/** @copydoc bool IRpc::call(const std::string&, const rapidjson::Document&, rapidjson::Document&, std::chrono::milliseconds) */
49+
bool RpcBase::call(const std::string& action,
50+
const rapidjson::Document& payload,
51+
rapidjson::Document& response,
52+
std::chrono::milliseconds timeout)
5053
{
5154
bool ret = false;
5255

@@ -81,7 +84,7 @@ bool RpcBase::call(const std::string& action, const rapidjson::Document& payload
8184
std::stringstream expected_id;
8285
expected_id << m_transaction_id;
8386
RpcMessage* rpc_message = nullptr;
84-
auto wait_time = std::chrono::steady_clock().now() + std::chrono::milliseconds(timeout);
87+
auto wait_time = std::chrono::steady_clock().now() + timeout;
8588
do
8689
{
8790
// Compute timeout

src/rpc/RpcBase.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,11 @@ class RpcBase : public IRpc
4444

4545
// IRpc interface
4646

47-
/** @copydoc bool IRpc::call(const std::string&, const rapidjson::Document&, rapidjson::Document&, unsigned int) */
47+
/** @copydoc bool IRpc::call(const std::string&, const rapidjson::Document&, rapidjson::Document&, std::chrono::milliseconds) */
4848
bool call(const std::string& action,
4949
const rapidjson::Document& payload,
5050
rapidjson::Document& response,
51-
unsigned int timeout = 2000u) override;
51+
std::chrono::milliseconds timeout = std::chrono::seconds(2)) override;
5252

5353
/** @copydoc void IRpc::registerListener(IListener&) */
5454
void registerListener(IRpc::IListener& listener) override;

src/rpc/RpcClient.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ bool RpcClient::start(const std::string& url
5151
bool ret = false;
5252

5353
// Check if already started
54-
if (!m_started)
54+
if (!m_started && m_listener && rpcListener())
5555
{
5656
// Connect to websocket
5757
ret = m_websocket.connect(url, m_protocol, credentials, connect_timeout, retry_interval, ping_interval);
@@ -99,33 +99,33 @@ bool RpcClient::isConnected() const
9999
return m_websocket.isConnected();
100100
}
101101

102-
// IWebsocketClientListener interface
102+
// IWebsocketClient::IListener interface
103103

104-
/** @copydoc void IWebsocketClientListener::wsClientConnected() */
104+
/** @copydoc void IWebsocketClient::IListener::wsClientConnected() */
105105
void RpcClient::wsClientConnected()
106106
{
107107
m_listener->rpcClientConnected();
108108
}
109109

110-
/** @copydoc void IWebsocketClientListener::wsClientFailed() */
110+
/** @copydoc void IWebsocketClient::IListener::wsClientFailed() */
111111
void RpcClient::wsClientFailed()
112112
{
113113
m_listener->rpcClientFailed();
114114
}
115115

116-
/** @copydoc void IWebsocketClientListener::wsClientDisconnected() */
116+
/** @copydoc void IWebsocketClient::IListener::wsClientDisconnected() */
117117
void RpcClient::wsClientDisconnected()
118118
{
119119
rpcListener()->rpcDisconnected();
120120
}
121121

122-
/** @copydoc void IWebsocketClientListener::wsClientError() */
122+
/** @copydoc void IWebsocketClient::IListener::wsClientError() */
123123
void RpcClient::wsClientError()
124124
{
125125
rpcListener()->rpcError();
126126
}
127127

128-
/** @copydoc void IWebsocketClientListener::wsClientDataReceived(const void*, size_t) */
128+
/** @copydoc void IWebsocketClient::IListener::wsClientDataReceived(const void*, size_t) */
129129
void RpcClient::wsClientDataReceived(const void* data, size_t size)
130130
{
131131
// Process data

src/rpc/RpcClient.h

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,8 @@ along with OpenOCPP. If not, see <http://www.gnu.org/licenses/>.
2020
#define RPCCLIENT_H
2121

2222
#include "IWebsocketClient.h"
23-
#include "Queue.h"
2423
#include "RpcBase.h"
2524

26-
#include <condition_variable>
27-
#include <mutex>
28-
#include <thread>
29-
#include <vector>
30-
3125
namespace ocpp
3226
{
3327
namespace rpc
@@ -77,24 +71,24 @@ class RpcClient : public RpcBase, public ocpp::websockets::IWebsocketClient::ILi
7771
/** @copydoc bool IRpc::isConnected() */
7872
bool isConnected() const override;
7973

80-
// IWebsocketClientListener interface
74+
// IWebsocketClient::IListener interface
8175

82-
/** @copydoc void IWebsocketClientListener::wsClientConnected() */
76+
/** @copydoc void IWebsocketClient::IListener::wsClientConnected() */
8377
void wsClientConnected() override;
8478

85-
/** @copydoc void IWebsocketClientListener::wsClientFailed() */
79+
/** @copydoc void IWebsocketClient::IListener::wsClientFailed() */
8680
void wsClientFailed() override;
8781

88-
/** @copydoc void IWebsocketClientListener::wsClientDisconnected() */
82+
/** @copydoc void IWebsocketClient::IListener::wsClientDisconnected() */
8983
void wsClientDisconnected() override;
9084

91-
/** @copydoc void IWebsocketClientListener::wsClientError() */
85+
/** @copydoc void IWebsocketClient::IListener::wsClientError() */
9286
void wsClientError() override;
9387

94-
/** @copydoc void IWebsocketClientListener::wsClientDataReceived(const void*, size_t) */
88+
/** @copydoc void IWebsocketClient::IListener::wsClientDataReceived(const void*, size_t) */
9589
void wsClientDataReceived(const void* data, size_t size) override;
9690

97-
/** @brief Interface for the RPC clients listeners */
91+
/** @brief Interface for the RPC client listeners */
9892
class IListener
9993
{
10094
public:
@@ -115,7 +109,7 @@ class RpcClient : public RpcBase, public ocpp::websockets::IWebsocketClient::ILi
115109
private:
116110
/** @brief Protocol version */
117111
const std::string m_protocol;
118-
/** @brief Websocket connexion */
112+
/** @brief Websocket connection */
119113
ocpp::websockets::IWebsocketClient& m_websocket;
120114
/** @brief Listener */
121115
IListener* m_listener;

0 commit comments

Comments
 (0)