Search in sources :

Example 1 with MessageOutputStream

use of org.eclipse.jetty.websocket.common.message.MessageOutputStream 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)

Example 2 with MessageOutputStream

use of org.eclipse.jetty.websocket.common.message.MessageOutputStream in project jetty.project by eclipse.

the class JsrAsyncRemote method sendObject.

@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
public void sendObject(Object data, SendHandler handler) {
    assertMessageNotNull(data);
    assertSendHandlerNotNull(handler);
    if (LOG.isDebugEnabled()) {
        LOG.debug("sendObject({},{})", data, handler);
    }
    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);
            sendText(msg, handler);
            return;
        } catch (EncodeException e) {
            handler.onResult(new SendResult(e));
        }
    } else if (encoder instanceof Encoder.TextStream) {
        Encoder.TextStream etxt = (Encoder.TextStream) encoder;
        SendHandlerWriteCallback callback = new SendHandlerWriteCallback(handler);
        try (MessageWriter writer = new MessageWriter(session)) {
            writer.setCallback(callback);
            etxt.encode(data, writer);
            return;
        } catch (EncodeException | IOException e) {
            handler.onResult(new SendResult(e));
        }
    } else if (encoder instanceof Encoder.Binary) {
        Encoder.Binary ebin = (Encoder.Binary) encoder;
        try {
            ByteBuffer buf = ebin.encode(data);
            sendBinary(buf, handler);
            return;
        } catch (EncodeException e) {
            handler.onResult(new SendResult(e));
        }
    } else if (encoder instanceof Encoder.BinaryStream) {
        Encoder.BinaryStream ebin = (Encoder.BinaryStream) encoder;
        SendHandlerWriteCallback callback = new SendHandlerWriteCallback(handler);
        try (MessageOutputStream out = new MessageOutputStream(session)) {
            out.setCallback(callback);
            ebin.encode(data, out);
            return;
        } catch (EncodeException | IOException e) {
            handler.onResult(new SendResult(e));
        }
    }
    throw new IllegalArgumentException("Unknown encoder type: " + encoder);
}
Also used : EncodeException(javax.websocket.EncodeException) ByteBuffer(java.nio.ByteBuffer) SendHandlerWriteCallback(org.eclipse.jetty.websocket.jsr356.messages.SendHandlerWriteCallback) MessageOutputStream(org.eclipse.jetty.websocket.common.message.MessageOutputStream) Encoder(javax.websocket.Encoder) SendResult(javax.websocket.SendResult) MessageWriter(org.eclipse.jetty.websocket.common.message.MessageWriter)

Aggregations

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