@Override protected void sendPingMessage(PingMessage message) throws IOException { getRemoteEndpoint().sendPing(message.getPayload()); }
@Override public void run() { if (!isWebSocketOpen()) { TaskEngine.getInstance().cancelScheduledTask(pingTask); } else { long idleTime = System.currentTimeMillis() - JiveConstants.MINUTE; if (xmppSession.getLastActiveDate().getTime() >= idleTime) { return; } try { // see https://tools.ietf.org/html/rfc6455#section-5.5.2 wsSession.getRemote().sendPing(null); lastPingFailed = false; } catch (IOException ioe) { Log.error("Failed to ping remote peer: " + wsSession, ioe); if (lastPingFailed) { closeSession(); TaskEngine.getInstance().cancelScheduledTask(pingTask); } else { lastPingFailed = true; } } } } }
@Override protected boolean sendMessage(WebSocketMessage message) throws IOException { ByteBuffer buffer = message.getPayload().asByteBuffer(); if (WebSocketMessage.Type.TEXT.equals(message.getType())) { getSendProcessor().setReadyToSend(false); String text = new String(buffer.array(), StandardCharsets.UTF_8); getDelegate().getRemote().sendString(text, new SendProcessorCallback()); } else if (WebSocketMessage.Type.BINARY.equals(message.getType())) { getSendProcessor().setReadyToSend(false); getDelegate().getRemote().sendBytes(buffer, new SendProcessorCallback()); } else if (WebSocketMessage.Type.PING.equals(message.getType())) { getDelegate().getRemote().sendPing(buffer); } else if (WebSocketMessage.Type.PONG.equals(message.getType())) { getDelegate().getRemote().sendPong(buffer); } else { throw new IllegalArgumentException("Unexpected message type: " + message.getType()); } return true; }
@Override public void run() { try { for (Session s : clients) { if (s.isOpen()) s.getRemote().sendPing(PING); else clients.remove(s); } } catch (Exception e) { throw new RuntimeException(e); } } }
@Override protected void sendPingMessage(PingMessage message) throws IOException { getRemoteEndpoint().sendPing(message.getPayload()); }
@Override protected void sendPingMessage(PingMessage message) throws IOException { getRemoteEndpoint().sendPing(message.getPayload()); }
private void doSend() throws IOException { queue.drainTo(send); if (send.size() > 0) { encodeAndSend(send); synchronized (toDiskLock) { if (!diskBuffer.isEmpty()) { while (diskBuffer.size() > 0) { File next = diskBuffer.remove(0); byte[] nextMsgs = Files.readAllBytes(next.toPath()); if (nextMsgs != null && nextMsgs.length > 0) { wsSession.getRemote().sendBytes(ByteBuffer.wrap(nextMsgs)); } if (!next.delete()) { logger.info("Failed to delete temporary file: " + next.getAbsolutePath()); } } } diskBuffer.clear(); toDiskBuffer.drainTo(send); encodeAndSend(send); } } else { wsSession.getRemote().sendPing(ByteBuffer.allocate(4).putInt(1234)); } } private void encodeAndSend(List<AbstractMessage> send) throws IOException {
@Override public void run() { if (!isWebSocketOpen()) { TaskEngine.getInstance().cancelScheduledTask(pingTask); } else { long idleTime = System.currentTimeMillis() - JiveConstants.MINUTE; if (xmppSession.getLastActiveDate().getTime() >= idleTime) { return; } try { // see https://tools.ietf.org/html/rfc6455#section-5.5.2 wsSession.getRemote().sendPing(null); lastPingFailed = false; } catch (IOException ioe) { Log.error("Failed to ping remote peer: " + wsSession, ioe); if (lastPingFailed) { closeSession(); TaskEngine.getInstance().cancelScheduledTask(pingTask); } else { lastPingFailed = true; } } } } }
@Override protected boolean sendMessage(WebSocketMessage message) throws IOException { ByteBuffer buffer = message.getPayload().asByteBuffer(); if (WebSocketMessage.Type.TEXT.equals(message.getType())) { getSendProcessor().setReadyToSend(false); String text = new String(buffer.array(), StandardCharsets.UTF_8); getDelegate().getRemote().sendString(text, new SendProcessorCallback()); } else if (WebSocketMessage.Type.BINARY.equals(message.getType())) { getSendProcessor().setReadyToSend(false); getDelegate().getRemote().sendBytes(buffer, new SendProcessorCallback()); } else if (WebSocketMessage.Type.PING.equals(message.getType())) { getDelegate().getRemote().sendPing(buffer); } else if (WebSocketMessage.Type.PONG.equals(message.getType())) { getDelegate().getRemote().sendPong(buffer); } else { throw new IllegalArgumentException("Unexpected message type: " + message.getType()); } return true; }