Browse Source

Updating template to the new daemon API

tags/v0.2.0-rc
haixuanTao 2 years ago
parent
commit
a0ebff1c86
4 changed files with 76 additions and 62 deletions
  1. +18
    -17
      binaries/cli/src/template/c/dataflow-template.yml
  2. +18
    -14
      binaries/cli/src/template/c/node/node-template.c
  3. +32
    -28
      binaries/cli/src/template/c/operator/operator-template.c
  4. +8
    -3
      binaries/cli/src/template/python/node/node-template.py

+ 18
- 17
binaries/cli/src/template/c/dataflow-template.yml View File

@@ -3,25 +3,26 @@ communication:
prefix: /___name___

nodes:
- id: runtime-node_1
operators:
- id: op_1
shared-library: build/op_1
inputs:
tick: dora/timer/millis/100
outputs:
- some-output
- id: op_2
shared-library: build/op_2
inputs:
tick: dora/timer/secs/2
outputs:
- some-output
- id: op_1
operator:
shared-library: build/op_1
inputs:
foo: dora/timer/millis/100
outputs:
- bar
- id: op_2
operator:
shared-library: build/op_2
inputs:
foo: dora/timer/secs/2
outputs:
- bar

- id: custom-node_1
custom:
source: build/node_1
inputs:
tick: dora/timer/secs/1
input-1: op_1/some-output
input-2: op_2/some-output
input-1: op_1/bar
input-2: op_2/bar
outputs:
- foo

+ 18
- 14
binaries/cli/src/template/c/node/node-template.c View File

@@ -21,26 +21,30 @@ int main()

while (1)
{
void *input = dora_next_input(dora_context);
if (input == NULL)
void *event = dora_next_event(dora_context);
if (event == NULL)
{
// end of input
break;
printf("[c node] ERROR: unexpected end of event\n");
return -1;
}

char *id;
size_t id_len;
read_dora_input_id(input, &id, &id_len);
enum DoraEventType ty = read_dora_event_type(event);
if (ty == DoraEventType_Input)
{
char *id;
size_t id_len;
read_dora_input_id(event, &id, &id_len);

char *data;
size_t data_len;
read_dora_input_data(input, &data, &data_len);
char *data;
size_t data_len;
read_dora_input_data(event, &data, &data_len);

char out_id[] = "foo";
char out_data[] = "bar";
dora_send_output(dora_context, out_id, strlen(out_id), out_data, strlen(out_data));
char out_id[] = "foo";
char out_data[] = "bar";
dora_send_output(dora_context, out_id, strlen(out_id), out_data, strlen(out_data));

free_dora_input(input); // do not use `id` or `data` pointer after freeing
free_dora_event(event); // do not use `id` or `data` pointer after freeing
}
}

free_dora_context(dora_context);


+ 32
- 28
binaries/cli/src/template/c/operator/operator-template.c View File

@@ -22,39 +22,43 @@ DoraResult_t dora_drop_operator(void *operator_context)
return result;
}

OnInputResult_t dora_on_input(
const Input_t *input,
OnEventResult_t dora_on_event(
const RawEvent_t *event,
const SendOutput_t *send_output,
void *operator_context)
{
char id[input->id.len + 1];
memcpy(id, input->id.ptr, input->id.len);
id[input->id.len] = 0;

// example for matching on input name
if (strcmp(id, "foo") == 0)
if (event->input != NULL)
{
char *out_id = "bar";
char *out_id_heap = strdup(out_id);

int data_alloc_size = 10;
void *out_data = malloc(data_alloc_size);
// TODO intialize out_data

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);

OnInputResult_t result = {.result = res, .status = DORA_STATUS_CONTINUE};
return result;
char id[event->input->id.len + 1];
memcpy(id, event->input->id.ptr, event->input->id.len);
id[event->input->id.len] = 0;

// example for matching on input name
if (strcmp(id, "foo") == 0)
{
char *out_id = "bar";
char *out_id_heap = strdup(out_id);

int data_alloc_size = 10;
void *out_data = malloc(data_alloc_size);
// TODO intialize out_data

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
if (event->stop)
{
OnInputResult_t result = {.status = DORA_STATUS_CONTINUE};
return result;
printf("C operator received stop event\n");
}
OnEventResult_t result = {.status = DORA_STATUS_CONTINUE};
return result;
}

+ 8
- 3
binaries/cli/src/template/python/node/node-template.py View File

@@ -5,6 +5,11 @@ from dora import Node

node = Node()

input_id, value, metadata = node.next()

print(f"id: {input_id}, value: {value}, metadata: {metadata}")
event = node.next()
if event["type"] == "INPUT":
print(
f"""Node received:
id: {event["id"]},
value: {event["data"]},
metadata: {event["metadata"]}"""
)

Loading…
Cancel
Save