public WebSocketServerFactory(WebSocketPolicy policy, ByteBufferPool bufferPool) { addBean(scheduler); addBean(bufferPool); this.registeredSocketClasses = new ArrayList<>(); this.basePolicy = policy; this.eventDriverFactory = new EventDriverFactory(basePolicy); this.extensionFactory = new WebSocketExtensionFactory(basePolicy,bufferPool); this.creator = this; // Create supportedVersions List<Integer> versions = new ArrayList<>(); for (int v : handshakes.keySet()) { versions.add(v); } Collections.sort(versions,Collections.reverseOrder()); // newest first StringBuilder rv = new StringBuilder(); for (int v : versions) { if (rv.length() > 0) { rv.append(", "); } rv.append(v); } supportedVersions = rv.toString(); }
public EventDriverFactory(WebSocketContainerScope containerScope) { this.containerScope = containerScope; this.implementations = new ArrayList<>(); addImplementation(new JettyListenerImpl()); addImplementation(new JettyAnnotatedImpl()); }
private boolean isSignatureMatch(Method method, ParamList validParams) { assertIsPublicNonStatic(method); assertIsReturn(method,Void.TYPE); // validate parameters Class<?> actual[] = method.getParameterTypes(); for (Class<?>[] params : validParams) { if (isSameParameters(actual,params)) { return true; } } return false; }
assertValidSignature(method,OnWebSocketConnect.class,validConnectParams); assertUnset(events.onConnect,OnWebSocketConnect.class,method); events.onConnect = new EventMethod(pojo,method); continue; if (isSignatureMatch(method,validTextParams)) assertUnset(events.onText,OnWebSocketMessage.class,method); events.onText = new EventMethod(pojo,method); continue; if (isSignatureMatch(method,validBinaryParams)) assertUnset(events.onBinary,OnWebSocketMessage.class,method); events.onBinary = new EventMethod(pojo,method); continue; assertValidSignature(method,OnWebSocketClose.class,validCloseParams); assertUnset(events.onClose,OnWebSocketClose.class,method); events.onClose = new EventMethod(pojo,method); continue; assertValidSignature(method,OnWebSocketError.class,validErrorParams); assertUnset(events.onError,OnWebSocketError.class,method); events.onError = new EventMethod(pojo,method); continue; assertValidSignature(method,OnWebSocketFrame.class,validFrameParams); assertUnset(events.onFrame,OnWebSocketFrame.class,method);
this.localEndpoint = this.wsClient.getEventDriverFactory().wrap(localEndpoint);
public static ServerContainer configureContext(final MutableServletContextHandler context, final MetricRegistry metrics) throws ServletException { WebSocketUpgradeFilter filter = WebSocketUpgradeFilter.configureContext(context); NativeWebSocketConfiguration wsConfig = filter.getConfiguration(); ServerContainer wsContainer = new ServerContainer(wsConfig, context.getServer().getThreadPool()); EventDriverFactory edf = wsConfig.getFactory().getEventDriverFactory(); edf.clearImplementations(); edf.addImplementation(new InstJsrServerEndpointImpl(metrics)); edf.addImplementation(new InstJsrServerExtendsEndpointImpl(metrics)); context.addBean(wsContainer); context.setAttribute(javax.websocket.server.ServerContainer.class.getName(), wsContainer); context.setAttribute(WebSocketUpgradeFilter.class.getName(), filter); return wsContainer; } }
public EventMethods getMethods(Class<?> pojo) throws InvalidWebSocketException { if (pojo == null) { throw new InvalidWebSocketException("Cannot get methods for null class"); } if (cache.containsKey(pojo)) { return cache.get(pojo); } EventMethods methods = discoverMethods(pojo); if (methods == null) { return null; } cache.put(pojo,methods); return methods; }
EventMethods methods = getMethods(websocket.getClass()); if (methods != null)
EventDriver driver = eventDriverFactory.wrap(websocket);
assertValidSignature(method,OnWebSocketConnect.class,validConnectParams); assertUnset(events.onConnect,OnWebSocketConnect.class,method); events.onConnect = new EventMethod(pojo,method); continue; if (isSignatureMatch(method,validTextParams)) assertUnset(events.onText,OnWebSocketMessage.class,method); events.onText = new EventMethod(pojo,method); continue; if (isSignatureMatch(method,validBinaryParams)) assertUnset(events.onBinary,OnWebSocketMessage.class,method); events.onBinary = new EventMethod(pojo,method); continue; assertValidSignature(method,OnWebSocketClose.class,validCloseParams); assertUnset(events.onClose,OnWebSocketClose.class,method); events.onClose = new EventMethod(pojo,method); continue; assertValidSignature(method,OnWebSocketError.class,validErrorParams); assertUnset(events.onError,OnWebSocketError.class,method); events.onError = new EventMethod(pojo,method); continue; assertValidSignature(method,OnWebSocketFrame.class,validFrameParams); assertUnset(events.onFrame,OnWebSocketFrame.class,method);
public static ServerContainer configureContext(final MutableServletContextHandler context, final MetricRegistry metrics) throws ServletException { WebSocketUpgradeFilter filter = WebSocketUpgradeFilter.configureContext(context); NativeWebSocketConfiguration wsConfig = filter.getConfiguration(); ServerContainer wsContainer = new ServerContainer(wsConfig, context.getServer().getThreadPool()); EventDriverFactory edf = wsConfig.getFactory().getEventDriverFactory(); edf.clearImplementations(); edf.addImplementation(new InstJsrServerEndpointImpl(metrics)); edf.addImplementation(new InstJsrServerExtendsEndpointImpl(metrics)); context.addBean(wsContainer); context.setAttribute(javax.websocket.server.ServerContainer.class.getName(), wsContainer); context.setAttribute(WebSocketUpgradeFilter.class.getName(), filter); return wsContainer; } }
public EventMethods getMethods(Class<?> pojo) throws InvalidWebSocketException { if (pojo == null) { throw new InvalidWebSocketException("Cannot get methods for null class"); } if (cache.containsKey(pojo)) { return cache.get(pojo); } EventMethods methods = discoverMethods(pojo); if (methods == null) { return null; } cache.put(pojo,methods); return methods; }
EventMethods methods = getMethods(websocket.getClass()); if (methods != null)
private boolean isSignatureMatch(Method method, ParamList validParams) { assertIsPublicNonStatic(method); assertIsReturn(method,Void.TYPE); // validate parameters Class<?> actual[] = method.getParameterTypes(); for (Class<?>[] params : validParams) { if (isSameParameters(actual,params)) { return true; } } return false; }
public WebSocketServerFactory(WebSocketPolicy policy, ByteBufferPool bufferPool) { addBean(scheduler); addBean(bufferPool); this.registeredSocketClasses = new ArrayList<>(); this.basePolicy = policy; this.eventDriverFactory = new EventDriverFactory(basePolicy); this.extensionFactory = new WebSocketExtensionFactory(basePolicy,bufferPool); this.creator = this; // Create supportedVersions List<Integer> versions = new ArrayList<>(); for (int v : handshakes.keySet()) { versions.add(v); } Collections.sort(versions,Collections.reverseOrder()); // newest first StringBuilder rv = new StringBuilder(); for (int v : versions) { if (rv.length() > 0) { rv.append(", "); } rv.append(v); } supportedVersions = rv.toString(); }
EventDriver driver = eventDriverFactory.wrap(websocket);
/** * * @param configuration the {@link NativeWebSocketConfiguration} to use * @param httpClient the {@link HttpClient} instance to use */ public ServerContainer(NativeWebSocketConfiguration configuration, HttpClient httpClient) { super(configuration.getFactory(), httpClient); this.configuration = configuration; EventDriverFactory eventDriverFactory = this.configuration.getFactory().getEventDriverFactory(); eventDriverFactory.addImplementation(new JsrServerEndpointImpl()); eventDriverFactory.addImplementation(new JsrServerExtendsEndpointImpl()); this.configuration.getFactory().addSessionFactory(new JsrSessionFactory(this)); addBean(this.configuration); }
private void assertValidSignature(Method method, Class<? extends Annotation> annoClass, ParamList validParams) { assertIsPublicNonStatic(method); assertIsReturn(method,Void.TYPE); boolean valid = false; // validate parameters Class<?> actual[] = method.getParameterTypes(); for (Class<?>[] params : validParams) { if (isSameParameters(actual,params)) { valid = true; break; } } if (!valid) { throw InvalidSignatureException.build(method,annoClass,validParams); } }
this.eventDriverFactory = new EventDriverFactory(this); this.extensionFactory = new WebSocketExtensionFactory(this);
EventDriver driver = eventDriverFactory.wrap(websocketPojo); return upgrade(connection, sockreq, sockresp, driver);