law(external,language(java)) import java.util.*; import java.io.*; public class external extends Law{ public void sent(String source, String message, String dest) { System.out.println("SENT "+source +" "+message+" "+dest+" "+destlaw); if(message.startsWith("release")) { //release(msg,host,port) String msg=getFromMessage(message,0); String host=getFromMessage(message,1); int port = Integer.parseInt(getFromMessage(message,2)); doRelease(Self, msg, host, port); return; } doForward(); } public void arrived(String source, String message, String dest) { System.out.println("ARRIVED "+source+" "+sourcelaw +" "+message+" "+dest); doDeliver(); } public void submitted(String source, int port, String message, String dest) { System.out.println("SUBMITED"+source +" "+port+" "+message+" "+dest); doDeliver(source+":"+port,message,dest); } public void disconnected() { System.out.println("DISCONNECTED executes in law "+Self); doQuit(); } /** Get the argument no index from the message argument, assuming that the message is properly formed as a regular expression. */ public String getFromMessage(String message, int index) { Term tmessage = Term.parse(message); if( !(tmessage.type == Term.CType || tmessage.type == Term.LType)) return null; if(tmessage.getArity()<=index) return null; return tmessage.getSubTerm(index).toString(); } }