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.client;
20
21 import javax.websocket.ClientEndpoint;
22 import javax.websocket.ClientEndpointConfig;
23 import javax.websocket.DeploymentException;
24
25 import org.eclipse.jetty.websocket.api.WebSocketPolicy;
26 import org.eclipse.jetty.websocket.common.events.EventDriver;
27 import org.eclipse.jetty.websocket.common.events.EventDriverImpl;
28 import org.eclipse.jetty.websocket.jsr356.annotations.JsrEvents;
29 import org.eclipse.jetty.websocket.jsr356.endpoints.EndpointInstance;
30 import org.eclipse.jetty.websocket.jsr356.endpoints.JsrAnnotatedEventDriver;
31
32
33
34
35 public class JsrClientEndpointImpl implements EventDriverImpl
36 {
37 @Override
38 public EventDriver create(Object websocket, WebSocketPolicy policy) throws DeploymentException
39 {
40 if (!(websocket instanceof EndpointInstance))
41 {
42 throw new IllegalStateException(String.format("Websocket %s must be an %s",websocket.getClass().getName(),EndpointInstance.class.getName()));
43 }
44
45 EndpointInstance ei = (EndpointInstance)websocket;
46 AnnotatedClientEndpointMetadata metadata = (AnnotatedClientEndpointMetadata)ei.getMetadata();
47 JsrEvents<ClientEndpoint, ClientEndpointConfig> events = new JsrEvents<>(metadata);
48
49 return new JsrAnnotatedEventDriver(policy,ei,events);
50 }
51
52 @Override
53 public String describeRule()
54 {
55 return "class is annotated with @" + ClientEndpoint.class.getName();
56 }
57
58 @Override
59 public boolean supports(Object websocket)
60 {
61 if (!(websocket instanceof EndpointInstance))
62 {
63 return false;
64 }
65
66 EndpointInstance ei = (EndpointInstance)websocket;
67 Object endpoint = ei.getEndpoint();
68
69 ClientEndpoint anno = endpoint.getClass().getAnnotation(ClientEndpoint.class);
70 return (anno != null);
71 }
72 }