From 0d4edee857cc12f1abe1bf05e1e0d1d99c23e698 Mon Sep 17 00:00:00 2001 From: nconfrey Date: Tue, 23 Jun 2015 12:33:04 -0400 Subject: [PATCH 1/6] added access to the client list with new get methods. also added getClientAt, which uses an index to find a specific client --- .../net/src/processing/net/Server.java | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/java/libraries/net/src/processing/net/Server.java b/java/libraries/net/src/processing/net/Server.java index 8edc6cd9c1..4fe70a717f 100644 --- a/java/libraries/net/src/processing/net/Server.java +++ b/java/libraries/net/src/processing/net/Server.java @@ -168,7 +168,7 @@ protected void addClient(Client client) { } - protected int clientIndex(Client client) { + public int clientIndex(Client client) { for (int i = 0; i < clientCount; i++) { if (clients[i] == client) { return i; @@ -239,6 +239,26 @@ public Client available() { return null; } + /* + * Contrib: Nick + * Return a specific client based on its index + */ + public Client getClientAt(int index){ + Client client = clients[index]; + if (!client.active()){ + removeIndex(index); //remove the dead client + } + return client; + } + + public Client[] getClientList(){ + return clients; + } + + public int getClientListLength(){ + return clientCount; + } + /** * ( begin auto-generated from Server_stop.xml ) From 2c1e6fd11afde5eeb198fe3945dc02458486e6c0 Mon Sep 17 00:00:00 2001 From: nconfrey Date: Wed, 24 Jun 2015 10:02:58 -0400 Subject: [PATCH 2/6] the getters now check for disconnected clients and update the clientList number. next step is to make a disconnect event so that the server knows which exact client disconnected --- java/libraries/net/src/processing/net/Server.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/java/libraries/net/src/processing/net/Server.java b/java/libraries/net/src/processing/net/Server.java index 4fe70a717f..0168b277d9 100644 --- a/java/libraries/net/src/processing/net/Server.java +++ b/java/libraries/net/src/processing/net/Server.java @@ -251,11 +251,26 @@ public Client getClientAt(int index){ return client; } + //make sure that all the clients are still connected + //if not, send a disconnect event + protected void checkClients() + { + for (int i = 0; i < clientCount; i++) { + if (!clients[i].active()){ + removeIndex(i); //Remove dead client - also updates clientCount + } + } + } + public Client[] getClientList(){ + //first check to see if there are any dead clients + checkClients(); return clients; } public int getClientListLength(){ + //first check if there are dead clients + checkClients(); return clientCount; } From a438c9a47d9671f3535415d9134513a61f6546ba Mon Sep 17 00:00:00 2001 From: nconfrey Date: Wed, 24 Jun 2015 11:28:09 -0400 Subject: [PATCH 3/6] event handler now sends disconnect events --- .../net/src/processing/net/Server.java | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/java/libraries/net/src/processing/net/Server.java b/java/libraries/net/src/processing/net/Server.java index 0168b277d9..9dc46f8b15 100644 --- a/java/libraries/net/src/processing/net/Server.java +++ b/java/libraries/net/src/processing/net/Server.java @@ -101,7 +101,8 @@ public Server(PApplet parent, int port, String host) { serverEventMethod = parent.getClass().getMethod("serverEvent", new Class[] { Server.class, - Client.class }); + Client.class, + String.class }); } catch (Exception e) { // no such method, or an error.. which is fine, just ignore } @@ -114,6 +115,19 @@ public Server(PApplet parent, int port, String host) { } } + //Send a disconnect to the event handler, if it exists + protected void disconnectEvent(Client client){ + if (serverEventMethod != null) { + try { + //TODO: using a String for eventType now. Should change over to a event object? + serverEventMethod.invoke(parent, new Object[] { this, client, "disconnect"}); + } catch (Exception e) { + System.err.println("Disabling serverEvent() for port " + port); + e.printStackTrace(); + serverEventMethod = null; + } + } + } /** * ( begin auto-generated from Server_disconnect.xml ) @@ -135,6 +149,8 @@ public void disconnect(Client client) { protected void removeIndex(int index) { + //First send a disconnect event + disconnectEvent(clients[index]); clientCount--; // shift down the remaining clients for (int i = index; i < clientCount; i++) { @@ -326,7 +342,7 @@ public void run() { addClient(client); if (serverEventMethod != null) { try { - serverEventMethod.invoke(parent, new Object[] { this, client }); + serverEventMethod.invoke(parent, new Object[] { this, client, "connect"}); } catch (Exception e) { System.err.println("Disabling serverEvent() for port " + port); e.printStackTrace(); From 4ad78d002cc5ddc40c60979c30a083645edb0598 Mon Sep 17 00:00:00 2001 From: nconfrey Date: Mon, 29 Jun 2015 11:35:19 -0400 Subject: [PATCH 4/6] shortened network function names to be more inline with processing syntax --- java/libraries/net/src/processing/net/Server.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/java/libraries/net/src/processing/net/Server.java b/java/libraries/net/src/processing/net/Server.java index 9dc46f8b15..7ed578b8e2 100644 --- a/java/libraries/net/src/processing/net/Server.java +++ b/java/libraries/net/src/processing/net/Server.java @@ -256,13 +256,13 @@ public Client available() { } /* - * Contrib: Nick * Return a specific client based on its index */ - public Client getClientAt(int index){ + public Client getClient(int index){ Client client = clients[index]; if (!client.active()){ removeIndex(index); //remove the dead client + return null; } return client; } @@ -278,13 +278,13 @@ protected void checkClients() } } - public Client[] getClientList(){ + public Client[] getClients(){ //first check to see if there are any dead clients checkClients(); return clients; } - public int getClientListLength(){ + public int numClients(){ //first check if there are dead clients checkClients(); return clientCount; From 35a62152f4f54e551c15b7dd5423f3e2cd37c35b Mon Sep 17 00:00:00 2001 From: nconfrey Date: Fri, 3 Jul 2015 14:40:10 -0400 Subject: [PATCH 5/6] Seperated out disconnects into their own server method, to not break old code --- .../net/src/processing/net/Server.java | 29 +++++++++++++------ 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/java/libraries/net/src/processing/net/Server.java b/java/libraries/net/src/processing/net/Server.java index 7ed578b8e2..f62d99e70b 100644 --- a/java/libraries/net/src/processing/net/Server.java +++ b/java/libraries/net/src/processing/net/Server.java @@ -51,6 +51,7 @@ public class Server implements Runnable { PApplet parent; Method serverEventMethod; + Method serverDisconnectMethod; Thread thread; ServerSocket server; @@ -101,12 +102,22 @@ public Server(PApplet parent, int port, String host) { serverEventMethod = parent.getClass().getMethod("serverEvent", new Class[] { Server.class, - Client.class, - String.class }); + Client.class }); } catch (Exception e) { // no such method, or an error.. which is fine, just ignore } + //Now checking if a method exists for a disconnect event + //Different than a connection event so we don't break old code/examples + try { + serverDisconnectMethod = + parent.getClass().getMethod("serverDisconnectEvent", + new Class[] { Server.class, + Client.class }); + } catch (Exception e) { + // no such method, or an error.. which is fine, just ignore + } + } catch (IOException e) { //e.printStackTrace(); thread = null; @@ -119,12 +130,11 @@ public Server(PApplet parent, int port, String host) { protected void disconnectEvent(Client client){ if (serverEventMethod != null) { try { - //TODO: using a String for eventType now. Should change over to a event object? - serverEventMethod.invoke(parent, new Object[] { this, client, "disconnect"}); + serverDisconnectMethod.invoke(parent, new Object[] { this, client }); } catch (Exception e) { - System.err.println("Disabling serverEvent() for port " + port); + System.err.println("Disabling serverDisconnectEvent() for port " + port); e.printStackTrace(); - serverEventMethod = null; + serverDisconnectMethod = null; } } } @@ -140,6 +150,9 @@ protected void disconnectEvent(Client client){ * @param client the client to disconnect */ public void disconnect(Client client) { + //First send a disconnect event + disconnectEvent(client); + client.stop(); int index = clientIndex(client); if (index != -1) { @@ -149,8 +162,6 @@ public void disconnect(Client client) { protected void removeIndex(int index) { - //First send a disconnect event - disconnectEvent(clients[index]); clientCount--; // shift down the remaining clients for (int i = index; i < clientCount; i++) { @@ -342,7 +353,7 @@ public void run() { addClient(client); if (serverEventMethod != null) { try { - serverEventMethod.invoke(parent, new Object[] { this, client, "connect"}); + serverEventMethod.invoke(parent, new Object[] { this, client }); } catch (Exception e) { System.err.println("Disabling serverEvent() for port " + port); e.printStackTrace(); From bf9d2f86be1e1975d1e78688a7305e59fe61f789 Mon Sep 17 00:00:00 2001 From: nconfrey Date: Fri, 3 Jul 2015 15:02:24 -0400 Subject: [PATCH 6/6] disconnection event now fires --- java/libraries/net/src/processing/net/Server.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/java/libraries/net/src/processing/net/Server.java b/java/libraries/net/src/processing/net/Server.java index f62d99e70b..1acd4a6074 100644 --- a/java/libraries/net/src/processing/net/Server.java +++ b/java/libraries/net/src/processing/net/Server.java @@ -150,9 +150,6 @@ protected void disconnectEvent(Client client){ * @param client the client to disconnect */ public void disconnect(Client client) { - //First send a disconnect event - disconnectEvent(client); - client.stop(); int index = clientIndex(client); if (index != -1) { @@ -162,6 +159,8 @@ public void disconnect(Client client) { protected void removeIndex(int index) { + //First send a disconnect event + disconnectEvent(clients[index]); clientCount--; // shift down the remaining clients for (int i = index; i < clientCount; i++) {