Files
KLALB/src/org/kne/cloud/network/NetworkPacket.java
T
2025-11-15 11:08:16 +08:00

98 lines
2.4 KiB
Java

package org.kne.cloud.network;
import java.io.IOException;
import java.nio.channels.ReadableByteChannel;
import java.nio.channels.WritableByteChannel;
import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import org.kne.cloud.network.klalb.KLALBPacket;
import org.kne.debug.TimeDebugger;
public abstract class NetworkPacket implements Comparable<NetworkPacket>{
private static final boolean debugPassport=false;
public static final ByteBufferAllocator bufferAllocator=new ByteBufferAllocator(true);
//public static final ByteArrayPool dataarraypool_65535=new ByteArrayPool(10000, 65535);
//public static final ByteBufferPool databufferpool_65535=new ByteBufferPool(10000, 65535,false);
//public static final ByteBufferPool databufferpool_2048=new ByteBufferPool(10000, 2048,false);
//public static final ByteBufferPool databufferpool_40=new ByteBufferPool(10000, 40,false);
private final TimeDebugger passport;
{
if(debugPassport) {
passport=new TimeDebugger();
passport.putTime(getClass().getSimpleName()+ "_create");
}else {
passport=null;
}
}
public final void putTimePassport(String label) {
if(passport!=null) {
passport.putTime(label);
}
}
public final void printPassport() {
if(passport!=null) {
passport.printWithTimeFilter(100000000L);
}
}
public abstract long getTotalLength();
public long getPriority() {
return priority;
}
public void setPriority(long priority) {
this.priority = priority;
}
public long getSendseq() {
return sendseq;
}
private long priority;
private long sendseq;
private static final AtomicLong seqgen=new AtomicLong();
@Override
public int compareTo(NetworkPacket o) {
if(priority>o.priority) {
return 1;
}else if(priority<o.priority){
return -1;
}else {
if(sendseq>o.sendseq) {
return 1;
}else if(sendseq<o.sendseq){
return -1;
}else {
return 0;
}
}
}
public void genseq() {
this.sendseq=seqgen.getAndIncrement();
}
public abstract void writeToChannel(WritableByteChannel dto) throws IOException ;
public abstract void readFromChannel(ReadableByteChannel din,long length) throws IOException;
public void readFromChannel(ReadableByteChannel din) throws IOException{
readFromChannel(din,-1);
}
protected abstract boolean needEndPosition();
}