diff --git a/src/main/java/org/opennars/web/multinar/NarNode.java b/src/main/java/org/opennars/web/multinar/NarNode.java index a8ac05d42d6060f8bbe7eeeb6af965a2b08e6630..8439cd0a2e67362af2fc2ede91abefa33d223352 100644 --- a/src/main/java/org/opennars/web/multinar/NarNode.java +++ b/src/main/java/org/opennars/web/multinar/NarNode.java @@ -44,6 +44,7 @@ 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; @@ -71,10 +72,16 @@ public class NarNode extends Nar implements EventObserver { public void run() { for(;;) { try { - Task ret = THIS.receiveTask(); + Object ret = THIS.receiveObject(); if(ret != null) { - THIS.memory.event.emit(EventReceivedTask.class, new Object[]{ret}); - THIS.addInput(ret, THIS); + if(ret instanceof Task) { + 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}); + THIS.addInput(ret); + } } } catch (IOException ex) { Logger.getLogger(NarNode.class.getName()).log(Level.SEVERE, null, ex); @@ -131,6 +138,27 @@ public class NarNode extends Nar implements EventObserver { } } } + + /** + * Send Narsese that contains the optional mustContainTerm + * + * @param t + * @throws IOException + */ + private void sendNarsese(String input, TargetNar target) throws IOException { + ByteArrayOutputStream bStream = new ByteArrayOutputStream(); + ObjectOutput oo = new ObjectOutputStream(bStream); + oo.writeObject(input); + oo.close(); + byte[] serializedMessage = bStream.toByteArray(); + boolean searchTerm = target.mustContainTerm != null; + boolean containsFound = searchTerm && input.contains(target.mustContainTerm.toString()); + if(!searchTerm || containsFound) { + DatagramPacket packet = new DatagramPacket(serializedMessage, serializedMessage.length, target.targetAddress, target.targetPort); + target.sendSocket.send(packet); + //System.out.println("narsese sent:" + input); + } + } public class TargetNar { @@ -180,15 +208,14 @@ public class NarNode extends Nar implements EventObserver { * @throws IOException * @throws ClassNotFoundException */ - private Task receiveTask() throws IOException, ClassNotFoundException { + private Object receiveObject() throws IOException, ClassNotFoundException { byte[] recBytes = new byte[100000]; DatagramPacket packet = new DatagramPacket(recBytes, recBytes.length); receiveSocket.receive(packet); ObjectInputStream iStream = new ObjectInputStream(new ByteArrayInputStream(recBytes)); - Task T = (Task) iStream.readObject(); - //System.out.println("task received: " + T); + Object msg = iStream.readObject(); iStream.close(); - return T; + return msg; }