#include "../../apis/c/operator/operator_api.h" #include #include #include #include DoraInitResult_t dora_init_operator(void) { void *context = malloc(1); char *context_char = (char *)context; *context_char = 0; DoraInitResult_t result = {.operator_context = context}; return result; } DoraResult_t dora_drop_operator(void *operator_context) { free(operator_context); DoraResult_t result = {}; return result; } OnEventResult_t dora_on_event( const RawEvent_t *event, const SendOutput_t *send_output, void *operator_context) { char *counter = (char *)operator_context; if (event->input != NULL) { // input event Input_t *input = event->input; char id[input->id.len + 1]; memcpy(id, input->id.ptr, input->id.len); id[input->id.len] = 0; if (strcmp(id, "message") == 0) { char data[input->data.len + 1]; memcpy(data, input->data.ptr, input->data.len); data[input->data.len] = 0; *counter += 1; printf("C operator received message `%s`, counter: %i\n", data, *counter); char *out_id = "counter"; char *out_id_heap = strdup(out_id); int data_alloc_size = 100; char *out_data = (char *)malloc(data_alloc_size); int count = snprintf(out_data, data_alloc_size, "The current counter value is %d", *counter); assert(count >= 0 && count < 100); Output_t output = {.id = { .ptr = (uint8_t *)out_id_heap, .len = strlen(out_id_heap), .cap = strlen(out_id_heap) + 1, }, .data = {.ptr = (uint8_t *)out_data, .len = strlen(out_data), .cap = data_alloc_size}}; DoraResult_t res = (send_output->send_output.call)(send_output->send_output.env_ptr, output); OnEventResult_t result = {.result = res, .status = DORA_STATUS_CONTINUE}; return result; } else { printf("C operator received unexpected input %s, context: %i\n", id, *counter); } } if (event->stop) { printf("C operator received stop event\n"); } OnEventResult_t result = {.status = DORA_STATUS_CONTINUE}; return result; }