package org.kne.cloud.network.klalb; import java.util.Arrays; import java.util.Objects; import java.util.UUID; import java.util.concurrent.atomic.AtomicLong; import org.kne.cloud.network.mport.IPPort; public class KLALBBlock implements Comparable{ private static AtomicLong sng=new AtomicLong(1); public volatile long sn;//每个数据包的唯一编号 public volatile int cuid;//用于识别数据包的stream ID号 public volatile long number;//数据包的编号,用于排序 public volatile byte[]data;//数据内容 public volatile int command;//功能标记 0=PING 1=PONG 2=SYN 3=RST 4=KEEP public volatile long pingtime;//PING计时器 public volatile int cacheused; public volatile String lservice; public volatile IPPort lipport; public transient volatile long sendtime; public transient volatile int resend; public volatile long sendtimeForRTT; public KLALBBlock() { sn=sng.getAndIncrement(); } @Override public String toString() { StringBuilder sb=new StringBuilder(); sb.append(cuid); sb.append(' '); if(number>0) { if(data==null) { sb.append("DATA").append(number).append(':').append("EOF"); }else { sb.append("DATA").append(number).append(':').append(data.length); } }else if(number<0) { sb.append("ACK").append(-number).append(':').append(cacheused); }else { switch(command) { case 0: sb.append("PING"); break; case 1: sb.append("PONG"); break; case 2: sb.append("SYN:").append(lservice).append(" ").append(lipport); break; case 3: sb.append("RST"); break; } } return sb.toString(); } @Override public int compareTo(KLALBBlock o) { if(o.number>number) { return -1; }else if(o.number