Search in sources :

Example 1 with EncodeFailedFuture

use of org.eclipse.jetty.websocket.jsr356.encoders.EncodeFailedFuture in project jetty.project by eclipse.

the class AbstractJsrRemote method sendObjectViaFuture.

@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 text = (Encoder.Text) encoder;
        try {
            String msg = text.encode(data);
            return jettyRemote.sendStringByFuture(msg);
        } catch (EncodeException e) {
            return new EncodeFailedFuture(data, text, 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);
}
Also used : FutureWriteCallback(org.eclipse.jetty.websocket.common.io.FutureWriteCallback) EncodeException(javax.websocket.EncodeException) ByteBuffer(java.nio.ByteBuffer) MessageOutputStream(org.eclipse.jetty.websocket.common.message.MessageOutputStream) Encoder(javax.websocket.Encoder) MessageWriter(org.eclipse.jetty.websocket.common.message.MessageWriter) EncodeFailedFuture(org.eclipse.jetty.websocket.jsr356.encoders.EncodeFailedFuture)

Aggregations

ByteBuffer (java.nio.ByteBuffer)1 EncodeException (javax.websocket.EncodeException)1 Encoder (javax.websocket.Encoder)1 FutureWriteCallback (org.eclipse.jetty.websocket.common.io.FutureWriteCallback)1 MessageOutputStream (org.eclipse.jetty.websocket.common.message.MessageOutputStream)1 MessageWriter (org.eclipse.jetty.websocket.common.message.MessageWriter)1 EncodeFailedFuture (org.eclipse.jetty.websocket.jsr356.encoders.EncodeFailedFuture)1