From: Bill Erickson Date: Mon, 7 Nov 2016 23:13:15 +0000 (-0500) Subject: stdin/stdout stream based hatch WIP X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=7cb3168eb4efb1da6f1208474f2bfafd90af4afe;p=working%2Frandom.git stdin/stdout stream based hatch WIP Signed-off-by: Bill Erickson --- diff --git a/README b/README index 733d9f1de..72a3f08b5 100644 --- a/README +++ b/README @@ -8,8 +8,8 @@ Hatch - Java Print / Storage / Etc Service % ln -s jdk1.8.0_25 jdk1.8 % mkdir lib -Download javax.json-api jar file from -http://search.maven.org/remotecontent?filepath=javax/json/javax.json-api/1.0/javax.json-api-1.0.jar +Download org.json jar from and place into lib (modify run.sh CP) +https://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22org.json%22%20AND%20a%3A%22json%22 # compile % ./run.sh diff --git a/run.sh b/run.sh index 1433313f0..34001076d 100755 --- a/run.sh +++ b/run.sh @@ -1,5 +1,5 @@ JAVA_HOME=jdk1.8 -CP=lib:lib/javax.json-api-1.0.jar +CP=lib:lib/json-20160810.jar # compile $JAVA_HOME/bin/javac -cp $CP -d lib src/org/evergreen_ils/hatch/*.java diff --git a/src/org/evergreen_ils/hatch/MessageIO.java b/src/org/evergreen_ils/hatch/MessageIO.java index e040b27aa..45739e3d1 100644 --- a/src/org/evergreen_ils/hatch/MessageIO.java +++ b/src/org/evergreen_ils/hatch/MessageIO.java @@ -3,13 +3,14 @@ package org.evergreen_ils.hatch; import java.util.logging.*; import java.util.concurrent.LinkedBlockingQueue; import java.nio.ByteBuffer; -import javax.json.*; import java.io.IOException; +import org.json.*; + public class MessageIO { - private LinkedBlockingQueue inQueue; - private LinkedBlockingQueue outQueue; + private LinkedBlockingQueue inQueue; + private LinkedBlockingQueue outQueue; //private static Logger logger = Logger.getLogger("org.evergreen_ils.hatch"); private static Logger logger = Hatch.getLogger(); @@ -17,8 +18,8 @@ public class MessageIO { private MessageWriter writer; public MessageIO() { - inQueue = new LinkedBlockingQueue(); - outQueue = new LinkedBlockingQueue(); + inQueue = new LinkedBlockingQueue(); + outQueue = new LinkedBlockingQueue(); reader = new MessageReader(); writer = new MessageWriter(); } @@ -37,8 +38,8 @@ public class MessageIO { return (bytes[3] << 24) & 0xff000000 | (bytes[2] << 16) & 0x00ff0000 - | (bytes[1] << 8) & 0x0000ff00 - | (bytes[0] << 0) & 0x000000ff; + | (bytes[1] << 8) & 0x0000ff00 + | (bytes[0] << 0) & 0x000000ff; } private String readOneMessage() throws EndOfStreamException, IOException { @@ -76,23 +77,34 @@ public class MessageIO { while (true) { + String message = ""; + JSONObject jsonMsg = null; + try { - String message = readOneMessage(); + message = readOneMessage(); + jsonMsg = new JSONObject(message); } catch (EndOfStreamException eose) { - logger.warning("STDIN closed. MessageReader thread exiting"); - return; + logger.warning("STDIN closed... exiting"); + System.exit(1); } catch (IOException ioe) { - logger.warning(ioe); + logger.warning(ioe.toString()); + + } catch (JSONException je) { + + logger.warning("Error parsing JSON message on STDIN " + + je.toString() + " : " + message); + + continue; } - // TODO: convert to JSON - // TODO: push onto inQueue + inQueue.offer(jsonMsg); + + logger.info("inQueue contains " + inQueue.size() + " messages"); } - } } @@ -107,9 +119,7 @@ public class MessageIO { return bytes; } - public void writeOneMessage(String message) throws IOException { - System.out.write(intToBytes(message.length())); System.out.write(message.getBytes("UTF-8")); System.out.flush(); @@ -117,7 +127,25 @@ public class MessageIO { public void run() { + while (true) { + logger.info("MessageWriter waiting for outQueue message"); + + try { + + // take() blocks the thread until a message is available + JSONObject jsonMsg = outQueue.take(); + + writeOneMessage(jsonMsg.toString()); + + } catch (InterruptedException e) { + // interrupted, go back and listen + continue; + } catch (IOException ioe) { + logger.warning( + "Error writing message to STDOUT: " + ioe.toString()); + } + } } } - } +