Skip to content
Snippets Groups Projects
Commit 4f2cbc39 authored by René Pascal Becker's avatar René Pascal Becker
Browse files

Implement data response parsing

parent 17b29368
No related branches found
No related tags found
No related merge requests found
......@@ -182,7 +182,7 @@ static pmix_status_t _lookup_fn(const pmix_proc_t *proc, char **keys,
{
int success = lookup_from_dpm_agent(proc, info, ninfo, keys, cbfunc, cbdata);
if (success) {
return PMIX_OPERATION_SUCCEEDED;
return PMIX_SUCCESS;
}
else {
return PMIX_ERROR;
......
......@@ -286,28 +286,58 @@ struct ReceiverInfo
int socket_fd;
};
void _parse_next_data_val(pmix_pdata_t* data_obj)
{
char* key = strtok(NULL, ",");
char* value = strtok(NULL, ",");
char* nspace = strtok(NULL, ",");
char* rank = strtok(NULL, ",");
data_obj->value.data.string = strdup(value);
data_obj->value.type = PMIX_STRING;
strcpy((char*)data_obj->key, key);
strcpy((char*)data_obj->proc.nspace, nspace);
sscanf(rank, "%u", &data_obj->proc.rank);
}
void _parse_data_arr(char* msg, pmix_pdata_t** data_arr, unsigned long* ndata_arr)
{
char* count = strtok(msg, ",");
if (!count)
return;
sscanf(count, "%lu", ndata_arr);
PMIX_PDATA_CREATE(*data_arr, *ndata_arr);
for (unsigned long i = 0; i < *ndata_arr; i++)
{
_parse_next_data_val(&((*data_arr)[i]));
}
}
void *_lookup_receiver(void *data)
{
struct ReceiverInfo* info = (struct ReceiverInfo*)data;
// Receive result
FILE* ptr = fopen("/home/pmix_data", "a");
fprintf(ptr, "Receiving...\n");
char* data_msg = _receive_message(info->socket_fd);
if (!data_msg)
goto receiverCleanup;
fprintf(ptr, "Message: %s\n", data_msg);
// Fetch message string
char* result = _cpy_message_data(data_msg);
fprintf(ptr, "Message Data: %s\n", result);
_destroy_message(data_msg);
// Parse Data
pmix_pdata_t* data_arr;
unsigned long ndata_arr;
_parse_data_arr(result, &data_arr, &ndata_arr);
info->cbfunc(PMIX_SUCCESS, data_arr, ndata_arr, info->cbdata);
_destroy_message(result);
// Cleanup
receiverCleanup:
fprintf(ptr, "Close Receiver!\n");
fclose(ptr);
close(info->socket_fd);
free(info);
return NULL;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment