package org.syndicate_lang.actors.example.example2; import org.syndicate_lang.actors.Actor; import org.syndicate_lang.actors.Remote; public class Forwarder implements IForwarder { private final Remote _main; private final int _nRounds; private Remote _peer = null; public Forwarder(Remote main, int nRounds) { this._main = main; this._nRounds = nRounds; } @Override public void setPeer(Remote peer) { this._peer = peer; } @Override public void handleMessage(Actor _ac, final int hopCount) { Remote target = hopCount >= this._nRounds - 1 ? _main : _peer; target.async((f, ac) -> f.handleMessage(ac, hopCount + 1)); } }