diff options
Diffstat (limited to 'jetty-websocket/javax-websocket-client-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/annotations/OnCloseCallable.java')
-rw-r--r-- | jetty-websocket/javax-websocket-client-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/annotations/OnCloseCallable.java | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/jetty-websocket/javax-websocket-client-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/annotations/OnCloseCallable.java b/jetty-websocket/javax-websocket-client-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/annotations/OnCloseCallable.java new file mode 100644 index 0000000000..f854aaa3b0 --- /dev/null +++ b/jetty-websocket/javax-websocket-client-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/annotations/OnCloseCallable.java @@ -0,0 +1,90 @@ +// +// ======================================================================== +// Copyright (c) 1995-2013 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== +// + +package org.eclipse.jetty.websocket.jsr356.annotations; + +import java.lang.reflect.Method; + +import javax.websocket.CloseReason; +import javax.websocket.CloseReason.CloseCodes; +import javax.websocket.Decoder; +import javax.websocket.OnClose; + +import org.eclipse.jetty.websocket.common.CloseInfo; +import org.eclipse.jetty.websocket.jsr356.JsrSession; +import org.eclipse.jetty.websocket.jsr356.annotations.Param.Role; + +/** + * Callable for {@link OnClose} annotated methods + */ +public class OnCloseCallable extends JsrCallable +{ + private int idxCloseReason = -1; + + public OnCloseCallable(Class<?> pojo, Method method) + { + super(pojo,method); + } + + public OnCloseCallable(OnCloseCallable copy) + { + super(copy); + this.idxCloseReason = copy.idxCloseReason; + } + + public void call(Object endpoint, CloseInfo close) + { + this.call(endpoint,close.getStatusCode(),close.getReason()); + } + + public void call(Object endpoint, CloseReason closeReason) + { + // Close Reason is an optional parameter + if (idxCloseReason >= 0) + { + // convert to javax.websocket.CloseReason + super.args[idxCloseReason] = closeReason; + } + super.call(endpoint,super.args); + } + + public void call(Object endpoint, int statusCode, String reason) + { + // Close Reason is an optional parameter + if (idxCloseReason >= 0) + { + // convert to javax.websocket.CloseReason + CloseReason jsrclose = new CloseReason(CloseCodes.getCloseCode(statusCode),reason); + super.args[idxCloseReason] = jsrclose; + } + super.call(endpoint,super.args); + } + + @Override + public void init(JsrSession session) + { + idxCloseReason = findIndexForRole(Role.CLOSE_REASON); + super.init(session); + } + + @Override + public void setDecoderClass(Class<? extends Decoder> decoderClass) + { + /* ignore, not relevant for onClose */ + } +} |