Files
KLALB/src/org/kne/cloud/network/klalb/KLALBBlock.java
T
2023-03-16 16:06:39 +08:00

82 lines
1.8 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 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<number){
return 1;
}else {
return 0;
}
}
}