diff --git a/src/main/java/org/opennars/web/multinar/NarNode.java b/src/main/java/org/opennars/web/multinar/NarNode.java index 210c34bc882cc3da35009c12d3af379ae9d066a5..08baafc61d46490e66aba00693ac27d1dc173227 100644 --- a/src/main/java/org/opennars/web/multinar/NarNode.java +++ b/src/main/java/org/opennars/web/multinar/NarNode.java @@ -44,7 +44,6 @@ public class NarNode extends Nar implements EventObserver { /* An extra event for received tasks*/ public class EventReceivedTask {} - public class EventReceivedNarsese {} /* The socket the Nar listens from */ private DatagramSocket receiveSocket; @@ -78,8 +77,7 @@ public class NarNode extends Nar implements EventObserver { THIS.memory.event.emit(EventReceivedTask.class, new Object[]{ret}); THIS.addInput((Task) ret, THIS); } else - if(ret instanceof String) { - THIS.memory.event.emit(EventReceivedNarsese.class, new Object[]{ret}); + if(ret instanceof String) { //emits IN.class anyway THIS.addInput((String) ret); } } @@ -145,7 +143,7 @@ public class NarNode extends Nar implements EventObserver { * @param t * @throws IOException */ - private void sendNarsese(String input, TargetNar target) throws IOException { + public static void sendNarsese(String input, TargetNar target) throws IOException { ByteArrayOutputStream bStream = new ByteArrayOutputStream(); ObjectOutput oo = new ObjectOutputStream(bStream); oo.writeObject(input); @@ -159,6 +157,9 @@ public class NarNode extends Nar implements EventObserver { //System.out.println("narsese sent:" + input); } } + public static void sendNarsese(String input, final String targetIP, final int targetPort, final float taskThreshold, Term mustContainTerm) throws IOException { + sendNarsese(input, new TargetNar(targetIP, targetPort, taskThreshold, mustContainTerm)); + } public static class TargetNar { diff --git a/src/test/java/NarNodeTest.java b/src/test/java/NarNodeTest.java index 521619f723f92ca892ff71d3d02a8841872c11a0..ac3702a77dadc0242a3d43014ce5d452b688eb32 100644 --- a/src/test/java/NarNodeTest.java +++ b/src/test/java/NarNodeTest.java @@ -21,40 +21,43 @@ import javax.xml.parsers.ParserConfigurationException; import org.junit.Test; import org.opennars.entity.Task; import org.opennars.io.events.EventEmitter; +import org.opennars.io.events.OutputHandler.IN; import org.opennars.web.multinar.NarNode; +import org.opennars.web.multinar.NarNode.TargetNar; import org.xml.sax.SAXException; public class NarNodeTest { static Integer a = 0; @Test - public void example1() throws UnknownHostException, IOException, SocketException, InstantiationException, InvocationTargetException, + public void testNarToNar() throws UnknownHostException, IOException, SocketException, InstantiationException, InvocationTargetException, NoSuchMethodException, ParserConfigurationException, IllegalAccessException, SAXException, ClassNotFoundException, ParseException, InterruptedException { int nar1port = 64001; int nar2port = 64002; String localIP = "127.0.0.1"; NarNode nar1 = new NarNode(nar1port); NarNode nar2 = new NarNode(nar2port); - nar1.addRedirectionTo(localIP, nar2port, 0.5f, null); - //nar2.connectTo(localIP, nar1port, 0.5f); + TargetNar nar2_connection = new TargetNar(localIP, nar2port, 0.5f, null); + nar1.addRedirectionTo(nar2_connection); nar2.event(new EventEmitter.EventObserver() { @Override public void event(Class event, Object[] args) { - if(event == NarNode.EventReceivedTask.class) { + if(event == NarNode.EventReceivedTask.class || event == IN.class) { Task task = (Task) args[0]; System.out.println("received task event triggered in nar2: " + task); - System.out.println("success"); synchronized(a) { a++; } } } - }, true, NarNode.EventReceivedTask.class); + }, true, NarNode.EventReceivedTask.class, IN.class); System.out.println("High priority task occurred in nar1"); + NarNode.sendNarsese("<{task1} --> [great]>.", nar2_connection); nar1.addInput("<{task1} --> [great]>."); while(true) { synchronized(a) { - if(a != 0) { + if(a == 2) { + System.out.println("success"); break; } }