use of org.eclipse.jetty.websocket.jsr356.messages.BinaryPartialOnMessage in project jetty.project by eclipse.
the class JsrAnnotatedEventDriver method onBinaryFrame.
/**
* Entry point for all incoming binary frames.
*/
@Override
public void onBinaryFrame(ByteBuffer buffer, boolean fin) throws IOException {
if (LOG.isDebugEnabled()) {
LOG.debug("onBinaryFrame({}, {})", BufferUtil.toDetailString(buffer), fin);
LOG.debug("events.onBinary={}", events.hasBinary());
LOG.debug("events.onBinaryStream={}", events.hasBinaryStream());
}
boolean handled = false;
if (events.hasBinary()) {
handled = true;
if (activeMessage == null) {
if (events.isBinaryPartialSupported()) {
// Partial Message Support (does not use messageAppender)
if (LOG.isDebugEnabled()) {
LOG.debug("Partial Binary Message: fin={}", fin);
}
activeMessage = new BinaryPartialOnMessage(this);
} else {
// Whole Message Support
if (LOG.isDebugEnabled()) {
LOG.debug("Whole Binary Message");
}
activeMessage = new SimpleBinaryMessage(this);
}
}
}
if (events.hasBinaryStream()) {
handled = true;
// Streaming Message Support
if (activeMessage == null) {
if (LOG.isDebugEnabled()) {
LOG.debug("Binary Message InputStream");
}
final MessageInputStream stream = new MessageInputStream();
activeMessage = stream;
// Always dispatch streaming read to another thread.
dispatch(new Runnable() {
@Override
public void run() {
try {
events.callBinaryStream(jsrsession.getAsyncRemote(), websocket, stream);
} catch (Throwable e) {
onFatalError(e);
}
}
});
}
}
if (LOG.isDebugEnabled()) {
LOG.debug("handled = {}", handled);
}
// Process any active MessageAppender
if (handled && (activeMessage != null)) {
appendMessage(buffer, fin);
}
}
Aggregations