Skip to content

Commit 77a1979

Browse files
committed
mod: no protected methods feat: dispatcher with tags
1 parent 2190912 commit 77a1979

File tree

3 files changed

+22
-7
lines changed

3 files changed

+22
-7
lines changed

src/client.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ class RPCClient {
4444

4545
}
4646

47-
protected:
4847
template<typename... Args>
4948
bool send_rpc(const MsgPack::str_t method, Args&&... args) {
5049
int msg_id;

src/dispatcher.h

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,22 @@
66

77
struct DispatchEntry {
88
MsgPack::str_t name;
9+
MsgPack::str_t tag;
910
IFunctionWrapper* fn;
1011
};
1112

1213
template<size_t N>
1314
class RpcFunctionDispatcher {
1415
public:
1516
template<typename F>
16-
bool bind(MsgPack::str_t name, F&& f) {
17+
bool bind(MsgPack::str_t name, F&& f, MsgPack::str_t tag="") {
1718
if (_count >= N) return false;
1819

1920
if (isBound(name)) return false;
2021

2122
using WrapperT = decltype(wrap(std::forward<F>(f)));
2223
WrapperT* instance = new WrapperT(wrap(std::forward<F>(f)));
23-
_entries[_count++] = {name, instance};
24+
_entries[_count++] = {name, tag, instance};
2425
return true;
2526
}
2627

@@ -33,6 +34,15 @@ class RpcFunctionDispatcher {
3334
return false;
3435
}
3536

37+
bool hasTag(MsgPack::str_t name,MsgPack::str_t tag) const {
38+
for (size_t i = 0; i < _count; ++i) {
39+
if (_entries[i].name == name && _entries[i].tag == tag) {
40+
return true;
41+
}
42+
}
43+
return false;
44+
}
45+
3646
bool call(MsgPack::str_t name, MsgPack::Unpacker& unpacker, MsgPack::Packer& packer) {
3747
for (size_t i = 0; i < _count; ++i) {
3848
if (_entries[i].name == name) {

src/server.h

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,12 @@ class RPCServer {
2323
// }
2424

2525
template<typename F>
26-
bool bind(const MsgPack::str_t& name, F&& func){
27-
return dispatcher.bind(name, func);
26+
bool bind(const MsgPack::str_t& name, F&& func, MsgPack::str_t& tag){
27+
return dispatcher.bind(name, func, tag);
28+
}
29+
30+
bool hasTag(MsgPack::str_t name, MsgPack::str_t tag){
31+
return dispatcher.hasTag(name, tag);
2832
}
2933

3034
void run() {
@@ -34,15 +38,15 @@ class RPCServer {
3438
//delay(1);
3539
}
3640

37-
protected:
3841
bool get_rpc() {
3942
decoder->decode();
4043
if (_rpc_size > 0) return true; // Already have a request
44+
// TODO USE A QUEUE
4145
_rpc_size = decoder->get_request(_rpc_buffer, RPC_BUFFER_SIZE);
4246
return _rpc_size > 0;
4347
}
4448

45-
void process_request() {
49+
void process_request(MsgPack::str_t tag="") {
4650
if (_rpc_size == 0) return;
4751

4852
MsgPack::Unpacker unpacker;
@@ -78,6 +82,8 @@ class RPCServer {
7882
return; // Invalid request size/type
7983
}
8084

85+
if (!hasTag(method, tag)) return;
86+
8187
_rpc_type = msg_type;
8288

8389
MsgPack::arr_size_t resp_size(RESPONSE_SIZE);

0 commit comments

Comments
 (0)