@@ -108,6 +108,7 @@ void ProxySupervisor::startPushDebuggerSocket() {
108
108
}
109
109
110
110
if (isReply (parsed)) {
111
+ this ->hasReplied = true ;
111
112
this ->proxyResult = parsed;
112
113
}
113
114
@@ -124,9 +125,10 @@ bool ProxySupervisor::send(
124
125
return n == size;
125
126
}
126
127
127
- char *ProxySupervisor::readReply () {
128
- // TODO use this->proxyResult
129
- return nullptr ;
128
+ nlohmann::basic_json<> ProxySupervisor::readReply () {
129
+ while (!this ->hasReplied );
130
+ this ->hasReplied = false ;
131
+ return this ->proxyResult ;
130
132
}
131
133
132
134
pthread_t ProxySupervisor::getThreadID () { return this ->threadid ; }
@@ -209,54 +211,26 @@ struct SerializeData *ProxySupervisor::serializeRFC(RFC *callee) {
209
211
}
210
212
211
213
void ProxySupervisor::deserializeRFCResult (RFC *rfc) {
212
- uint8_t *call_result = nullptr ;
213
- while (call_result == nullptr ) {
214
- call_result = (uint8_t *)this ->readReply ();
215
- }
216
- rfc->success = (uint8_t )call_result[0 ] == 1 ;
217
-
218
- if (!rfc->success ) {
219
- uint16_t msg_size = 0 ;
220
- memcpy (&msg_size, call_result + 1 , sizeof (uint16_t ));
221
- if (msg_size > rfc->exception_size ) {
222
- delete[] rfc->exception ;
223
- rfc->exception = new char [msg_size];
224
- rfc->exception_size = msg_size;
225
- }
226
- memcpy (rfc->exception , call_result + 1 + sizeof (uint16_t ), msg_size);
227
- delete[] call_result;
228
- return ;
229
- }
230
-
231
- if (rfc->type ->result_count == 0 ) {
232
- delete[] call_result;
233
- return ;
234
- }
235
-
236
- rfc->result ->value .uint64 = 0 ;
237
- switch (rfc->result ->value_type ) {
238
- case I32:
239
- memcpy (&rfc->result ->value .uint32 , call_result + 1 ,
240
- sizeof (uint32_t ));
241
- dbg_info (" deserialized U32 %" PRIu32 " \n " , result->value .uint32 );
242
- break ;
243
- case F32:
244
- memcpy (&rfc->result ->value .f32 , call_result + 1 , sizeof (float ));
245
- dbg_info (" deserialized f32 %f \n " , result->value .f32 );
246
- break ;
247
- case I64:
248
- memcpy (&rfc->result ->value .uint64 , call_result + 1 ,
249
- sizeof (uint64_t ));
250
- dbg_info (" deserialized I64 %" PRIu64 " \n " , result->value .uint64 );
251
- break ;
252
- case F64:
253
- memcpy (&rfc->result ->value .f64 , call_result + 1 , sizeof (double ));
254
- dbg_info (" deserialized f32 %f \n " , result->value .f64 );
255
- break ;
256
- default :
257
- FATAL (" Deserialization RFCResult\n " );
258
- }
259
- delete[] call_result;
214
+ nlohmann::basic_json<> call_result = this ->readReply (); // blocking
215
+ rfc->success = *call_result.find (" success" ) == 1 ;
216
+
217
+ // if (!rfc->success) {
218
+ // uint16_t msg_size = 0;
219
+ // memcpy(&msg_size, call_result + 1, sizeof(uint16_t));
220
+ // if (msg_size > rfc->exception_size) {
221
+ // delete[] rfc->exception;
222
+ // rfc->exception = new char[msg_size];
223
+ // rfc->exception_size = msg_size;
224
+ // }
225
+ // memcpy(rfc->exception, call_result + 1 + sizeof(uint16_t), msg_size);
226
+ // return;
227
+ // }
228
+
229
+ uint8_t type = *call_result.find (" type" );
230
+ auto *result = (StackValue *)malloc (sizeof (struct StackValue ));
231
+ result->value_type = type;
232
+ result->value = {*call_result.find (" value" )};
233
+ rfc->result = result;
260
234
}
261
235
262
236
bool ProxySupervisor::call (RFC *callee) {
0 commit comments