From 0b50a98219a691b73dfc85a580614ae4138d45cc Mon Sep 17 00:00:00 2001 From: Kyle Feuz Date: Fri, 18 Apr 2014 01:42:54 -0700 Subject: [PATCH 1/2] Implements disconnectEvent for the Server code as requested in Issue #2133 --- java/libraries/net/src/processing/net/Client.java | 11 +++++++++++ java/libraries/net/src/processing/net/Server.java | 6 +++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/java/libraries/net/src/processing/net/Client.java b/java/libraries/net/src/processing/net/Client.java index 18867e5dc..a93baa838 100644 --- a/java/libraries/net/src/processing/net/Client.java +++ b/java/libraries/net/src/processing/net/Client.java @@ -118,6 +118,7 @@ public class Client implements Runnable { * @throws IOException */ public Client(PApplet parent, Socket socket) throws IOException { + this.parent = parent; this.socket = socket; input = socket.getInputStream(); @@ -125,6 +126,16 @@ public class Client implements Runnable { thread = new Thread(this); thread.start(); + + // reflection to check whether host sketch has a call for + // public void disconnectEvent(processing.net.Client) + try { + disconnectEventMethod = + parent.getClass().getMethod("disconnectEvent", + new Class[] { Client.class }); + } catch (Exception e) { + // no such method, or an error.. which is fine, just ignore + } } diff --git a/java/libraries/net/src/processing/net/Server.java b/java/libraries/net/src/processing/net/Server.java index 12b73a71b..cdc81a386 100644 --- a/java/libraries/net/src/processing/net/Server.java +++ b/java/libraries/net/src/processing/net/Server.java @@ -109,7 +109,11 @@ public class Server implements Runnable { * @param client the client to disconnect */ public void disconnect(Client client) { - //client.stop(); + //Calling client.stop() here would cause duplicate + //calls to disconnectEvent in the containing sketch, + //once for the stop() and once for the terminated connection. + //Instead just dispose of the client and let the terminated + //connection generate the disconnectEvent message; client.dispose(); int index = clientIndex(client); if (index != -1) { From fca59082a8068be5f627ee6c3878a2205da312c9 Mon Sep 17 00:00:00 2001 From: Kyle Feuz Date: Fri, 18 Apr 2014 15:48:14 -0700 Subject: [PATCH 2/2] Fixed missing disconnect for some clients --- java/libraries/net/src/processing/net/Client.java | 2 +- java/libraries/net/src/processing/net/Server.java | 11 +++-------- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/java/libraries/net/src/processing/net/Client.java b/java/libraries/net/src/processing/net/Client.java index a93baa838..de39b6e9f 100644 --- a/java/libraries/net/src/processing/net/Client.java +++ b/java/libraries/net/src/processing/net/Client.java @@ -151,7 +151,7 @@ public class Client implements Runnable { * @usage application */ public void stop() { - if (disconnectEventMethod != null) { + if (disconnectEventMethod != null && thread != null){ try { disconnectEventMethod.invoke(parent, new Object[] { this }); } catch (Exception e) { diff --git a/java/libraries/net/src/processing/net/Server.java b/java/libraries/net/src/processing/net/Server.java index cdc81a386..bbf116917 100644 --- a/java/libraries/net/src/processing/net/Server.java +++ b/java/libraries/net/src/processing/net/Server.java @@ -109,12 +109,7 @@ public class Server implements Runnable { * @param client the client to disconnect */ public void disconnect(Client client) { - //Calling client.stop() here would cause duplicate - //calls to disconnectEvent in the containing sketch, - //once for the stop() and once for the terminated connection. - //Instead just dispose of the client and let the terminated - //connection generate the disconnectEvent message; - client.dispose(); + client.stop(); int index = clientIndex(client); if (index != -1) { removeIndex(index); @@ -220,8 +215,8 @@ public class Server implements Runnable { thread = null; if (clients != null) { - for (int i = 0; i < clientCount; i++) { - disconnect(clients[i]); + while(clientCount>0){ + disconnect(clients[0]); } clientCount = 0; clients = null;