Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Immediate start of federates with STP offset under decentralized coordination & fix target code STP_offset #2368

Merged
merged 12 commits into from
Jul 23, 2024
4 changes: 4 additions & 0 deletions core/src/main/java/org/lflang/ast/ASTUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,7 @@
import org.lflang.lf.Watchdog;
import org.lflang.lf.WidthSpec;
import org.lflang.lf.WidthTerm;
import org.lflang.lf.impl.CodeExprImpl;
import org.lflang.target.Target;
import org.lflang.target.TargetConfig;
import org.lflang.target.property.CompileDefinitionsProperty;
Expand Down Expand Up @@ -1137,6 +1138,9 @@ public static TimeValue getLiteralTimeValue(Expression expr) {
return toTimeValue((Time) expr);
} else if (expr instanceof Literal && isZero(((Literal) expr).getLiteral())) {
return TimeValue.ZERO;
} else if (expr instanceof CodeExprImpl
&& ((CodeExprImpl) expr).getCode().getBody().equals("FOREVER")) {
return TimeValue.MAX_VALUE;
} else {
return null;
}
Expand Down
2 changes: 1 addition & 1 deletion core/src/main/resources/lib/c/reactor-c
52 changes: 52 additions & 0 deletions test/Python/src/federated/Dataflow.lf
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
target Python {
coordination: decentralized
}

reactor Client(STP_offset = {= FOREVER =}) {
input server_message
output client_message

reaction(startup) {=
print("Client Startup!")
=}

reaction(server_message) -> client_message {=
val = server_message.value
val += 1
print("client:", val)
if val==49:
print("client done")
request_stop()
if val<49:
client_message.set(val)
=}
}

reactor Server(STP_offset = {= FOREVER =}) {
output server_message
input client_message

reaction(startup) -> server_message {=
print("Server Startup!")
server_message.set(0)
=}

reaction(client_message) -> server_message {=
val = client_message.value
val += 1
print("server:", val)
if val==48:
print("server done")
server_message.set(val)
request_stop()
if val<48:
server_message.set(val)
=}
}

federated reactor(STP_offset = {= FOREVER =}) {
client = new Client()
server = new Server()
server.server_message -> client.server_message after 0
client.client_message -> server.client_message
}
Loading