Index: mojo/public/java/bindings/src/org/chromium/mojo/bindings/MessageWithHeader.java |
diff --git a/mojo/public/java/bindings/src/org/chromium/mojo/bindings/MessageWithHeader.java b/mojo/public/java/bindings/src/org/chromium/mojo/bindings/MessageWithHeader.java |
index 5c826b680db18117207a1b9384d06ecf98704594..9d602eab4700500519b5887b07b95531dcc11cac 100644 |
--- a/mojo/public/java/bindings/src/org/chromium/mojo/bindings/MessageWithHeader.java |
+++ b/mojo/public/java/bindings/src/org/chromium/mojo/bindings/MessageWithHeader.java |
@@ -4,18 +4,17 @@ |
package org.chromium.mojo.bindings; |
-import org.chromium.mojo.system.MessagePipeHandle; |
-import org.chromium.mojo.system.MessagePipeHandle.ReadMessageResult; |
-import org.chromium.mojo.system.MojoResult; |
+import org.chromium.mojo.system.Handle; |
import java.nio.ByteBuffer; |
import java.nio.ByteOrder; |
+import java.util.List; |
/** |
* Represents a {@link Message} which contains a {@link MessageHeader}. Deals with parsing the |
* {@link MessageHeader} for a message. |
*/ |
-public class MessageWithHeader { |
+public class MessageWithHeader implements Message { |
private final Message mBaseMessage; |
private final MessageHeader mHeader; |
@@ -35,11 +34,35 @@ public class MessageWithHeader { |
* Reinterpret the given |message| as a message with a header. The |message| must contain a |
* header as the start of it's raw data, which will be parsed by this constructor. |
*/ |
- public MessageWithHeader(Message baseMessage) { |
+ MessageWithHeader(Message baseMessage) { |
this(baseMessage, new org.chromium.mojo.bindings.MessageHeader(baseMessage)); |
} |
/** |
+ * @see Message#getData() |
+ */ |
+ @Override |
+ public ByteBuffer getData() { |
+ return mBaseMessage.getData(); |
+ } |
+ |
+ /** |
+ * @see Message#getHandles() |
+ */ |
+ @Override |
+ public List<? extends Handle> getHandles() { |
+ return mBaseMessage.getHandles(); |
+ } |
+ |
+ /** |
+ * @see Message#asMojoMessage() |
+ */ |
+ @Override |
+ public MessageWithHeader asMojoMessage() { |
+ return this; |
+ } |
+ |
+ /** |
* Returns the header of the given message. This will throw a {@link DeserializationException} |
* if the start of the message is not a valid header. |
*/ |
@@ -52,47 +75,19 @@ public class MessageWithHeader { |
*/ |
public Message getPayload() { |
if (mPayload == null) { |
- ByteBuffer truncatedBuffer = ((ByteBuffer) mBaseMessage.buffer.position( |
+ ByteBuffer truncatedBuffer = ((ByteBuffer) mBaseMessage.getData().position( |
getHeader().getSize())).slice(); |
truncatedBuffer.order(ByteOrder.nativeOrder()); |
- mPayload = new Message(truncatedBuffer, mBaseMessage.handles); |
+ mPayload = new SimpleMessage(truncatedBuffer, mBaseMessage.getHandles()); |
} |
return mPayload; |
} |
/** |
- * Returns the raw message. |
- */ |
- public Message getMessage() { |
- return mBaseMessage; |
- } |
- |
- /** |
* Set the request identifier on the message. |
*/ |
void setRequestId(long requestId) { |
- mHeader.setRequestId(mBaseMessage.buffer, requestId); |
+ mHeader.setRequestId(mBaseMessage.getData(), requestId); |
} |
- /** |
- * Read a message, and pass it to the given |MessageReceiver| if not null. If the |
- * |MessageReceiver| is null, the message is lost. |
- * |
- * @param receiver The {@link MessageReceiver} that will receive the read {@link Message}. Can |
- * be <code>null</code>, in which case the message is discarded. |
- */ |
- public static int readAndDispatchMessage(MessagePipeHandle handle, MessageReceiver receiver) { |
- // TODO(qsr) Allow usage of a pool of pre-allocated buffer for performance. |
- ReadMessageResult result = handle.readMessage(null, 0, MessagePipeHandle.ReadFlags.NONE); |
- if (result.getMojoResult() != MojoResult.RESOURCE_EXHAUSTED) { |
- return result.getMojoResult(); |
- } |
- ByteBuffer buffer = ByteBuffer.allocateDirect(result.getMessageSize()); |
- result = handle.readMessage(buffer, result.getHandlesCount(), |
- MessagePipeHandle.ReadFlags.NONE); |
- if (receiver != null && result.getMojoResult() == MojoResult.OK) { |
- receiver.accept(new MessageWithHeader(new Message(buffer, result.getHandles()))); |
- } |
- return result.getMojoResult(); |
- } |
} |