You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

operator.c 2.0 kB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #include "../../apis/c/operator/operator_api.h"
  2. #include <assert.h>
  3. #include <string.h>
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. DoraInitResult_t dora_init_operator(void)
  7. {
  8. void *context = malloc(1);
  9. char *context_char = (char *)context;
  10. *context_char = 0;
  11. DoraInitResult_t result = {.operator_context = context};
  12. return result;
  13. }
  14. DoraResult_t dora_drop_operator(void *operator_context)
  15. {
  16. free(operator_context);
  17. DoraResult_t result = {};
  18. return result;
  19. }
  20. OnEventResult_t dora_on_event(
  21. RawEvent_t *event,
  22. const SendOutput_t *send_output,
  23. void *operator_context)
  24. {
  25. OnEventResult_t result = {.status = DORA_STATUS_CONTINUE};
  26. char *counter = (char *)operator_context;
  27. if (event->input != NULL)
  28. {
  29. // input event
  30. Input_t *input = event->input;
  31. char *id = dora_read_input_id(input);
  32. if (strcmp(id, "message") == 0)
  33. {
  34. printf("message event\n");
  35. Vec_uint8_t data = dora_read_data(input);
  36. assert(data.ptr != NULL);
  37. *counter += 1;
  38. printf("C operator received message `%.*s`, counter: %i\n", (int)data.len, data.ptr, *counter);
  39. char *out_id = "counter";
  40. char *out_id_heap = strdup(out_id);
  41. int data_alloc_size = 100;
  42. char *out_data = (char *)malloc(data_alloc_size);
  43. int count = snprintf(out_data, data_alloc_size, "The current counter value is %d", *counter);
  44. assert(count >= 0 && count < 100);
  45. DoraResult_t res = dora_send_operator_output(send_output, out_id_heap, (uint8_t *)out_data, strlen(out_data));
  46. result.result = res;
  47. dora_free_data(data);
  48. }
  49. else
  50. {
  51. printf("C operator received unexpected input %s, context: %i\n", id, *counter);
  52. }
  53. dora_free_input_id(id);
  54. }
  55. if (event->stop)
  56. {
  57. printf("C operator received stop event\n");
  58. }
  59. return result;
  60. }