Skip to content

Commit

Permalink
Fix tiny mistake in federated copy
Browse files Browse the repository at this point in the history
  • Loading branch information
erlingrj committed Oct 22, 2024
1 parent 42181c3 commit 4c694e0
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 17 deletions.
42 changes: 25 additions & 17 deletions examples/posix/testing_fed_conn.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,39 +4,44 @@
#include <pthread.h>
#include <sys/socket.h>

#define PORT_NUM 8906
#define PORT_NUM 8901

typedef struct {
char msg[32];
} msg_t;

DEFINE_TIMER(Timer1, 1, 0, SEC(1))
DEFINE_REACTION(Sender, 0, 1)
DEFINE_OUTPUT_PORT(Out, 1, 1)
DEFINE_TIMER_STRUCT(Timer1, 1)
DEFINE_TIMER_CTOR_FIXED(Timer1, 1, MSEC(0), SEC(1))
DEFINE_REACTION_STRUCT(Sender, 0, 1)
DEFINE_OUTPUT_PORT_STRUCT(Out, 1, 1)
DEFINE_OUTPUT_PORT_CTOR(Out, 1, 1)

typedef struct {
Reactor super;
Sender_0 reaction;
Sender_Reaction0 reaction;
Timer1 timer;
Out out;
Reaction *_reactions[1];
Trigger *_triggers[1];
} Sender;

REACTION_BODY(Sender, 0, {
DEFINE_REACTION_BODY(Sender, 0) {
Sender *self = (Sender *)_self->parent;
Environment *env = self->super.env;
Out *out = &self->out;

printf("Timer triggered @ %" PRId64 "\n", env->get_elapsed_logical_time(env));
msg_t val;
strcpy(val.msg, "Hello From Sender");
lf_set(out, val);
})
}
DEFINE_REACTION_CTOR(Sender, 0)

void Sender_ctor(Sender *self, Reactor *parent, Environment *env) {
self->_reactions[0] = (Reaction *)&self->reaction;
self->_triggers[0] = (Trigger *)&self->timer;
Reactor_ctor(&self->super, "Sender", env, parent, NULL, 0, self->_reactions, 1, self->_triggers, 1);
Sender_0_ctor(&self->reaction, &self->super);
Sender_Reaction0_ctor(&self->reaction, &self->super);
Timer_ctor(&self->timer.super, &self->super, 0, MSEC(100), self->timer.effects, 1);
Out_ctor(&self->out, &self->super);
TIMER_REGISTER_EFFECT(self->timer, self->reaction);
Expand All @@ -45,28 +50,32 @@ void Sender_ctor(Sender *self, Reactor *parent, Environment *env) {
OUTPUT_REGISTER_SOURCE(self->out, self->reaction);
}

DEFINE_REACTION(Receiver, 0, 1)
DEFINE_INPUT_PORT(In, 1, msg_t, 1, 0)
DEFINE_REACTION_STRUCT(Receiver, 0, 1)
DEFINE_INPUT_PORT_STRUCT(In, 1, msg_t, 0)
DEFINE_INPUT_PORT_CTOR(In, 1, msg_t, 0)

typedef struct {
Reactor super;
Receiver_0 reaction;
Receiver_Reaction0 reaction;
In inp;
int cnt;
Reaction *_reactions[1];
Trigger *_triggers[1];
} Receiver;

REACTION_BODY(Receiver, 0, {
DEFINE_REACTION_BODY(Receiver, 0) {
Receiver *self = (Receiver *)_self->parent;
Environment *env = self->super.env;
In *inp = &self->inp;
printf("Input triggered @ %" PRId64 " with %s\n", env->get_elapsed_logical_time(env), lf_get(inp).msg);
})
printf("Input triggered @ %" PRId64 " with %s\n", env->get_elapsed_logical_time(env), inp->value.msg);
}
DEFINE_REACTION_CTOR(Receiver, 0)

void Receiver_ctor(Receiver *self, Reactor *parent, Environment *env) {
self->_reactions[0] = (Reaction *)&self->reaction;
self->_triggers[0] = (Trigger *)&self->inp;
Reactor_ctor(&self->super, "Receiver", env, parent, NULL, 0, self->_reactions, 1, self->_triggers, 1);
Receiver_0_ctor(&self->reaction, &self->super);
Receiver_Reaction0_ctor(&self->reaction, &self->super);
In_ctor(&self->inp, &self->super);

// Register reaction as an effect of in
Expand Down Expand Up @@ -171,7 +180,7 @@ void MainRecv_ctor(MainRecv *self, Environment *env) {
}

ENTRY_POINT_FEDERATED(MainSender, SEC(1), true, false, 1)
ENTRY_POINT_FEDERATED(MainRecv, FOREVER, true, true, 1)
ENTRY_POINT_FEDERATED(MainRecv, SEC(1), true, true, 1)

void *recv_thread(void *unused) {
(void)unused;
Expand Down Expand Up @@ -215,4 +224,3 @@ int main() {
printf("Both threads have finished\n");
return 0;
}
int main() {}
1 change: 1 addition & 0 deletions src/federated.c
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,7 @@ void FederatedConnectionBundle_msg_received_cb(FederatedConnectionBundle *self,
if (ret != LF_OK) {
LF_ERR(FED, "Input buffer at Connection %p is full. Dropping incoming msg", input);
} else {
memcpy(payload, msg->payload.bytes, msg->payload.size);
Event event = EVENT_INIT(tag, &input->super.super, payload);
ret = sched->schedule_at_locked(sched, &event);
switch (ret) {
Expand Down

0 comments on commit 4c694e0

Please sign in to comment.