Author: markt Date: Thu Mar 7 23:27:12 2013 New Revision: 1454166 URL: http://svn.apache.org/r1454166 Log: Better unwrapping of messages Start to add plumbing for decoding
Modified: tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerWholeBase.java tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerWholeBinary.java tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerWholePong.java tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerWholeText.java Modified: tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerWholeBase.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerWholeBase.java?rev=1454166&r1=1454165&r2=1454166&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerWholeBase.java (original) +++ tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerWholeBase.java Thu Mar 7 23:27:12 2013 @@ -42,15 +42,29 @@ public abstract class PojoMessageHandler @Override public final void onMessage(T message) { + + // Can this message be decoded? + Object payload = decode(message); + + if (payload == null) { + // Not decoded. Unwrap if required. Unwrap only ever applies to + // ByteBuffers + if (unwrap) { + ByteBuffer bb = (ByteBuffer) message; + byte[] array = new byte[bb.remaining()]; + bb.get(array); + payload = array; + } else { + payload = message; + } + } + Object[] parameters = params.clone(); if (indexSession != -1) { parameters[indexSession] = session; } - if (unwrap) { - parameters[indexPayload] = ((ByteBuffer) message).array(); - } else { - parameters[indexPayload] = message; - } + parameters[indexPayload] = payload; + Object result; try { result = method.invoke(pojo, parameters); @@ -59,4 +73,7 @@ public abstract class PojoMessageHandler } processResult(result); } + + + protected abstract Object decode(T message); } Modified: tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerWholeBinary.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerWholeBinary.java?rev=1454166&r1=1454165&r2=1454166&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerWholeBinary.java (original) +++ tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerWholeBinary.java Thu Mar 7 23:27:12 2013 @@ -32,4 +32,10 @@ public class PojoMessageHandlerWholeBina int indexSession) { super(pojo, method, session, params, indexPayload, unwrap, indexSession); } + + @Override + protected Object decode(ByteBuffer message) { + // TODO Not implemented + return null; + } } Modified: tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerWholePong.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerWholePong.java?rev=1454166&r1=1454165&r2=1454166&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerWholePong.java (original) +++ tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerWholePong.java Thu Mar 7 23:27:12 2013 @@ -32,4 +32,10 @@ public class PojoMessageHandlerWholePong int indexSession) { super(pojo, method, session, params, indexPayload, unwrap, indexSession); } + + @Override + protected Object decode(PongMessage message) { + // Never decoded + return null; + } } Modified: tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerWholeText.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerWholeText.java?rev=1454166&r1=1454165&r2=1454166&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerWholeText.java (original) +++ tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerWholeText.java Thu Mar 7 23:27:12 2013 @@ -32,4 +32,10 @@ public class PojoMessageHandlerWholeText super(pojo, method, session, params, indexPayload, unwrap, indexSession); } + + @Override + protected Object decode(String message) { + // TODO Auto-generated method stub + return null; + } } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org