@@ -70,7 +70,7 @@ void loop() {
7070 }
7171
7272 if (decoder2.packet_incoming ()){
73- Serial.print (" packet ready . type: " );
73+ Serial.print (" packet incoming . type: " );
7474 Serial.println (decoder2.packet_type ());
7575 }
7676
@@ -94,7 +94,71 @@ void loop() {
9494 }
9595
9696 if (decoder3.packet_incoming ()){
97- Serial.print (" packet ready . type: " );
97+ Serial.print (" packet incoming . type: " );
9898 Serial.println (decoder3.packet_type ());
9999 }
100+
101+ // MIXED INCOMING RESPONSE AND REQUEST
102+ blink_before ();
103+ packer.clear ();
104+ packer.serialize (resp_sz, 1 , 1 , nil, ret_sz, 3.0 , 2 );
105+ packer.serialize (req_sz, 0 , 1 , " method" , par_sz, 1.0 , 2.0 );
106+
107+ DummyTransport dummy_transport4 (packer.data (), packer.size ());
108+ RpcDecoder<> decoder4 (dummy_transport4);
109+
110+ while (!decoder4.packet_incoming ()){
111+ decoder4.print_buffer ();
112+ Serial.println (" Packet not ready" );
113+ decoder4.advance ();
114+ decoder4.parse_packet ();
115+ decoder4.print_buffer ();
116+ delay (100 );
117+ }
118+
119+ if (decoder4.packet_incoming ()){
120+ Serial.print (" packet ready. type: " );
121+ Serial.println (decoder4.packet_type ());
122+
123+ // as client knows the expected response types/error
124+ MsgPack::arr_size_t r_resp_sz (4 );
125+ MsgPack::object::nil_t nil;
126+ int r_type;
127+ int r_msg_id;
128+ MsgPack::arr_size_t r_ret_sz (2 );
129+ float r_float;
130+ int r_int;
131+
132+ Serial.print (" Total Decoder buf size: " );
133+ Serial.println (decoder4.size ());
134+ for (size_t i=1 ; i<decoder4.size (); i++){
135+
136+ if (decoder4.get_next_packet (unpacker, i)){
137+
138+ if (unpacker.deserialize (r_resp_sz, r_type, r_msg_id)){
139+ // consistency checks
140+ if (unpacker.unpackable (nil)) { // No error case
141+ if (unpacker.deserialize (nil, r_ret_sz, r_float, r_int)){
142+ // do more checks
143+ // fill the response
144+ Serial.print (" Full packet decoded size: " );
145+ Serial.println (i);
146+ decoder4.pop_packet (i);
147+ Serial.print (" 1st Packet popped. Decoder buf size: " );
148+ Serial.println (decoder4.size ());
149+ decoder4.print_buffer ();
150+ break ; // exit the loop
151+ }
152+ } else {
153+ // unpack the error
154+ }
155+
156+ }
157+
158+ }
159+
160+ }
161+
162+ }
163+
100164}
0 commit comments