diff --git a/examples/rpc_lite_client/rpc_lite_client.ino b/examples/rpc_lite_client/rpc_lite_client.ino index 22a1ad2..aaeb392 100644 --- a/examples/rpc_lite_client/rpc_lite_client.ino +++ b/examples/rpc_lite_client/rpc_lite_client.ino @@ -1,10 +1,10 @@ #include -SerialTransport transport(&Serial0); +SerialTransport transport(&Serial1); RPCClient client(transport); void setup() { - Serial0.begin(115200); + Serial1.begin(115200); transport.begin(); pinMode(LED_BUILTIN, OUTPUT); Serial.begin(9600); diff --git a/examples/rpc_lite_server/rpc_lite_server.ino b/examples/rpc_lite_server/rpc_lite_server.ino index 86faf69..81da0e1 100644 --- a/examples/rpc_lite_server/rpc_lite_server.ino +++ b/examples/rpc_lite_server/rpc_lite_server.ino @@ -1,6 +1,6 @@ #include -SerialTransport transport(&Serial0); +SerialTransport transport(&Serial1); RPCServer server(transport); int add(int a, int b){ @@ -16,7 +16,7 @@ MsgPack::str_t loopback(MsgPack::str_t message){ } void setup() { - Serial0.begin(115200); + Serial1.begin(115200); transport.begin(); pinMode(LED_BUILTIN, OUTPUT); Serial.begin(9600); diff --git a/src/DummyTransport.h b/src/DummyTransport.h index 89150e1..dc3b3b7 100644 --- a/src/DummyTransport.h +++ b/src/DummyTransport.h @@ -24,6 +24,7 @@ class DummyTransport: public ITransport { size_t write(const uint8_t* data, size_t size) override { // Mock write + (void)data; return size; } diff --git a/src/wrapper.h b/src/wrapper.h index b64e719..b43fab3 100644 --- a/src/wrapper.h +++ b/src/wrapper.h @@ -94,11 +94,7 @@ class RpcFunctionWrapper: public IFunctionWrapper { return false; } - //unpacker not ready if deserialization fails at this point - std::tuple args; - if (!deserialize_all(unpacker, args)) return false; - - return handle_call(args, packer); + return handle_call(unpacker, packer); #ifdef HANDLE_RPC_ERRORS } catch (const std::exception& e) { @@ -116,7 +112,10 @@ class RpcFunctionWrapper: public IFunctionWrapper { template typename std::enable_if::value, bool>::type - handle_call(auto&& args, auto&& packer) { + handle_call(MsgPack::Unpacker& unpacker, MsgPack::Packer& packer) { + //unpacker not ready if deserialization fails at this point + std::tuple args; + if (!deserialize_all(unpacker, args)) return false; MsgPack::object::nil_t nil; invoke_with_tuple(_func, args, arx::stdx::make_index_sequence{}); packer.serialize(nil, nil); @@ -125,7 +124,10 @@ class RpcFunctionWrapper: public IFunctionWrapper { template typename std::enable_if::value, bool>::type - handle_call(auto&& args, auto&& packer) { + handle_call(MsgPack::Unpacker& unpacker, MsgPack::Packer& packer) { + //unpacker not ready if deserialization fails at this point + std::tuple args; + if (!deserialize_all(unpacker, args)) return false; MsgPack::object::nil_t nil; R out = invoke_with_tuple(_func, args, arx::stdx::make_index_sequence{}); packer.serialize(nil, out);