@Override public void transceive(List<ByteBuffer> request, Callback<List<ByteBuffer>> callback) throws IOException { stateLock.readLock().lock(); try { int serial = serialGenerator.incrementAndGet(); NettyDataPack dataPack = new NettyDataPack(serial, request); requests.put(serial, callback); writeDataPack(dataPack); } finally { stateLock.readLock().unlock(); } }
@Override public void writeBuffers(List<ByteBuffer> buffers) throws IOException { ChannelFuture writeFuture; stateLock.readLock().lock(); try { writeFuture = writeDataPack( new NettyDataPack(serialGenerator.incrementAndGet(), buffers)); } finally { stateLock.readLock().unlock(); } if (!writeFuture.isDone()) { try { writeFuture.await(); } catch (InterruptedException e) { Thread.currentThread().interrupt(); // Reset interrupt flag throw new IOException("Interrupted while writing Netty data pack", e); } } if (!writeFuture.isSuccess()) { throw new IOException("Error writing buffers", writeFuture.getCause()); } }
@Override public void transceive(List<ByteBuffer> request, Callback<List<ByteBuffer>> callback) throws IOException { stateLock.readLock().lock(); try { int serial = serialGenerator.incrementAndGet(); NettyDataPack dataPack = new NettyDataPack(serial, request); requests.put(serial, callback); writeDataPack(dataPack); } finally { stateLock.readLock().unlock(); } }
@Override public void writeBuffers(List<ByteBuffer> buffers) throws IOException { ChannelFuture writeFuture; stateLock.readLock().lock(); try { writeFuture = writeDataPack( new NettyDataPack(serialGenerator.incrementAndGet(), buffers)); } finally { stateLock.readLock().unlock(); } if (!writeFuture.isDone()) { try { writeFuture.await(); } catch (InterruptedException e) { Thread.currentThread().interrupt(); // Reset interrupt flag throw new IOException("Interrupted while writing Netty data pack", e); } } if (!writeFuture.isSuccess()) { throw new IOException("Error writing buffers", writeFuture.getCause()); } }