law(bc,language(java)) public class bc extends Law{ public static final String regulator = "regulator@research.rutgers.edu"; public void adopted(String arg) { doAdd("budget(0)"); doAdd("visits(0)"); } public void sent(String source, String message, String dest) { if(message.equals("getCS")) { doDiscloseAllCS(); return; } if ( (message.startsWith("addToBudget")) && (source.equals(regulator))) { doForward(); return; } if (message.startsWith("request")) { int b = CS.fetchInt("budget"); if(b>0) { doDecr("budget", 1); doForward(); return; } } if ((message.equals("visitsReport")) && (dest.equals(regulator))) { int v = CS.fetchInt("visits"); doDecr("visits", v); doForward(Self,"visitsReport("+v+")",regulator); return; } doDeliver("law", "failedSending(" + message + "," + dest + ")", source); } public void arrived(String source, String message, String dest) { if ((message.startsWith("addToBudget")) && (source.equals(regulator))) { String content = getContentFromMessage(message); int b = Integer.parseInt(content); doIncr("budget", b); doDeliver(); return; } if (message.startsWith("request")) { doIncr("visits", 1); doDeliver(); return; } if ((message.startsWith("visitsReport")) && (dest.equals(regulator))) { doDeliver(); return; } } public void disconnected() { doQuit(); } /** Helper method to parse the argument out of a regular expression */ public String getContentFromMessage(String anyMessage) { int index = anyMessage.indexOf("("); if (index == -1) return ""; else return anyMessage.substring(index+1, anyMessage.length()-1); } }