@Override public boolean onReadable() { if (!mReady) { try { mOutput.source().register(AdbServer.server().selector(), 0, this); } catch (ClosedChannelException e) { e.printStackTrace(); return false; } } mOutputBuffer.clear(); int result = -1; try { result = mOutput.source().read(mOutputBuffer); } catch (IOException e) { e.printStackTrace(); } if (result < 0) { // Pipe is closed. return false; } else if (result > 0) { mOutputBuffer.flip(); AdbMessage message = new AdbMessage(); message.data = new byte[result]; mOutputBuffer.get(message.data); mPeer.enqueue(message); mReady = false; } return true; }
public void ready() { if (mInitialized == false) { mThread.start(); mInitialized = true; } try { mOutput.source().register(AdbServer.server().selector(), SelectionKey.OP_READ, this); mReady = true; } catch (ClosedChannelException e) { e.printStackTrace(); close(); } }
@Override public boolean onWritable() { try { if (mInputBuffer != null) { mInput.sink().write(mInputBuffer); if (!mInputBuffer.hasRemaining()) mInputBuffer = null; } if (mInputBuffer == null) { mInput.sink().register(AdbServer.server().selector(), SelectionKey.OP_WRITE, this); } return true; } catch (IOException e) { e.printStackTrace(); return false; } }
@Override public int enqueue(AdbMessage message) { if (mInputBuffer != null) return -1; mInputBuffer = ByteBuffer.wrap(message.data, 0, message.dataLength); try { mInput.sink().write(mInputBuffer); } catch (IOException e) { e.printStackTrace(); mInputBuffer = null; return -1; } if (mInputBuffer.hasRemaining()) { try { mInput.sink().register(AdbServer.server().selector(), SelectionKey.OP_WRITE, this); } catch (ClosedChannelException e) { mInputBuffer = null; return -1; } return 1; } mInputBuffer = null; return 0; }