@@ -33,77 +33,49 @@ class RPCServer {
3333
3434 void run () {
3535
36- RPCRequest req;
37- if (get_rpc (req)) { // Populate local request
38- process_request (req); // Process local data
39- send_response (req); // Send from local data
40- }
36+ RPCRequest<> req;
37+
38+ if (!get_rpc (req)) return ; // Populate local request
39+
40+ process_request (req); // Process local data
41+
42+ send_response (req); // Send from local data
4143
4244 }
4345
44- bool get_rpc (RPCRequest& req, MsgPack::str_t tag=" " ) {
46+ bool get_rpc (RPCRequest<> & req, MsgPack::str_t tag=" " ) {
4547 decoder->decode ();
4648
47- MsgPack::str_t method = decoder->fetch_method ();
49+ MsgPack::str_t method = decoder->fetch_rpc_method ();
4850
4951 if (method == " " || !hasTag (method, tag)) return false ;
5052
51- req.size = decoder->get_request (req.buffer , RPC_BUFFER_SIZE ); // todo overload get_request(RPCRequest& req) so all the request info is in req
53+ req.size = decoder->get_request (req.buffer , req. get_buffer_size () ); // todo overload get_request(RPCRequest& req) so all the request info is in req
5254 return req.size > 0 ;
5355 }
5456
55- void process_request (RPCRequest& req) {
56- if (req.size == 0 ) return ;
57-
58- MsgPack::Unpacker unpacker;
59-
60- unpacker.clear ();
61- if (!unpacker.feed (req.buffer , req.size )) return ;
57+ void process_request (RPCRequest<>& req) {
6258
63- int msg_type;
64- uint32_t msg_id;
65- MsgPack::str_t method;
66- MsgPack::arr_size_t req_size;
67-
68- if (!unpacker.deserialize (req_size, msg_type)) {
59+ if (!req.unpack_request_headers ()) {
6960 req.reset ();
70- return ; // Header not unpackable
61+ return ;
7162 }
7263
73- if (msg_type == CALL_MSG && req_size.size () == REQUEST_SIZE) {
74- if (!unpacker.deserialize (msg_id, method)) {
75- req.reset ();
76- return ; // Method not unpackable
77- }
78- } else if (msg_type == NOTIFY_MSG && req_size.size () == NOTIFY_SIZE) {
79- if (!unpacker.deserialize (method)) {
80- req.reset ();
81- return ; // Method not unpackable
82- }
83- } else {
84- req.reset ();
85- return ; // Invalid request size/type
86- }
87-
88- req.type = msg_type;
89-
90- MsgPack::arr_size_t resp_size (RESPONSE_SIZE);
91- req.res_packer .clear ();
92- if (msg_type == CALL_MSG) req.res_packer .serialize (resp_size, RESP_MSG, msg_id);
64+ req.pack_response_headers ();
9365
94- dispatcher.call (method, unpacker, req.res_packer );
66+ dispatcher.call (req. method , req. unpacker , req.packer );
9567
9668 }
9769
98- bool send_response (RPCRequest& req) {
70+ bool send_response (RPCRequest<> & req) {
9971
100- if (req.type == NO_MSG || req.res_packer .size () == 0 ) {
72+ if (req.type == NO_MSG || req.packer .size () == 0 ) {
10173 return true ; // No response to send
10274 }
10375
10476 if (req.type == NOTIFY_MSG) return true ;
10577
106- return decoder->send_response (req.res_packer );
78+ return decoder->send_response (req.packer );
10779
10880 }
10981
0 commit comments