forked from KNEMC/KLALB
优化代码,性能暴涨
This commit is contained in:
@@ -0,0 +1,140 @@
|
||||
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.ByteArrayPool;
|
||||
import org.kne.cloud.network.klalb.ByteBufferPool;
|
||||
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 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 TimeDebugger passport;
|
||||
{
|
||||
if(debugPassport) {
|
||||
passport=new TimeDebugger();
|
||||
passport.putTime(getClass().getSimpleName()+ "_create");
|
||||
}
|
||||
}
|
||||
|
||||
public void putTimePassport(String label) {
|
||||
if(passport!=null) {
|
||||
passport.putTime(label);
|
||||
}
|
||||
}
|
||||
|
||||
public void printPassport() {
|
||||
if(passport!=null) {
|
||||
passport.printWithTimeFilter(100000000L);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private volatile boolean disposeAfterSend=false;
|
||||
|
||||
public boolean isDisposeAfterSend() {
|
||||
return disposeAfterSend;
|
||||
}
|
||||
public void setDisposeAfterSend(boolean disposeAfterSend) {
|
||||
this.disposeAfterSend = disposeAfterSend;
|
||||
}
|
||||
private volatile boolean disposed=false;
|
||||
private Lock disposeLock=new ReentrantLock();
|
||||
public boolean isDisposed() {
|
||||
return disposed;
|
||||
}
|
||||
public Lock getDisposeLock() {
|
||||
return disposeLock;
|
||||
}
|
||||
public abstract long getLength();
|
||||
public void dispose() {
|
||||
/*disposeLock.lock();
|
||||
try {*/
|
||||
disposed=true;
|
||||
/*}finally {
|
||||
disposeLock.unlock();
|
||||
}*/
|
||||
}
|
||||
|
||||
public void lockAll() {
|
||||
disposeLock.lock();
|
||||
}
|
||||
|
||||
public boolean isSomeDisposed() {
|
||||
return disposed;
|
||||
}
|
||||
|
||||
public void unlockAll() {
|
||||
disposeLock.unlock();
|
||||
}
|
||||
|
||||
|
||||
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 disposeAll() {
|
||||
dispose();
|
||||
}
|
||||
|
||||
public void doDisposeAfterSend() {
|
||||
if(isDisposeAfterSend())
|
||||
dispose();
|
||||
}
|
||||
|
||||
public void genseq() {
|
||||
this.sendseq=seqgen.getAndIncrement();
|
||||
}
|
||||
|
||||
protected abstract void writeToChannel(WritableByteChannel dto) throws IOException ;
|
||||
protected abstract void readFromChannel(ReadableByteChannel din,long length) throws IOException;
|
||||
protected void readFromChannel(ReadableByteChannel din) throws IOException{
|
||||
readFromChannel(din,-1);
|
||||
}
|
||||
protected abstract boolean needEndPosition();
|
||||
}
|
||||
Reference in New Issue
Block a user