| Index: mojo/public/java/bindings/src/org/chromium/mojo/bindings/Connector.java
|
| diff --git a/mojo/public/java/bindings/src/org/chromium/mojo/bindings/Connector.java b/mojo/public/java/bindings/src/org/chromium/mojo/bindings/Connector.java
|
| deleted file mode 100644
|
| index cbb192400f8a233791069e0033099f2a7d8db7e5..0000000000000000000000000000000000000000
|
| --- a/mojo/public/java/bindings/src/org/chromium/mojo/bindings/Connector.java
|
| +++ /dev/null
|
| @@ -1,241 +0,0 @@
|
| -// 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.AsyncWaiter;
|
| -import org.chromium.mojo.system.Core;
|
| -import org.chromium.mojo.system.MessagePipeHandle;
|
| -import org.chromium.mojo.system.MessagePipeHandle.ReadMessageResult;
|
| -import org.chromium.mojo.system.MojoException;
|
| -import org.chromium.mojo.system.MojoResult;
|
| -
|
| -import java.nio.ByteBuffer;
|
| -
|
| -/**
|
| - * A {@link Connector} owns a {@link MessagePipeHandle} and will send any received messages to the
|
| - * registered {@link MessageReceiver}. It also acts as a {@link MessageReceiver} and will send any
|
| - * message through the handle.
|
| - * <p>
|
| - * The method |start| must be called before the {@link Connector} will start listening to incoming
|
| - * messages.
|
| - */
|
| -public class Connector implements MessageReceiver, HandleOwner<MessagePipeHandle> {
|
| -
|
| - /**
|
| - * The callback that is notified when the state of the owned handle changes.
|
| - */
|
| - private final AsyncWaiterCallback mAsyncWaiterCallback = new AsyncWaiterCallback();
|
| -
|
| - /**
|
| - * The owned message pipe.
|
| - */
|
| - private final MessagePipeHandle mMessagePipeHandle;
|
| -
|
| - /**
|
| - * A waiter which is notified when a new message is available on the owned message pipe.
|
| - */
|
| - private final AsyncWaiter mAsyncWaiter;
|
| -
|
| - /**
|
| - * The {@link MessageReceiver} to which received messages are sent.
|
| - */
|
| - private MessageReceiver mIncomingMessageReceiver;
|
| -
|
| - /**
|
| - * The Cancellable for the current wait. Is |null| when not currently waiting for new messages.
|
| - */
|
| - private AsyncWaiter.Cancellable mCancellable;
|
| -
|
| - /**
|
| - * The error handler to notify of errors.
|
| - */
|
| - private ConnectionErrorHandler mErrorHandler;
|
| -
|
| - /**
|
| - * Create a new connector over a |messagePipeHandle|. The created connector will use the default
|
| - * {@link AsyncWaiter} from the {@link Core} implementation of |messagePipeHandle|.
|
| - */
|
| - public Connector(MessagePipeHandle messagePipeHandle) {
|
| - this(messagePipeHandle, BindingsHelper.getDefaultAsyncWaiterForHandle(messagePipeHandle));
|
| - }
|
| -
|
| - /**
|
| - * Create a new connector over a |messagePipeHandle| using the given {@link AsyncWaiter} to get
|
| - * notified of changes on the handle.
|
| - */
|
| - public Connector(MessagePipeHandle messagePipeHandle, AsyncWaiter asyncWaiter) {
|
| - mCancellable = null;
|
| - mMessagePipeHandle = messagePipeHandle;
|
| - mAsyncWaiter = asyncWaiter;
|
| - }
|
| -
|
| - /**
|
| - * Set the {@link MessageReceiver} that will receive message from the owned message pipe.
|
| - */
|
| - public void setIncomingMessageReceiver(MessageReceiver incomingMessageReceiver) {
|
| - mIncomingMessageReceiver = incomingMessageReceiver;
|
| - }
|
| -
|
| - /**
|
| - * Set the {@link ConnectionErrorHandler} that will be notified of errors on the owned message
|
| - * pipe.
|
| - */
|
| - public void setErrorHandler(ConnectionErrorHandler errorHandler) {
|
| - mErrorHandler = errorHandler;
|
| - }
|
| -
|
| - /**
|
| - * Start listening for incoming messages.
|
| - */
|
| - public void start() {
|
| - assert mCancellable == null;
|
| - registerAsyncWaiterForRead();
|
| - }
|
| -
|
| - /**
|
| - * @see MessageReceiver#accept(Message)
|
| - */
|
| - @Override
|
| - public boolean accept(Message message) {
|
| - try {
|
| - mMessagePipeHandle.writeMessage(message.getData(),
|
| - message.getHandles(), MessagePipeHandle.WriteFlags.NONE);
|
| - return true;
|
| - } catch (MojoException e) {
|
| - onError(e);
|
| - return false;
|
| - }
|
| - }
|
| -
|
| - /**
|
| - * Pass the owned handle of the connector. After this, the connector is disconnected. It cannot
|
| - * accept new message and it isn't listening to the handle anymore.
|
| - *
|
| - * @see org.chromium.mojo.bindings.HandleOwner#passHandle()
|
| - */
|
| - @Override
|
| - public MessagePipeHandle passHandle() {
|
| - cancelIfActive();
|
| - MessagePipeHandle handle = mMessagePipeHandle.pass();
|
| - if (mIncomingMessageReceiver != null) {
|
| - mIncomingMessageReceiver.close();
|
| - }
|
| - return handle;
|
| - }
|
| -
|
| - /**
|
| - * @see java.io.Closeable#close()
|
| - */
|
| - @Override
|
| - public void close() {
|
| - cancelIfActive();
|
| - mMessagePipeHandle.close();
|
| - if (mIncomingMessageReceiver != null) {
|
| - mIncomingMessageReceiver.close();
|
| - }
|
| - }
|
| -
|
| - private class AsyncWaiterCallback implements AsyncWaiter.Callback {
|
| -
|
| - /**
|
| - * @see org.chromium.mojo.system.AsyncWaiter.Callback#onResult(int)
|
| - */
|
| - @Override
|
| - public void onResult(int result) {
|
| - Connector.this.onAsyncWaiterResult(result);
|
| - }
|
| -
|
| - /**
|
| - * @see org.chromium.mojo.system.AsyncWaiter.Callback#onError(MojoException)
|
| - */
|
| - @Override
|
| - public void onError(MojoException exception) {
|
| - Connector.this.onError(exception);
|
| - }
|
| -
|
| - }
|
| -
|
| - /**
|
| - * @see org.chromium.mojo.system.AsyncWaiter.Callback#onResult(int)
|
| - */
|
| - private void onAsyncWaiterResult(int result) {
|
| - mCancellable = null;
|
| - if (result == MojoResult.OK) {
|
| - readOutstandingMessages();
|
| - } else {
|
| - onError(new MojoException(result));
|
| - }
|
| - }
|
| -
|
| - private void onError(MojoException exception) {
|
| - mCancellable = null;
|
| - close();
|
| - if (mErrorHandler != null) {
|
| - mErrorHandler.onConnectionError(exception);
|
| - }
|
| - }
|
| -
|
| - /**
|
| - * Register to be called back when a new message is available on the owned message pipe.
|
| - */
|
| - private void registerAsyncWaiterForRead() {
|
| - assert mCancellable == null;
|
| - if (mAsyncWaiter != null) {
|
| - mCancellable = mAsyncWaiter.asyncWait(mMessagePipeHandle, Core.HandleSignals.READABLE,
|
| - Core.DEADLINE_INFINITE, mAsyncWaiterCallback);
|
| - } else {
|
| - onError(new MojoException(MojoResult.INVALID_ARGUMENT));
|
| - }
|
| - }
|
| -
|
| - /**
|
| - * Read all available messages on the owned message pipe.
|
| - */
|
| - private void readOutstandingMessages() {
|
| - int result;
|
| - do {
|
| - try {
|
| - result = readAndDispatchMessage(mMessagePipeHandle, mIncomingMessageReceiver);
|
| - } catch (MojoException e) {
|
| - onError(e);
|
| - return;
|
| - }
|
| - } while (result == MojoResult.OK);
|
| - if (result == MojoResult.SHOULD_WAIT) {
|
| - registerAsyncWaiterForRead();
|
| - } else {
|
| - onError(new MojoException(result));
|
| - }
|
| - }
|
| -
|
| - private void cancelIfActive() {
|
| - if (mCancellable != null) {
|
| - mCancellable.cancel();
|
| - mCancellable = null;
|
| - }
|
| - }
|
| -
|
| - /**
|
| - * 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.
|
| - */
|
| - 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 Message(buffer, result.getHandles()));
|
| - }
|
| - return result.getMojoResult();
|
| - }
|
| -}
|
|
|