Native Messaging WIP
authorBill Erickson <berickxx@gmail.com>
Wed, 9 Nov 2016 16:03:11 +0000 (11:03 -0500)
committerBill Erickson <berickxx@gmail.com>
Wed, 9 Nov 2016 16:03:11 +0000 (11:03 -0500)
Signed-off-by: Bill Erickson <berickxx@gmail.com>
src/org/evergreen_ils/hatch/MessageIO.java
src/org/evergreen_ils/hatch/RequestHandler.java
src/org/evergreen_ils/hatch/TestHatch.java [new file with mode: 0644]

index bda965b..d24ecb0 100644 (file)
@@ -97,11 +97,10 @@ public class MessageIO {
             int msgLength = bytesToInt(lenBytes);
 
             if (msgLength == 0) {
-                throw new IOException("Inbound message is 0 bytes.  Interrupted?");
+                throw new IOException(
+                    "Inbound message is 0 bytes.  I/O interrupted?");
             }
 
-            logger.info("MessageReader read message length: " + msgLength);
-
             byte[] msgBytes = new byte[msgLength];
 
             bytesRead = System.in.read(msgBytes);
@@ -112,7 +111,7 @@ public class MessageIO {
 
             String message = new String(msgBytes, "UTF-8");
 
-            logger.info("MessageReader read message " + message);
+            logger.info("MessageReader read: " + message);
 
             return message;
         }
@@ -150,7 +149,7 @@ public class MessageIO {
 
                 inQueue.offer(jsonMsg);
 
-                logger.info("inQueue contains " + inQueue.size() + " messages");
+                logger.finest("inQueue contains " + inQueue.size() + " messages");
             }
         }
     }
@@ -179,6 +178,7 @@ public class MessageIO {
          * Encodes and writes one message to STDOUT.
          */
         public void writeOneMessage(String message) throws IOException {
+            logger.finest("MessageWriter sending: " + message);
             System.out.write(intToBytes(message.length()));
             System.out.write(message.getBytes("UTF-8"));
             System.out.flush();
@@ -191,8 +191,6 @@ 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
index f60a6cc..d3d1221 100644 (file)
@@ -3,6 +3,10 @@ package org.evergreen_ils.hatch;
 import org.json.*;
 import java.util.logging.*;
 
+/**
+ * Dispatches requests received via MessageIO, sends responses back 
+ * via MessageIO.
+ */
 public class RequestHandler extends Thread {
     private MessageIO io;
     static final Logger logger = Hatch.getLogger();
@@ -11,6 +15,9 @@ public class RequestHandler extends Thread {
         io = new MessageIO();
     }
 
+    /**
+     * Unpack a JSON request and send it to the necessary Hatch handler.
+     */
     void dispatchRequest(JSONObject request) throws JSONException {
     
         long msgid = request.getLong("msgid");
@@ -23,6 +30,26 @@ public class RequestHandler extends Thread {
         boolean showDialog = request.optBoolean("showDialog");
 
         logger.info("Received message action: " + action);
+
+        JSONObject response = new JSONObject();
+
+        switch (action) {
+            
+            case "printers":
+                response.put("printers",
+                    new PrintManager().getPrintersAsMaps());
+                break;
+
+            case "print":
+                String content = request.getString("content");
+                String contentType = request.getString("contentType");
+                
+
+            default:
+                response.put("error", "Unknown action: " + action);
+        }
+
+        io.sendMessage(response);
     }
 
 
diff --git a/src/org/evergreen_ils/hatch/TestHatch.java b/src/org/evergreen_ils/hatch/TestHatch.java
new file mode 100644 (file)
index 0000000..73c1cf9
--- /dev/null
@@ -0,0 +1,57 @@
+package org.evergreen_ils.hatch;
+
+import java.util.logging.Logger;
+import org.json.*;
+
+public class TestHatch {
+    static MessageIO io;
+    static final Logger logger = Hatch.getLogger();
+
+    public static void rest() {
+        try {
+            Thread.sleep(1000);
+        } catch (InterruptedException e) {}
+    }
+
+    public static void doSends() {
+        int msgId = 1;
+
+        JSONObject obj = new JSONObject();
+        obj.put("msgid", msgId++);
+        obj.put("action", "printers");
+        io.sendMessage(obj);
+
+        rest();
+
+        obj = new JSONObject();
+        obj.put("msgid", msgId++);
+        obj.put("action", "print");
+        obj.put("contentType", "text/plain");
+        obj.put("content", "Hello, World!");
+        io.sendMessage(obj);
+
+        rest();
+    }
+
+    /**
+     * Log all received message as a JSON string
+     */
+    public static void doReceive() {
+        while (true) {
+            JSONObject resp = io.recvMessage();
+            logger.info("TestJSON:doReceive(): " + resp.toString());
+        }
+    }
+
+    public static void main (String[] args) {
+        io = new MessageIO();
+        io.listen();
+
+        if (args.length > 0 && args[0].equals("receive")) {
+            doReceive();
+        } else {
+            doSends();
+        }
+    }
+}
+