public void sendRequest(long id, String verb, String path) throws IOException { WebSocketMessage message = factory.createRequest(Optional.of(id), verb, path, new LinkedList<String>(), Optional.empty()); session.getRemote().sendBytes(ByteBuffer.wrap(message.toByteArray())); }
public void sendResponse(long id, int code, String message, byte[] body) throws IOException { WebSocketMessage response = factory.createResponse(id, code, message, new LinkedList<String>(), Optional.ofNullable(body)); session.getRemote().sendBytes(ByteBuffer.wrap(response.toByteArray())); }
private void sendErrorResponse(WebSocketRequestMessage requestMessage, Response error) { if (requestMessage.hasRequestId()) { List<String> headers = new LinkedList<>(); for (String key : error.getStringHeaders().keySet()) { headers.add(key + ":" + error.getStringHeaders().getFirst(key)); } WebSocketMessage response = messageFactory.createResponse(requestMessage.getRequestId(), error.getStatus(), "Error response", headers, Optional.<byte[]>empty()); remoteEndpoint.sendBytesByFuture(ByteBuffer.wrap(response.toByteArray())); } }
public ListenableFuture<WebSocketResponseMessage> sendRequest(String verb, String path, List<String> headers, Optional<byte[]> body) { final long requestId = generateRequestId(); final SettableFuture<WebSocketResponseMessage> future = SettableFuture.create(); pendingRequestMapper.put(requestId, future); WebSocketMessage requestMessage = messageFactory.createRequest(Optional.of(requestId), verb, path, headers, body); try { remoteEndpoint.sendBytes(ByteBuffer.wrap(requestMessage.toByteArray()), new WriteCallback() { @Override public void writeFailed(Throwable x) { logger.debug("Write failed", x); pendingRequestMapper.remove(requestId); future.setException(x); } @Override public void writeSuccess() {} }); } catch (WebSocketException e) { logger.debug("Write", e); pendingRequestMapper.remove(requestId); future.setException(e); } return future; }
@Override public void flushBuffer() throws IOException { if (!isCommitted) { byte[] body = responseBody.toByteArray(); if (body.length <= 0) { body = null; } byte[] response = messageFactory.createResponse(responseBuilder.getRequestId(), responseBuilder.getStatusCode(), responseBuilder.getMessage(), new LinkedList<>(), Optional.ofNullable(body)) .toByteArray(); endPoint.sendBytesByFuture(ByteBuffer.wrap(response)); isCommitted = true; } }