class org.apache.cassandra.streaming.ConnectionHandler$OutgoingMessageHandler extends org.apache.cassandra.streaming.ConnectionHandler$MessageHandler
  minor version: 0
  major version: 59
  flags: flags: (0x0020) ACC_SUPER
  this_class: org.apache.cassandra.streaming.ConnectionHandler$OutgoingMessageHandler
  super_class: org.apache.cassandra.streaming.ConnectionHandler$MessageHandler
{
  private final java.util.concurrent.PriorityBlockingQueue<org.apache.cassandra.streaming.messages.StreamMessage> messageQueue;
    descriptor: Ljava/util/concurrent/PriorityBlockingQueue;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/concurrent/PriorityBlockingQueue<Lorg/apache/cassandra/streaming/messages/StreamMessage;>;

  void <init>(org.apache.cassandra.streaming.StreamSession);
    descriptor: (Lorg/apache/cassandra/streaming/StreamSession;)V
    flags: (0x0000) 
    Code:
      stack=7, locals=2, args_size=2
        start local 0 // org.apache.cassandra.streaming.ConnectionHandler$OutgoingMessageHandler this
        start local 1 // org.apache.cassandra.streaming.StreamSession session
         0: .line 354
            aload 0 /* this */
            aload 1 /* session */
            iconst_1
            invokespecial org.apache.cassandra.streaming.ConnectionHandler$MessageHandler.<init>:(Lorg/apache/cassandra/streaming/StreamSession;Z)V
         1: .line 344
            aload 0 /* this */
            new java.util.concurrent.PriorityBlockingQueue
            dup
            bipush 64
            new org.apache.cassandra.streaming.ConnectionHandler$OutgoingMessageHandler$1
            dup
            aload 0 /* this */
            invokespecial org.apache.cassandra.streaming.ConnectionHandler$OutgoingMessageHandler$1.<init>:(Lorg/apache/cassandra/streaming/ConnectionHandler$OutgoingMessageHandler;)V
            invokespecial java.util.concurrent.PriorityBlockingQueue.<init>:(ILjava/util/Comparator;)V
            putfield org.apache.cassandra.streaming.ConnectionHandler$OutgoingMessageHandler.messageQueue:Ljava/util/concurrent/PriorityBlockingQueue;
         2: .line 355
            return
        end local 1 // org.apache.cassandra.streaming.StreamSession session
        end local 0 // org.apache.cassandra.streaming.ConnectionHandler$OutgoingMessageHandler this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    3     0     this  Lorg/apache/cassandra/streaming/ConnectionHandler$OutgoingMessageHandler;
            0    3     1  session  Lorg/apache/cassandra/streaming/StreamSession;
    MethodParameters:
         Name  Flags
      session  

  protected java.lang.String name();
    descriptor: ()Ljava/lang/String;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.cassandra.streaming.ConnectionHandler$OutgoingMessageHandler this
         0: .line 359
            ldc "STREAM-OUT"
            areturn
        end local 0 // org.apache.cassandra.streaming.ConnectionHandler$OutgoingMessageHandler this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/cassandra/streaming/ConnectionHandler$OutgoingMessageHandler;

  public void enqueue(org.apache.cassandra.streaming.messages.StreamMessage);
    descriptor: (Lorg/apache/cassandra/streaming/messages/StreamMessage;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.cassandra.streaming.ConnectionHandler$OutgoingMessageHandler this
        start local 1 // org.apache.cassandra.streaming.messages.StreamMessage message
         0: .line 364
            aload 0 /* this */
            getfield org.apache.cassandra.streaming.ConnectionHandler$OutgoingMessageHandler.messageQueue:Ljava/util/concurrent/PriorityBlockingQueue;
            aload 1 /* message */
            invokevirtual java.util.concurrent.PriorityBlockingQueue.put:(Ljava/lang/Object;)V
         1: .line 365
            return
        end local 1 // org.apache.cassandra.streaming.messages.StreamMessage message
        end local 0 // org.apache.cassandra.streaming.ConnectionHandler$OutgoingMessageHandler this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    2     0     this  Lorg/apache/cassandra/streaming/ConnectionHandler$OutgoingMessageHandler;
            0    2     1  message  Lorg/apache/cassandra/streaming/messages/StreamMessage;
    MethodParameters:
         Name  Flags
      message  

  public void run();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=4, args_size=1
        start local 0 // org.apache.cassandra.streaming.ConnectionHandler$OutgoingMessageHandler this
         0: .line 372
            aload 0 /* this */
            getfield org.apache.cassandra.streaming.ConnectionHandler$OutgoingMessageHandler.socket:Ljava/net/Socket;
            invokestatic org.apache.cassandra.streaming.ConnectionHandler$OutgoingMessageHandler.getWriteChannel:(Ljava/net/Socket;)Lorg/apache/cassandra/io/util/DataOutputStreamPlus;
            astore 1 /* out */
        start local 1 // org.apache.cassandra.io.util.DataOutputStreamPlus out
         1: .line 375
            goto 8
         2: .line 377
      StackMap locals: org.apache.cassandra.io.util.DataOutputStreamPlus
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.cassandra.streaming.ConnectionHandler$OutgoingMessageHandler.messageQueue:Ljava/util/concurrent/PriorityBlockingQueue;
            lconst_1
            getstatic java.util.concurrent.TimeUnit.SECONDS:Ljava/util/concurrent/TimeUnit;
            invokevirtual java.util.concurrent.PriorityBlockingQueue.poll:(JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;
            checkcast org.apache.cassandra.streaming.messages.StreamMessage
            dup
            astore 2 /* next */
        start local 2 // org.apache.cassandra.streaming.messages.StreamMessage next
         3: ifnull 8
         4: .line 379
            getstatic org.apache.cassandra.streaming.ConnectionHandler.logger:Lorg/slf4j/Logger;
            ldc "[Stream #{}] Sending {}"
            aload 0 /* this */
            getfield org.apache.cassandra.streaming.ConnectionHandler$OutgoingMessageHandler.session:Lorg/apache/cassandra/streaming/StreamSession;
            invokevirtual org.apache.cassandra.streaming.StreamSession.planId:()Ljava/util/UUID;
            aload 2 /* next */
            invokeinterface org.slf4j.Logger.debug:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
         5: .line 380
            aload 0 /* this */
            aload 1 /* out */
            aload 2 /* next */
            invokevirtual org.apache.cassandra.streaming.ConnectionHandler$OutgoingMessageHandler.sendMessage:(Lorg/apache/cassandra/io/util/DataOutputStreamPlus;Lorg/apache/cassandra/streaming/messages/StreamMessage;)V
         6: .line 381
            aload 2 /* next */
            getfield org.apache.cassandra.streaming.messages.StreamMessage.type:Lorg/apache/cassandra/streaming/messages/StreamMessage$Type;
            getstatic org.apache.cassandra.streaming.messages.StreamMessage$Type.SESSION_FAILED:Lorg/apache/cassandra/streaming/messages/StreamMessage$Type;
            if_acmpne 8
         7: .line 382
            aload 0 /* this */
            invokevirtual org.apache.cassandra.streaming.ConnectionHandler$OutgoingMessageHandler.close:()Lcom/google/common/util/concurrent/ListenableFuture;
            pop
        end local 2 // org.apache.cassandra.streaming.messages.StreamMessage next
         8: .line 375
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual org.apache.cassandra.streaming.ConnectionHandler$OutgoingMessageHandler.isClosed:()Z
            ifeq 2
         9: .line 387
            goto 11
        start local 2 // org.apache.cassandra.streaming.messages.StreamMessage next
        10: .line 388
      StackMap locals: org.apache.cassandra.streaming.messages.StreamMessage
      StackMap stack:
            aload 0 /* this */
            aload 1 /* out */
            aload 2 /* next */
            invokevirtual org.apache.cassandra.streaming.ConnectionHandler$OutgoingMessageHandler.sendMessage:(Lorg/apache/cassandra/io/util/DataOutputStreamPlus;Lorg/apache/cassandra/streaming/messages/StreamMessage;)V
        end local 2 // org.apache.cassandra.streaming.messages.StreamMessage next
        11: .line 387
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.cassandra.streaming.ConnectionHandler$OutgoingMessageHandler.messageQueue:Ljava/util/concurrent/PriorityBlockingQueue;
            invokevirtual java.util.concurrent.PriorityBlockingQueue.poll:()Ljava/lang/Object;
            checkcast org.apache.cassandra.streaming.messages.StreamMessage
            dup
            astore 2 /* next */
        start local 2 // org.apache.cassandra.streaming.messages.StreamMessage next
        12: ifnonnull 10
        end local 2 // org.apache.cassandra.streaming.messages.StreamMessage next
        end local 1 // org.apache.cassandra.io.util.DataOutputStreamPlus out
        13: .line 389
            goto 22
        14: .line 390
      StackMap locals: org.apache.cassandra.streaming.ConnectionHandler$OutgoingMessageHandler
      StackMap stack: java.lang.InterruptedException
            astore 1 /* e */
        start local 1 // java.lang.InterruptedException e
        15: .line 392
            new java.lang.AssertionError
            dup
            aload 1 /* e */
            invokespecial java.lang.AssertionError.<init>:(Ljava/lang/Object;)V
            athrow
        end local 1 // java.lang.InterruptedException e
        16: .line 394
      StackMap locals:
      StackMap stack: java.lang.Throwable
            astore 1 /* e */
        start local 1 // java.lang.Throwable e
        17: .line 396
            aload 0 /* this */
            getfield org.apache.cassandra.streaming.ConnectionHandler$OutgoingMessageHandler.session:Lorg/apache/cassandra/streaming/StreamSession;
            aload 1 /* e */
            invokevirtual org.apache.cassandra.streaming.StreamSession.onError:(Ljava/lang/Throwable;)V
        end local 1 // java.lang.Throwable e
        18: .line 400
            aload 0 /* this */
            invokevirtual org.apache.cassandra.streaming.ConnectionHandler$OutgoingMessageHandler.signalCloseDone:()V
            goto 23
        19: .line 399
      StackMap locals:
      StackMap stack: java.lang.Throwable
            astore 3
        20: .line 400
            aload 0 /* this */
            invokevirtual org.apache.cassandra.streaming.ConnectionHandler$OutgoingMessageHandler.signalCloseDone:()V
        21: .line 401
            aload 3
            athrow
        22: .line 400
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual org.apache.cassandra.streaming.ConnectionHandler$OutgoingMessageHandler.signalCloseDone:()V
        23: .line 402
      StackMap locals:
      StackMap stack:
            return
        end local 0 // org.apache.cassandra.streaming.ConnectionHandler$OutgoingMessageHandler this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   24     0  this  Lorg/apache/cassandra/streaming/ConnectionHandler$OutgoingMessageHandler;
            1   13     1   out  Lorg/apache/cassandra/io/util/DataOutputStreamPlus;
            3    8     2  next  Lorg/apache/cassandra/streaming/messages/StreamMessage;
           10   11     2  next  Lorg/apache/cassandra/streaming/messages/StreamMessage;
           12   13     2  next  Lorg/apache/cassandra/streaming/messages/StreamMessage;
           15   16     1     e  Ljava/lang/InterruptedException;
           17   18     1     e  Ljava/lang/Throwable;
      Exception table:
        from    to  target  type
           0    13      14  Class java.lang.InterruptedException
           0    13      16  Class java.lang.Throwable
           0    18      19  any

  private void sendMessage(org.apache.cassandra.io.util.DataOutputStreamPlus, org.apache.cassandra.streaming.messages.StreamMessage);
    descriptor: (Lorg/apache/cassandra/io/util/DataOutputStreamPlus;Lorg/apache/cassandra/streaming/messages/StreamMessage;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=4, args_size=3
        start local 0 // org.apache.cassandra.streaming.ConnectionHandler$OutgoingMessageHandler this
        start local 1 // org.apache.cassandra.io.util.DataOutputStreamPlus out
        start local 2 // org.apache.cassandra.streaming.messages.StreamMessage message
         0: .line 408
            aload 2 /* message */
            aload 1 /* out */
            aload 0 /* this */
            getfield org.apache.cassandra.streaming.ConnectionHandler$OutgoingMessageHandler.protocolVersion:I
            aload 0 /* this */
            getfield org.apache.cassandra.streaming.ConnectionHandler$OutgoingMessageHandler.session:Lorg/apache/cassandra/streaming/StreamSession;
            invokestatic org.apache.cassandra.streaming.messages.StreamMessage.serialize:(Lorg/apache/cassandra/streaming/messages/StreamMessage;Lorg/apache/cassandra/io/util/DataOutputStreamPlus;ILorg/apache/cassandra/streaming/StreamSession;)V
         1: .line 409
            aload 1 /* out */
            invokevirtual org.apache.cassandra.io.util.DataOutputStreamPlus.flush:()V
         2: .line 410
            aload 2 /* message */
            invokevirtual org.apache.cassandra.streaming.messages.StreamMessage.sent:()V
         3: .line 411
            goto 10
         4: .line 412
      StackMap locals:
      StackMap stack: java.net.SocketException
            astore 3 /* e */
        start local 3 // java.net.SocketException e
         5: .line 414
            aload 0 /* this */
            getfield org.apache.cassandra.streaming.ConnectionHandler$OutgoingMessageHandler.session:Lorg/apache/cassandra/streaming/StreamSession;
            aload 3 /* e */
            invokevirtual org.apache.cassandra.streaming.StreamSession.onError:(Ljava/lang/Throwable;)V
         6: .line 415
            aload 0 /* this */
            invokevirtual org.apache.cassandra.streaming.ConnectionHandler$OutgoingMessageHandler.close:()Lcom/google/common/util/concurrent/ListenableFuture;
            pop
        end local 3 // java.net.SocketException e
         7: goto 10
         8: .line 417
      StackMap locals:
      StackMap stack: java.io.IOException
            astore 3 /* e */
        start local 3 // java.io.IOException e
         9: .line 419
            aload 0 /* this */
            getfield org.apache.cassandra.streaming.ConnectionHandler$OutgoingMessageHandler.session:Lorg/apache/cassandra/streaming/StreamSession;
            aload 3 /* e */
            invokevirtual org.apache.cassandra.streaming.StreamSession.onError:(Ljava/lang/Throwable;)V
        end local 3 // java.io.IOException e
        10: .line 421
      StackMap locals:
      StackMap stack:
            return
        end local 2 // org.apache.cassandra.streaming.messages.StreamMessage message
        end local 1 // org.apache.cassandra.io.util.DataOutputStreamPlus out
        end local 0 // org.apache.cassandra.streaming.ConnectionHandler$OutgoingMessageHandler this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0   11     0     this  Lorg/apache/cassandra/streaming/ConnectionHandler$OutgoingMessageHandler;
            0   11     1      out  Lorg/apache/cassandra/io/util/DataOutputStreamPlus;
            0   11     2  message  Lorg/apache/cassandra/streaming/messages/StreamMessage;
            5    7     3        e  Ljava/net/SocketException;
            9   10     3        e  Ljava/io/IOException;
      Exception table:
        from    to  target  type
           0     3       4  Class java.net.SocketException
           0     3       8  Class java.io.IOException
    MethodParameters:
         Name  Flags
      out      
      message  
}
SourceFile: "ConnectionHandler.java"
NestHost: org.apache.cassandra.streaming.ConnectionHandler
InnerClasses:
  abstract MessageHandler = org.apache.cassandra.streaming.ConnectionHandler$MessageHandler of org.apache.cassandra.streaming.ConnectionHandler
  OutgoingMessageHandler = org.apache.cassandra.streaming.ConnectionHandler$OutgoingMessageHandler of org.apache.cassandra.streaming.ConnectionHandler
  org.apache.cassandra.streaming.ConnectionHandler$OutgoingMessageHandler$1
  public final Type = org.apache.cassandra.streaming.messages.StreamMessage$Type of org.apache.cassandra.streaming.messages.StreamMessage