From 99f59a6a4c807f22d4da23711c515d69e9e4f3b9 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Thu, 9 Oct 2014 19:06:19 -0700 Subject: [PATCH] GUAC-442: Add annotation-driven onMessage() as well - Jetty will not call MessageHandler.onMessage() at least when annotations are used. Not sure if this is different for programmatically-loaded endpoints. --- .../jsr/GuacamoleWebSocketTunnelEndpoint.java | 38 ++++++++++++------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/websocket/jsr/GuacamoleWebSocketTunnelEndpoint.java b/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/websocket/jsr/GuacamoleWebSocketTunnelEndpoint.java index a2aaaae63..6801370fc 100644 --- a/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/websocket/jsr/GuacamoleWebSocketTunnelEndpoint.java +++ b/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/websocket/jsr/GuacamoleWebSocketTunnelEndpoint.java @@ -28,6 +28,9 @@ import javax.websocket.CloseReason.CloseCode; import javax.websocket.Endpoint; import javax.websocket.EndpointConfig; import javax.websocket.MessageHandler; +import javax.websocket.OnClose; +import javax.websocket.OnMessage; +import javax.websocket.OnOpen; import javax.websocket.RemoteEndpoint; import javax.websocket.Session; import org.glyptodon.guacamole.GuacamoleException; @@ -100,6 +103,7 @@ public abstract class GuacamoleWebSocketTunnelEndpoint extends Endpoint { protected abstract GuacamoleTunnel createTunnel(Session session, EndpointConfig config) throws GuacamoleException; @Override + @OnOpen public void onOpen(final Session session, EndpointConfig config) { try { @@ -118,27 +122,17 @@ public abstract class GuacamoleWebSocketTunnelEndpoint extends Endpoint { return; } - // Return new WebSocket which communicates through tunnel + // Manually register message handler session.addMessageHandler(new MessageHandler.Whole() { @Override public void onMessage(String message) { - - GuacamoleWriter writer = tunnel.acquireWriter(); - - // Write received message - try { - writer.write(message.toCharArray()); - } - catch (GuacamoleException e) { - logger.debug("Tunnel write failed.", e); - } - - tunnel.releaseWriter(); + GuacamoleWebSocketTunnelEndpoint.this.onMessage(message); } }); + // Prepare read transfer thread Thread readThread = new Thread() { /** @@ -201,7 +195,25 @@ public abstract class GuacamoleWebSocketTunnelEndpoint extends Endpoint { } + @OnMessage + public void onMessage(String message) { + + GuacamoleWriter writer = tunnel.acquireWriter(); + + try { + // Write received message + writer.write(message.toCharArray()); + } + catch (GuacamoleException e) { + logger.debug("Tunnel write failed.", e); + } + + tunnel.releaseWriter(); + + } + @Override + @OnClose public void onClose(Session session, CloseReason closeReason) { try {