summaryrefslogtreecommitdiffstats
path: root/mojo/bindings/java/src/org
diff options
context:
space:
mode:
authorqsr@chromium.org <qsr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-07-01 08:56:54 +0000
committerqsr@chromium.org <qsr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-07-01 08:56:54 +0000
commit7eed2ec6c797a1e1556ceb954cfe52f8876ef816 (patch)
treeeb34bfe702553a83e3a916f8a1c950a137a9f6a8 /mojo/bindings/java/src/org
parentdd8fa9056d20c93c07ec3ff1ff19bec9f4a81921 (diff)
downloadchromium_src-7eed2ec6c797a1e1556ceb954cfe52f8876ef816.zip
chromium_src-7eed2ec6c797a1e1556ceb954cfe52f8876ef816.tar.gz
chromium_src-7eed2ec6c797a1e1556ceb954cfe52f8876ef816.tar.bz2
Add Message and MessageReceiver classes.
Those classes are utility class to handle mojo messages. R=viettrungluu@chromium.org,rmcilroy@chromium.org Review URL: https://codereview.chromium.org/311363003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@280785 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'mojo/bindings/java/src/org')
-rw-r--r--mojo/bindings/java/src/org/chromium/mojo/bindings/Message.java63
-rw-r--r--mojo/bindings/java/src/org/chromium/mojo/bindings/MessageReceiver.java17
2 files changed, 80 insertions, 0 deletions
diff --git a/mojo/bindings/java/src/org/chromium/mojo/bindings/Message.java b/mojo/bindings/java/src/org/chromium/mojo/bindings/Message.java
new file mode 100644
index 0000000..f826a8e
--- /dev/null
+++ b/mojo/bindings/java/src/org/chromium/mojo/bindings/Message.java
@@ -0,0 +1,63 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.mojo.bindings;
+
+import org.chromium.mojo.system.Handle;
+import org.chromium.mojo.system.MessagePipeHandle;
+import org.chromium.mojo.system.MessagePipeHandle.ReadMessageResult;
+import org.chromium.mojo.system.MojoResult;
+
+import java.nio.ByteBuffer;
+import java.util.List;
+
+import javax.annotation.Nullable;
+
+/**
+ * A raw message to be sent/received from a {@link MessagePipeHandle}.
+ */
+public final class Message {
+
+ /**
+ * The data of the message.
+ */
+ public final ByteBuffer buffer;
+
+ /**
+ * The handles of the message.
+ */
+ public final List<? extends Handle> handles;
+
+ /**
+ * Constructor.
+ *
+ * @param buffer The buffer containing the bytes to send. This must be a direct buffer.
+ * @param handles The list of handles to send.
+ */
+ public Message(ByteBuffer buffer, List<? extends Handle> handles) {
+ assert buffer.isDirect();
+ this.buffer = buffer;
+ this.handles = handles;
+ }
+
+ /**
+ * Read a message, and pass it to the given |MessageReceiver| if not null. If the
+ * |MessageReceiver| is null, the message is lost.
+ */
+ public static int readAndDispatchMessage(MessagePipeHandle handle,
+ @Nullable 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 Message(buffer, result.getHandles()));
+ }
+ return result.getMojoResult();
+ }
+}
diff --git a/mojo/bindings/java/src/org/chromium/mojo/bindings/MessageReceiver.java b/mojo/bindings/java/src/org/chromium/mojo/bindings/MessageReceiver.java
new file mode 100644
index 0000000..1736bc6
--- /dev/null
+++ b/mojo/bindings/java/src/org/chromium/mojo/bindings/MessageReceiver.java
@@ -0,0 +1,17 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.mojo.bindings;
+
+/**
+ * A class which implements this interface can receive {@link Message} objects.
+ */
+public interface MessageReceiver {
+
+ /**
+ * Receive a {@link Message}. The {@link MessageReceiver} is allowed to mutable the message.
+ * Returns |true| if the message has been handled, |false| otherwise.
+ */
+ boolean accept(Message message);
+}