2020-12-04 22:25:40 +00:00
|
|
|
package org.syndicate_lang.actors.example.example2;
|
|
|
|
|
2021-04-14 15:00:15 +00:00
|
|
|
import org.syndicate_lang.actors.Actor;
|
2020-12-09 19:27:12 +00:00
|
|
|
import org.syndicate_lang.actors.Remote;
|
2020-12-04 22:25:40 +00:00
|
|
|
|
|
|
|
public class Forwarder implements IForwarder {
|
2020-12-09 19:27:12 +00:00
|
|
|
private final Remote<IForwarder> _main;
|
2020-12-04 22:25:40 +00:00
|
|
|
private final int _nRounds;
|
2020-12-09 19:27:12 +00:00
|
|
|
private Remote<IForwarder> _peer = null;
|
2020-12-04 22:25:40 +00:00
|
|
|
|
2020-12-09 19:27:12 +00:00
|
|
|
public Forwarder(Remote<IForwarder> main, int nRounds) {
|
2020-12-04 22:25:40 +00:00
|
|
|
this._main = main;
|
|
|
|
this._nRounds = nRounds;
|
2020-12-09 19:22:52 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2020-12-09 19:27:12 +00:00
|
|
|
public void setPeer(Remote<IForwarder> peer) {
|
2020-12-09 19:22:52 +00:00
|
|
|
this._peer = peer;
|
2020-12-04 22:25:40 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2021-04-14 15:00:15 +00:00
|
|
|
public void handleMessage(Actor _ac, final int hopCount) {
|
2020-12-09 19:27:12 +00:00
|
|
|
Remote<IForwarder> target = hopCount >= this._nRounds - 1 ? _main : _peer;
|
2021-04-14 15:00:15 +00:00
|
|
|
target.async((f, ac) -> f.handleMessage(ac, hopCount + 1));
|
2020-12-04 22:25:40 +00:00
|
|
|
}
|
|
|
|
}
|