#include "build/operator_api.h" #include #include #include #include int dora_init_operator(void **operator_context) { void *context = malloc(1); char *context_char = (char *)context; *context_char = 0; *operator_context = context; return 0; } void dora_drop_operator(void *operator_context) { free(operator_context); } int dora_on_input( const char *id_start, size_t id_len, const char *data_start, size_t data_len, const int (*output_fn_raw)(const char *id_start, size_t id_len, const char *data_start, size_t data_len, const void *output_context), void *output_context, const void *operator_context) { char *counter = (char *)operator_context; char id[id_len + 1]; memcpy(id, id_start, id_len); id[id_len] = 0; if (strcmp(id, "tick") == 0) { char data[data_len + 1]; memcpy(data, data_start, data_len); data[data_len] = 0; *counter += 1; printf("C operator received tick input with data `%s`, counter: %i\n", data, *counter); char *out_id = "counter"; char out_data[100]; int count = snprintf(out_data, sizeof(out_data), "The current counter value is %d", *counter); assert(count >= 0 && count < 100); int res = (output_fn_raw)(out_id, strlen(out_id), out_data, strlen(out_data), output_context); if (res != 0) { printf("C operator failed to send output\n"); } } else { printf("C operator received unexpected input %s, context: %i\n", id, *counter); } return 0; }