@Override
 public ListenableFuture<Void> send(Message<byte[]> message) {
   updateLastWriteTime();
   SettableListenableFuture<Void> future = new SettableListenableFuture<Void>();
   try {
     this.session.sendMessage(this.codec.encode(message, this.session.getClass()));
     future.set(null);
   } catch (Throwable ex) {
     future.setException(ex);
   } finally {
     updateLastWriteTime();
   }
   return future;
 }