syndicate-java/src/test/java/org/syndicate_lang/actors/example/example2/Forwarder.java

32 lines
909 B
Java
Raw Normal View History

2020-12-04 22:25:40 +00:00
package org.syndicate_lang.actors.example.example2;
import org.syndicate_lang.actors.Entity;
2021-04-14 19:42:50 +00:00
import org.syndicate_lang.actors.Ref;
import org.syndicate_lang.actors.Turn;
2020-12-04 22:25:40 +00:00
public class Forwarder extends Entity {
private final Ref _main;
2020-12-04 22:25:40 +00:00
private final int _nRounds;
private Ref _peer = null;
2020-12-04 22:25:40 +00:00
public Forwarder(Ref main, int nRounds) {
2020-12-04 22:25:40 +00:00
this._main = main;
this._nRounds = nRounds;
}
@Override
public void retract_(Turn turn, Long handle) {
turn.quit();
2020-12-04 22:25:40 +00:00
}
@Override
public void message_(Turn turn, Object body) {
2023-10-28 14:32:23 +00:00
if (body instanceof IForwarder.HandleMessage op) {
Ref target = op.hopCount() >= this._nRounds - 1 ? _main : _peer;
turn.message_(target, new IForwarder.HandleMessage(op.hopCount() + 1));
2023-10-28 14:32:23 +00:00
} else if (body instanceof IForwarder.SetPeer op) {
this._peer = op.peer();
}
2020-12-04 22:25:40 +00:00
}
}