@Override public String[] getSupportedVersions() { return StringUtils.tokenizeToStringArray(Version.getSupportedWireProtocolVersions(), ","); }
private RequestContext createRequestContext(HttpServletRequest request, String endpointPath, HttpHeaders headers) { RequestContext context = RequestContext.Builder.create() .requestURI(URI.create(endpointPath)) .userPrincipal(request.getUserPrincipal()) .secure(request.isSecure()) .remoteAddr(request.getRemoteAddr()) .build(); headers.forEach((header, value) -> context.getHeaders().put(header, value)); return context; }
@Override protected void handleSuccess(HttpServletRequest request, HttpServletResponse response, UpgradeInfo upgradeInfo, TyrusUpgradeResponse upgradeResponse) throws IOException, ServletException { TyrusHttpUpgradeHandler handler = request.upgrade(TyrusHttpUpgradeHandler.class); Writer servletWriter = newServletWriter(handler); handler.preInit(upgradeInfo, servletWriter, request.getUserPrincipal() != null); response.setStatus(upgradeResponse.getStatus()); upgradeResponse.getHeaders().forEach((key, value) -> response.addHeader(key, Utils.getHeaderFromList(value))); response.flushBuffer(); }
TyrusUpgradeResponse upgradeResponse = new TyrusUpgradeResponse(); UpgradeInfo upgradeInfo = engine.upgrade(requestContext, upgradeResponse); success = SUCCESS.equals(upgradeInfo.getStatus()); if (success) { if (logger.isTraceEnabled()) { logger.trace("Successful request upgrade: " + upgradeResponse.getHeaders());
@Override public void sendBinary(ByteBuffer data) throws IOException { checkNotNull(data, "data"); session.getDebugContext() .appendLogMessage(LOGGER, Level.FINEST, DebugContext.Type.MESSAGE_OUT, "Sending binary message"); final Future<?> future = webSocket.sendBinary(Utils.getRemainingArray(data)); try { processFuture(future); } finally { session.restartIdleTimeoutExecutor(); } }
@Override public void sendText(String partialMessage, boolean isLast) throws IOException { checkNotNull(partialMessage, "partialMessage"); session.getDebugContext().appendLogMessage(LOGGER, Level.FINEST, DebugContext.Type.MESSAGE_OUT, "Sending partial text message: ", partialMessage); final Future<?> future = webSocket.sendText(partialMessage, isLast); try { processFuture(future); } finally { session.restartIdleTimeoutExecutor(); } }
@Override public void sendText(String text, SendHandler handler) { checkNotNull(text, "text"); checkNotNull(handler, "handler"); session.restartIdleTimeoutExecutor(); sendAsync(text, handler, AsyncMessageType.TEXT); }
private void cleanAfterClose() { if (readerBuffer != null) { readerBuffer.onSessionClosed(); } if (inputStreamBuffer != null) { inputStreamBuffer.onSessionClosed(); } cancelHeartBeatTask(); }
public BaseContainer() { this.managedExecutorService = lookupManagedExecutorService(); this.managedScheduledExecutorService = lookupManagedScheduledExecutorService(); if (managedExecutorService == null || managedScheduledExecutorService == null) { // at least one of the managed executor services is null, a local one will be created instead threadFactory = new DaemonThreadFactory(); } else { // only managed executor services will be used, the thread factory won't be needed. threadFactory = null; } }
/** * Send a binary frame to the remote endpoint. * * @param data data to be sent. * @return {@link Future} which could be used to control/check the sending completion state. */ public Future<Frame> sendBinary(byte[] data) { checkConnectedState(); return protocolHandler.send(data); }
/** * Sends a fragment of a complete message. * * @param fragment the textual fragment to send. * @param last boolean indicating if this message fragment is the last. * @return {@link Future} which could be used to control/check the sending completion state. */ public Future<Frame> sendText(String fragment, boolean last) { checkConnectedState(); return protocolHandler.stream(last, fragment); }
/** * Client-side handshake. * * @param webSocketRequest request representation to be modified for use as WebSocket handshake request. * @return handshake instance. */ public static Handshake createClientHandshake(RequestContext webSocketRequest) { final Handshake handshake = new Handshake(); handshake.request = webSocketRequest; handshake.secKey = new SecKey(); return handshake; }
@Override protected void handleSuccess(HttpServletRequest request, HttpServletResponse response, UpgradeInfo upgradeInfo, TyrusUpgradeResponse upgradeResponse) throws IOException, ServletException { response.setStatus(upgradeResponse.getStatus()); upgradeResponse.getHeaders().forEach((key, value) -> response.addHeader(key, Utils.getHeaderFromList(value))); AsyncContext asyncContext = request.startAsync(); asyncContext.setTimeout(-1L); Object nativeRequest = getNativeRequest(request); BeanWrapper beanWrapper = new BeanWrapperImpl(nativeRequest); Object httpSocket = beanWrapper.getPropertyValue("connection.connectionHandler.rawConnection"); Object webSocket = webSocketHelper.newInstance(request, httpSocket); webSocketHelper.upgrade(webSocket, httpSocket, request.getServletContext()); response.flushBuffer(); boolean isProtected = request.getUserPrincipal() != null; Writer servletWriter = servletWriterHelper.newInstance(webSocket, isProtected); Connection connection = upgradeInfo.createConnection(servletWriter, noOpCloseListener); new BeanWrapperImpl(webSocket).setPropertyValue("connection", connection); new BeanWrapperImpl(servletWriter).setPropertyValue("connection", connection); webSocketHelper.registerForReadEvent(webSocket); }
@Override public void sendBinary(ByteBuffer partialByte, boolean isLast) throws IOException { checkNotNull(partialByte, "partialByte"); session.getDebugContext().appendLogMessage(LOGGER, Level.FINEST, DebugContext.Type.MESSAGE_OUT, "Sending partial binary message"); final Future<?> future = webSocket.sendBinary(Utils.getRemainingArray(partialByte), isLast); try { processFuture(future); } finally { session.restartIdleTimeoutExecutor(); } }
@Override public void sendText(String partialMessage, boolean isLast) throws IOException { checkNotNull(partialMessage, "partialMessage"); session.getDebugContext().appendLogMessage(LOGGER, Level.FINEST, DebugContext.Type.MESSAGE_OUT, "Sending partial text message: ", partialMessage); final Future<?> future = webSocket.sendText(partialMessage, isLast); try { processFuture(future); } finally { session.restartIdleTimeoutExecutor(); } }
@Override public Future<Void> sendObject(Object data) { checkNotNull(data, "data"); session.restartIdleTimeoutExecutor(); return sendAsync(data, AsyncMessageType.OBJECT); }
@Override public void sendBinary(ByteBuffer data) throws IOException { checkNotNull(data, "data"); session.getDebugContext() .appendLogMessage(LOGGER, Level.FINEST, DebugContext.Type.MESSAGE_OUT, "Sending binary message"); final Future<?> future = webSocket.sendBinary(Utils.getRemainingArray(data)); try { processFuture(future); } finally { session.restartIdleTimeoutExecutor(); } }
@Override public Future<Void> sendBinary(ByteBuffer data) { checkNotNull(data, "data"); session.restartIdleTimeoutExecutor(); return sendAsync(data, AsyncMessageType.BINARY); }
@Override public void sendBinary(ByteBuffer partialByte, boolean isLast) throws IOException { checkNotNull(partialByte, "partialByte"); session.getDebugContext().appendLogMessage(LOGGER, Level.FINEST, DebugContext.Type.MESSAGE_OUT, "Sending partial binary message"); final Future<?> future = webSocket.sendBinary(Utils.getRemainingArray(partialByte), isLast); try { processFuture(future); } finally { session.restartIdleTimeoutExecutor(); } }
@Override public void sendObject(Object data, SendHandler handler) { checkNotNull(data, "data"); checkNotNull(handler, "handler"); session.restartIdleTimeoutExecutor(); sendAsync(data, handler, AsyncMessageType.OBJECT); }