Skip to content

Commit 3dc190e

Browse files
authored
Merge pull request #21 from bcmi-labs/refactoring_opt
Refactoring opt
2 parents a3393df + 1970d67 commit 3dc190e

File tree

17 files changed

+305
-209
lines changed

17 files changed

+305
-209
lines changed

README.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ A MessagePack RPC library for Arduino allows to create a client/server architect
88
```cpp
99
#include <Arduino_RPClite.h>
1010

11-
RPCServer server(Serial1);
11+
SerialTransport transport(Serial1);
12+
RPCServer server(transport);
1213

1314
int add(int a, int b){
1415
return a+b;
@@ -42,7 +43,8 @@ void loop() {
4243
```cpp
4344
#include <Arduino_RPClite.h>
4445
45-
RPCClient client(Serial1);
46+
SerialTransport transport(Serial1);
47+
RPCClient client(transport);
4648
4749
void setup() {
4850
Serial1.begin(115200);

examples/decoder_tests/DummyTransport.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
1-
//
2-
// Created by lucio on 4/8/25.
3-
//
4-
51
#ifndef DUMMY_TRANSPORT_H
62
#define DUMMY_TRANSPORT_H
73
#include "transport.h"

examples/decoder_tests/decoder_tests.ino

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,9 @@ void runDecoderTest(const char* label) {
2929
delay(50);
3030
}
3131

32-
while (decoder.packet_incoming()) {
33-
size_t removed = decoder.discard_packet();
34-
Serial.print("Removed bytes: ");
35-
Serial.println(removed);
36-
decoder.decode();
37-
}
32+
size_t pack_size = decoder.get_packet_size();
33+
Serial.print("1st Packet size: ");
34+
Serial.println(pack_size);
3835

3936
Serial.println("-- Done --\n");
4037
}

examples/rpc_lite_client/rpc_lite_client.ino

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
#include <Arduino_RPClite.h>
22

3-
RPCClient client(Serial1);
3+
SerialTransport transport(Serial1);
4+
RPCClient client(transport);
45

56
void setup() {
67
Serial1.begin(115200);
78
while(!Serial1);
89

910
pinMode(LED_BUILTIN, OUTPUT);
10-
11-
Serial.begin(9600);
11+
delay(10);
12+
13+
Serial.begin(115200);
1214
while(!Serial);
1315
}
1416

@@ -30,7 +32,7 @@ void blink_before(){
3032
void loop() {
3133
float result;
3234
blink_before();
33-
35+
3436
String str_res;
3537
bool ok = client.call("loopback", str_res, "Sending a greeting");
3638
Serial.println(str_res);
@@ -75,5 +77,4 @@ void loop() {
7577
Serial.println("Server could not handle a notification as a call");
7678
}
7779

78-
delay(2000);
7980
}

examples/rpc_lite_server/rpc_lite_server.ino

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
11
#include <Arduino_RPClite.h>
22

3-
RPCServer server(Serial1);
3+
SerialTransport transport(Serial1);
4+
RPCServer server(transport);
45

56
int add(int a, int b){
67
return a+b;
78
}
89

10+
int add2(int a, int b){
11+
return a+b;
12+
}
13+
914
String greet(){
1015
return String("Hello Friend");
1116
}
@@ -24,6 +29,10 @@ public:
2429
};
2530

2631

32+
float multip(float a, float b) {
33+
return a*b;
34+
}
35+
2736
void setup() {
2837
Serial1.begin(115200);
2938
while(!Serial1);
@@ -34,10 +43,16 @@ void setup() {
3443
while(!Serial);
3544

3645
server.bind("add", add);
46+
47+
if (!server.bind("add", add2)){
48+
Serial.println("server refused to bind same name twice");
49+
}
50+
3751
server.bind("greet", greet);
3852
server.bind("loopback", loopback);
3953
server.bind("another_greeting", [] {return MsgPack::str_t ("This is a lambda greeting");});
4054
server.bind("object_multi", &multiplier::mult);
55+
server.bind("multip", multip);
4156

4257
}
4358

library.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
"url": "https://github.com/eigen-value",
1212
"maintainer": true
1313
},
14-
"version": "0.0.1",
14+
"version": "0.1.0",
1515
"license": "MIT",
1616
"frameworks": "arduino",
1717
"platforms": "*",

library.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name=Arduino_RPClite
2-
version=0.0.1
2+
version=0.1.0
33
author=Lucio Rossi (eigen-value)
44
maintainer=Lucio Rossi (eigen-value)
55
sentence=A MessagePack RPC library for Arduino

src/Arduino_RPClite.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
1-
//
2-
// Created by lucio on 4/8/25.
3-
//
4-
51
#ifndef ARDUINO_RPCLITE_H
62
#define ARDUINO_RPCLITE_H
73

src/client.h

Lines changed: 35 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
1-
//
2-
// Created by lucio on 4/8/25.
3-
//
4-
51
#ifndef RPCLITE_CLIENT_H
62
#define RPCLITE_CLIENT_H
73
#include "error.h"
@@ -11,16 +7,18 @@
117

128
class RPCClient {
139
RpcDecoder<>* decoder = nullptr;
10+
int _waiting_msg_id;
1411

1512
public:
1613
RpcError lastError;
1714

1815
RPCClient(ITransport& t) : decoder(&RpcDecoderManager<>::getDecoder(t)) {}
1916

20-
RPCClient(Stream& stream) {
21-
ITransport* transport = (ITransport*) new SerialTransport(stream);
22-
decoder = &RpcDecoderManager<>::getDecoder(*transport);
23-
}
17+
// This constructor was removed because it leads to decoder duplication
18+
// RPCClient(Stream& stream) {
19+
// ITransport* transport = (ITransport*) new SerialTransport(stream);
20+
// decoder = &RpcDecoderManager<>::getDecoder(*transport);
21+
// }
2422

2523
template<typename... Args>
2624
void notify(const MsgPack::str_t method, Args&&... args) {
@@ -31,23 +29,44 @@ class RPCClient {
3129
template<typename RType, typename... Args>
3230
bool call(const MsgPack::str_t method, RType& result, Args&&... args) {
3331

34-
int msg_id;
35-
if (!decoder->send_call(CALL_MSG, method, msg_id, std::forward<Args>(args)...)){
32+
if(!send_rpc(method, std::forward<Args>(args)...)) {
33+
lastError.code = GENERIC_ERR;
34+
lastError.traceback = "Failed to send RPC call";
35+
return false;
3636
}
3737

38-
RpcError error;
3938
// blocking call
40-
while (!decoder->get_response(msg_id, result, error)){
41-
decoder->decode();
39+
while (!get_response(result)){
4240
//delay(1);
4341
}
4442

45-
lastError.code = error.code;
46-
lastError.traceback = error.traceback;
43+
return (lastError.code == NO_ERR);
44+
45+
}
46+
47+
template<typename... Args>
48+
bool send_rpc(const MsgPack::str_t method, Args&&... args) {
49+
int msg_id;
50+
if (decoder->send_call(CALL_MSG, method, msg_id, std::forward<Args>(args)...)) {
51+
_waiting_msg_id = msg_id;
52+
return true;
53+
}
54+
return false;
55+
}
4756

48-
return (error.code == NO_ERR);
57+
template<typename RType>
58+
bool get_response(RType& result) {
59+
RpcError tmp_error;
60+
decoder->decode();
4961

62+
if (decoder->get_response(_waiting_msg_id, result, tmp_error)) {
63+
lastError.code = tmp_error.code;
64+
lastError.traceback = tmp_error.traceback;
65+
return true;
66+
}
67+
return false;
5068
}
69+
5170
};
5271

5372
#endif //RPCLITE_CLIENT_H

0 commit comments

Comments
 (0)