82 lines
1.7 KiB
Java
82 lines
1.7 KiB
Java
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<KLALBBlock>{
|
|
private static AtomicLong sng=new AtomicLong(1);
|
|
|
|
public long sn;//每个数据包的唯一编号
|
|
public int cuid;//用于识别数据包的stream ID号
|
|
public long number;//数据包的编号,用于排序
|
|
public byte[]data;//数据内容
|
|
public int command;//功能标记 0=PING 1=PONG 2=SYN 3=RST
|
|
public long pingtime;//PING计时器
|
|
public int cacheused;
|
|
|
|
public String lservice;
|
|
public IPPort lipport;
|
|
|
|
public transient volatile long sendtime;
|
|
public transient volatile int resend;
|
|
|
|
public 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<number){
|
|
return 1;
|
|
}else {
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
}
|