@SuppressWarnings({"rawtypes", "unchecked"}) public Future<Void> sendObjectViaFuture(Object data) { assertMessageNotNull(data); if (LOG.isDebugEnabled()) { LOG.debug("sendObject({})", data); } Encoder encoder = encoders.getEncoderFor(data.getClass()); if (encoder == null) { throw new IllegalArgumentException("No encoder for type: " + data.getClass()); } if (encoder instanceof Encoder.Text) { Encoder.Text etxt = (Encoder.Text) encoder; try { String msg = etxt.encode(data); return jettyRemote.sendStringByFuture(msg); } catch (EncodeException e) { return new EncodeFailedFuture(data, etxt, Encoder.Text.class, e); } } else if (encoder instanceof Encoder.TextStream) { Encoder.TextStream etxt = (Encoder.TextStream) encoder; FutureWriteCallback callback = new FutureWriteCallback(); try (MessageWriter writer = new MessageWriter(session)) { writer.setCallback(callback); etxt.encode(data, writer); return callback; } catch (EncodeException | IOException e) { return new EncodeFailedFuture(data, etxt, Encoder.Text.class, e); } } else if (encoder instanceof Encoder.Binary) { Encoder.Binary ebin = (Encoder.Binary) encoder; try { ByteBuffer buf = ebin.encode(data); return jettyRemote.sendBytesByFuture(buf); } catch (EncodeException e) { return new EncodeFailedFuture(data, ebin, Encoder.Binary.class, e); } } else if (encoder instanceof Encoder.BinaryStream) { Encoder.BinaryStream ebin = (Encoder.BinaryStream) encoder; FutureWriteCallback callback = new FutureWriteCallback(); try (MessageOutputStream out = new MessageOutputStream(session)) { out.setCallback(callback); ebin.encode(data, out); return callback; } catch (EncodeException | IOException e) { return new EncodeFailedFuture(data, ebin, Encoder.Binary.class, e); } } throw new IllegalArgumentException("Unknown encoder type: " + encoder); }
@Override public void sendPong(ByteBuffer data) throws IOException, IllegalArgumentException { if (LOG.isDebugEnabled()) { LOG.debug("sendPong({})", BufferUtil.toDetailString(data)); } jettyRemote.sendPong(data); }