Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(55)

Side by Side Diff: mojo/bindings/java/src/org/chromium/mojo/bindings/Message.java

Issue 371603003: Adding a router class to handle messages that expect responses. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix findbugs issue Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.mojo.bindings; 5 package org.chromium.mojo.bindings;
6 6
7 import org.chromium.mojo.system.Handle; 7 import org.chromium.mojo.system.Handle;
8 import org.chromium.mojo.system.MessagePipeHandle; 8 import org.chromium.mojo.system.MessagePipeHandle;
9 import org.chromium.mojo.system.MessagePipeHandle.ReadMessageResult;
10 import org.chromium.mojo.system.MojoResult;
11 9
12 import java.nio.ByteBuffer; 10 import java.nio.ByteBuffer;
13 import java.util.List; 11 import java.util.List;
14 12
15 /** 13 /**
16 * A raw message to be sent/received from a {@link MessagePipeHandle}. 14 * A raw message to be sent/received from a {@link MessagePipeHandle}.
17 */ 15 */
18 public final class Message { 16 public final class Message {
19 17
20 /** 18 /**
(...skipping 10 matching lines...) Expand all
31 * Constructor. 29 * Constructor.
32 * 30 *
33 * @param buffer The buffer containing the bytes to send. This must be a dir ect buffer. 31 * @param buffer The buffer containing the bytes to send. This must be a dir ect buffer.
34 * @param handles The list of handles to send. 32 * @param handles The list of handles to send.
35 */ 33 */
36 public Message(ByteBuffer buffer, List<? extends Handle> handles) { 34 public Message(ByteBuffer buffer, List<? extends Handle> handles) {
37 assert buffer.isDirect(); 35 assert buffer.isDirect();
38 this.buffer = buffer; 36 this.buffer = buffer;
39 this.handles = handles; 37 this.handles = handles;
40 } 38 }
41
42 /**
43 * Read a message, and pass it to the given |MessageReceiver| if not null. I f the
44 * |MessageReceiver| is null, the message is lost.
45 *
46 * @param receiver The {@link MessageReceiver} that will receive the read {@ link Message}. Can
47 * be <code>null</code>, in which case the message is discarded.
48 */
49 public static int readAndDispatchMessage(MessagePipeHandle handle, MessageRe ceiver receiver) {
50 // TODO(qsr) Allow usage of a pool of pre-allocated buffer for performan ce.
51 ReadMessageResult result = handle.readMessage(null, 0, MessagePipeHandle .ReadFlags.NONE);
52 if (result.getMojoResult() != MojoResult.RESOURCE_EXHAUSTED) {
53 return result.getMojoResult();
54 }
55 ByteBuffer buffer = ByteBuffer.allocateDirect(result.getMessageSize());
56 result = handle.readMessage(buffer, result.getHandlesCount(),
57 MessagePipeHandle.ReadFlags.NONE);
58 if (receiver != null && result.getMojoResult() == MojoResult.OK) {
59 receiver.accept(new Message(buffer, result.getHandles()));
60 }
61 return result.getMojoResult();
62 }
63 } 39 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698