Marcus Daniels, June 11, 2001 swarm-support NB> My problem, is how to replace one actions by a different one... Swarm can now do this in the literal way you suggest. You'll need today's snapshot or Windows DLLs & jar file from To install: $ cd /tmp $ mv /Swarm-2.1.1/share/swarm/swarm.jar /Swarm-2.1.1/share/swarm/swarm.jar.bak $ wget ftp://ftp.swarm.org/pub/swarm/binaries/w32/latest/swarm.jar.gz $ gunzip swarm.jar.gz $ mv swarm.jar /Swarm-2.1.1/share/swarm (for Sun JDK) $ mv /Swarm-2.1.1/bin/javaswarm.dll /Swarm-2.1.1/bin/javaswarm.dll.bak $ wget ftp://ftp.swarm.org/pub/swarm/binaries/w32/latest/javaswarm.dll.gz $ gunzip javaswarm.dll.gz $ mv javaswarm.dll /Swarm-2.1.1/bin (for Kaffe) $ mv /Swarm-2.1.1/bin/libkaffeswarm.dll /Swarm-2.1.1/bin/libkaffeswarm.dll.bak $ wget ftp://ftp.swarm.org/pub/swarm/binaries/w32/latest/libkaffeswarm.dll.gz $ gunzip libkaffeswarm.dll.gz $ mv libkaffeswarm.dll /Swarm-2.1.1/bin Here's an example: import swarm.objectbase.SwarmImpl; import swarm.activity.Schedule; import swarm.activity.ScheduleImpl; import swarm.objectbase.Swarm; import swarm.activity.Activity; import swarm.activity.ActionSelectorS; import java.util.LinkedList; import java.util.List; import swarm.defobj.Zone; import swarm.Selector; import swarm.Globals; class Agent { int sn; Agent (int sn) { this.sn = sn; } public void msg1 () { System.out.println (this + " " + sn + " msg1"); } public void msg2 () { System.out.println (this + " " + sn + " msg2"); } } public class UpdateSelector extends SwarmImpl { Schedule schedule; Schedule changeSchedule; Schedule stopSchedule; ActionSelectorS actionForEach; List agentList; Selector sel2; UpdateSelector (Zone aZone) { super (aZone); } public Object buildObjects () { super.buildObjects (); agentList = new LinkedList (); for (int i = 0; i < 2; i++) agentList.add (new Agent (i)); return this; } public Object buildActions () { super.buildActions (); schedule = new ScheduleImpl (getZone (), 1); changeSchedule = new ScheduleImpl (getZone (), true); stopSchedule = new ScheduleImpl (getZone (), true); try { Selector sel = new Selector (Agent.class, "msg1", false); actionForEach = schedule.at$createActionForEachHomogeneous$message (0, agentList, sel); sel = new Selector (getClass (), "change", false); changeSchedule.at$createActionTo$message (2, this, sel); sel = new Selector (getClass (), "stop", false); stopSchedule.at$createActionTo$message (4, this, sel); sel2 = new Selector (Agent.class, "msg2", false); } catch (Exception e) { e.printStackTrace (System.err); System.exit (1); } return this; } public void change () { System.out.println ("change"); try { actionForEach.setMessageSelector (sel2); } catch (Exception e) { e.printStackTrace (System.err); System.exit (1); } } public void stop () { getActivity ().terminate (); } public Activity activateIn (Swarm swarmContext) { super.activateIn (swarmContext); schedule.activateIn (this); changeSchedule.activateIn (this); stopSchedule.activateIn (this); return getActivity (); } static void main (String args[]) { Globals.env.initSwarm ("UpdateSelector", "0.0", "bug-swarm@swarm.org", args); UpdateSelector obj = new UpdateSelector (Globals.env.globalZone); obj.buildObjects (); obj.buildActions (); obj.activateIn (null).run (); } }