diff --git a/src/main/java/org/arl/fjage/remote/ConnectionHandler.java b/src/main/java/org/arl/fjage/remote/ConnectionHandler.java index 22b4f96d..92a3eef3 100644 --- a/src/main/java/org/arl/fjage/remote/ConnectionHandler.java +++ b/src/main/java/org/arl/fjage/remote/ConnectionHandler.java @@ -38,6 +38,8 @@ class ConnectionHandler extends Thread { private Logger log = Logger.getLogger(getClass().getName()); private RemoteContainer container; private boolean alive, keepAlive; + private ExecutorService pool = Executors.newSingleThreadExecutor(); + public ConnectionHandler(Connector conn, RemoteContainer container) { this.conn = conn; @@ -49,7 +51,6 @@ public ConnectionHandler(Connector conn, RemoteContainer container) { @Override public void run() { - ExecutorService pool = Executors.newSingleThreadExecutor(); BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); out = new DataOutputStream(conn.getOutputStream()); if (keepAlive) println(ALIVE); @@ -149,6 +150,10 @@ synchronized void println(String s) { } } + void printlnQueued(String s) { + if (pool != null) pool.execute(() -> println(s)); + } + JsonMessage printlnAndGetResponse(String s, String id, long timeout) { if (conn == null) return null; if (keepAlive && !alive && container instanceof MasterContainer) return null; diff --git a/src/main/java/org/arl/fjage/remote/MasterContainer.java b/src/main/java/org/arl/fjage/remote/MasterContainer.java index 738730e9..e4191c6a 100644 --- a/src/main/java/org/arl/fjage/remote/MasterContainer.java +++ b/src/main/java/org/arl/fjage/remote/MasterContainer.java @@ -211,7 +211,7 @@ public boolean send(Message m, boolean relay) { if (needsCleanup) cleanupSlaves(); synchronized(slaves) { for (ConnectionHandler slave: slaves) - slave.println(json); + slave.printlnQueued(json); } return true; }