1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.eclipse.jetty.websocket.jsr356.annotations;
20
21 import java.lang.reflect.Method;
22
23 import javax.websocket.CloseReason;
24 import javax.websocket.CloseReason.CloseCodes;
25 import javax.websocket.Decoder;
26
27 import org.eclipse.jetty.websocket.common.CloseInfo;
28 import org.eclipse.jetty.websocket.jsr356.JsrSession;
29 import org.eclipse.jetty.websocket.jsr356.annotations.Param.Role;
30
31
32
33
34 public class OnCloseCallable extends JsrCallable
35 {
36 private int idxCloseReason = -1;
37
38 public OnCloseCallable(Class<?> pojo, Method method)
39 {
40 super(pojo,method);
41 }
42
43 public OnCloseCallable(OnCloseCallable copy)
44 {
45 super(copy);
46 this.idxCloseReason = copy.idxCloseReason;
47 }
48
49 public void call(Object endpoint, CloseInfo close)
50 {
51 this.call(endpoint,close.getStatusCode(),close.getReason());
52 }
53
54 public void call(Object endpoint, CloseReason closeReason)
55 {
56
57 if (idxCloseReason >= 0)
58 {
59
60 super.args[idxCloseReason] = closeReason;
61 }
62 super.call(endpoint,super.args);
63 }
64
65 public void call(Object endpoint, int statusCode, String reason)
66 {
67
68 if (idxCloseReason >= 0)
69 {
70
71 CloseReason jsrclose = new CloseReason(CloseCodes.getCloseCode(statusCode),reason);
72 super.args[idxCloseReason] = jsrclose;
73 }
74 super.call(endpoint,super.args);
75 }
76
77 @Override
78 public void init(JsrSession session)
79 {
80 idxCloseReason = findIndexForRole(Role.CLOSE_REASON);
81 super.init(session);
82 }
83
84 @Override
85 public void setDecoderClass(Class<? extends Decoder> decoderClass)
86 {
87
88 }
89 }