Skip to content

Commit a7d3128

Browse files
committed
feat: server impl and simple client TBT
1 parent 5edd562 commit a7d3128

File tree

3 files changed

+106
-15
lines changed

3 files changed

+106
-15
lines changed

examples/rpc_lite_server/rpc_lite_server.ino

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,23 @@
11
#include <RPClite.h>
22
#include <HardwareSerial.h>
33

4-
HardwareSerial* uart = new HardwareSerial(0);
5-
6-
SerialTransport transport(uart);
4+
SerialTransport transport(&Serial2);
75
RPCServer server(transport);
86

7+
int add(int a, int b){
8+
return a+b;
9+
}
10+
11+
912
void setup() {
13+
Serial2.begin(115200);
1014
transport.begin();
1115
pinMode(LED_BUILTIN, OUTPUT);
12-
Serial.begin(9600);
16+
Serial.begin(9600);
17+
while(!Serial);
18+
19+
server.bind("add", add);
20+
1321
}
1422

1523
void blink_before(){
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
#include <RPClite.h>
2+
3+
SerialTransport transport(&Serial1);
4+
RPCClient client(transport);
5+
6+
void setup() {
7+
Serial1.begin(115200);
8+
transport.begin();
9+
pinMode(LED_BUILTIN, OUTPUT);
10+
Serial.begin(9600);
11+
while(!Serial);
12+
}
13+
14+
void blink_before(){
15+
digitalWrite(LED_BUILTIN, HIGH);
16+
delay(200);
17+
digitalWrite(LED_BUILTIN, LOW);
18+
delay(200);
19+
digitalWrite(LED_BUILTIN, HIGH);
20+
delay(200);
21+
digitalWrite(LED_BUILTIN, LOW);
22+
delay(200);
23+
digitalWrite(LED_BUILTIN, HIGH);
24+
delay(200);
25+
digitalWrite(LED_BUILTIN, LOW);
26+
delay(200);
27+
}
28+
29+
void loop() {
30+
31+
blink_before();
32+
33+
int result;
34+
bool ok = client.call("add", result, 15, 7);
35+
36+
if (ok) {
37+
Serial.print("Result: ");
38+
Serial.println(result);
39+
}
40+
41+
// ok = client.call("divi", result, 2.0, 0.0);
42+
// if (!ok) {
43+
// Serial.println("Testing Server-side exception OK");
44+
// }
45+
46+
// int rand_int;
47+
// ok = client.call("get_rand", rand_int);
48+
49+
// if (ok) {
50+
// Serial.print("Random int from server: ");
51+
// Serial.println(rand_int);
52+
// }
53+
54+
// client.notify("blink");
55+
// Serial.println("Sent a blink notification");
56+
57+
// int duration_ms = 100;
58+
// client.notify("blink", duration_ms);
59+
// Serial.println("Sent a 100ms blink notification");
60+
61+
// MsgPack::object::nil_t out;
62+
// ok = client.call("blink", out);
63+
// Serial.print("Sent a blink RPC -> ");
64+
65+
// if (ok) {
66+
// Serial.println("Server returns without issues");
67+
// } else {
68+
// Serial.println("Server could not handle a notification as a call");
69+
// }
70+
71+
delay(2000);
72+
}

src/server.h

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,37 +8,48 @@
88
#include "rpc.h"
99
#include "error.h"
1010
#include "wrapper.h"
11+
#include "dispatcher.h"
1112

1213
class RPCServer {
1314
ITransport& transport;
1415

1516
public:
1617
RPCServer(ITransport& t) : transport(t) {}
1718

18-
int response_type = 1;
19+
template<typename F>
20+
void bind(const MsgPack::str_t& name, F&& func){
21+
dispatcher.bind(name, func);
22+
}
1923

2024
void loop() {
21-
MsgPack::Unpacker unpacker;
25+
2226
if (!recv_msg(transport, unpacker)) return;
2327

2428
int msg_type;
2529
int msg_id;
2630
MsgPack::str_t method;
27-
float a;
28-
float b;
29-
30-
unpacker.deserialize(msg_type, msg_id, method, a, b);
31-
32-
float result = a * b;
31+
if (!unpacker.deserialize(msg_type, msg_id, method)){
32+
Serial.println("unable to deserialize a msg received");
33+
flush_buffer();
34+
return;
35+
}
3336

34-
MsgPack::Packer packer;
37+
MsgPack::arr_size_t resp_size(4);
38+
packer.clear();
39+
packer.serialize(resp_size, RESP_MSG, msg_id);
3540

36-
MsgPack::object::nil_t null;
41+
dispatcher.call(method, unpacker, packer);
3742

38-
packer.serialize(response_type, msg_id, null, result);
3943
send_msg(transport, packer.packet());
4044

4145
}
46+
47+
private:
48+
49+
RpcFunctionDispatcher dispatcher;
50+
MsgPack::Unpacker unpacker;
51+
MsgPack::Packer packer;
52+
4253
};
4354

4455
#endif //RPCLITE_SERVER_H

0 commit comments

Comments
 (0)