use of org.eclipse.jetty.websocket.common.io.FutureWriteCallback 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);
}
use of org.eclipse.jetty.websocket.common.io.FutureWriteCallback in project jetty.project by eclipse.
the class WebSocketRemoteEndpoint method sendAsyncFrame.
/**
* Internal
*
* @param frame the frame to write
* @return the future for the network write of the frame
*/
private Future<Void> sendAsyncFrame(WebSocketFrame frame) {
FutureWriteCallback future = new FutureWriteCallback();
uncheckedSendFrame(frame, future);
return future;
}
use of org.eclipse.jetty.websocket.common.io.FutureWriteCallback in project jetty.project by eclipse.
the class WebSocketClientTest method testBasicEcho_UsingCallback.
@Test
public void testBasicEcho_UsingCallback() throws Exception {
client.setMaxIdleTimeout(160000);
JettyTrackingSocket cliSock = new JettyTrackingSocket();
URI wsUri = server.getWsUri();
ClientUpgradeRequest request = new ClientUpgradeRequest();
request.setSubProtocols("echo");
Future<Session> future = client.connect(cliSock, wsUri, request);
final IBlockheadServerConnection srvSock = server.accept();
srvSock.upgrade();
Session sess = future.get(30, TimeUnit.SECONDS);
Assert.assertThat("Session", sess, notNullValue());
Assert.assertThat("Session.open", sess.isOpen(), is(true));
Assert.assertThat("Session.upgradeRequest", sess.getUpgradeRequest(), notNullValue());
Assert.assertThat("Session.upgradeResponse", sess.getUpgradeResponse(), notNullValue());
cliSock.assertWasOpened();
cliSock.assertNotClosed();
Collection<WebSocketSession> sessions = client.getBeans(WebSocketSession.class);
Assert.assertThat("client.connectionManager.sessions.size", sessions.size(), is(1));
FutureWriteCallback callback = new FutureWriteCallback();
cliSock.getSession().getRemote().sendString("Hello World!", callback);
callback.get(1, TimeUnit.SECONDS);
}
Aggregations