diff options
author | qsr@chromium.org <qsr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-07-01 08:56:54 +0000 |
---|---|---|
committer | qsr@chromium.org <qsr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-07-01 08:56:54 +0000 |
commit | 7eed2ec6c797a1e1556ceb954cfe52f8876ef816 (patch) | |
tree | eb34bfe702553a83e3a916f8a1c950a137a9f6a8 /mojo/bindings/java/src/org | |
parent | dd8fa9056d20c93c07ec3ff1ff19bec9f4a81921 (diff) | |
download | chromium_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.java | 63 | ||||
-rw-r--r-- | mojo/bindings/java/src/org/chromium/mojo/bindings/MessageReceiver.java | 17 |
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); +} |