/** Handle as message from JavaScript on the worker thread. * * @param[in] message The message to parse and handle. */ static void HandleMessage(char* message) { char* function_name; char* params[MAX_PARAMS]; size_t num_params; char* output = NULL; int result; HandleFunc function; num_params = ParseMessage(message, &function_name, ¶ms[0], MAX_PARAMS); function = GetFunctionByName(function_name); if (!function) { /* Function name wasn't found. Error. */ ppb_messaging_interface->PostMessage( g_instance, PrintfToVar("Error: Unknown function \"%s\"", function)); } /* Function name was found, call it. */ result = (*function)(num_params, ¶ms[0], &output); if (result != 0) { /* Error. */ struct PP_Var var; if (output != NULL) { var = PrintfToVar("Error: Function \"%s\" returned error %d. " "Additional output: %s", function_name, result, output); free(output); } else { var = PrintfToVar( "Error: Function \"%s\" returned error %d.", function_name, result); } /* Post the error to JavaScript, so the user can see it. */ ppb_messaging_interface->PostMessage(g_instance, var); return; } if (output != NULL) { /* Function returned an output string. Send it to JavaScript. */ ppb_messaging_interface->PostMessage(g_instance, CStrToVar(output)); free(output); } }
static void HandleMessage(char* message) { char* function_name; char* params[MAX_PARAMS]; size_t num_params; char* output = NULL; int result; HandleFunc function; num_params = ParseMessage(message, &function_name, ¶ms[0], MAX_PARAMS); function = GetFunctionByName(function_name); if (!function) { ppb_messaging_interface->PostMessage( g_instance, PrintfToVar("Error: Unknown function \"%s\"", function_name)); return; } result = (*function)(num_params, ¶ms[0], &output); if (result != 0) { struct PP_Var var; if (output != NULL) { var = PrintfToVar("Error: \"%s\" failed: %d: %s.", function_name, result, output); free(output); } else { var = PrintfToVar( "Error: \"%s\" failed: %d.", function_name, result); } ppb_messaging_interface->PostMessage(g_instance, var); return; } if (output != NULL) { ppb_messaging_interface->PostMessage(g_instance, CStrToVar(output)); free(output); } }
static void Messaging_HandleMessage(PP_Instance instance, struct PP_Var message) { char buffer[1024]; VarToCStr(message, &buffer[0], 1024); if (!EnqueueMessage(strdup(buffer))) { struct PP_Var var; var = PrintfToVar( "Warning: dropped message \"%s\" because the queue was full.", message); ppb_messaging_interface->PostMessage(g_instance, var); } }