Files
KLALB/src/org/kne/cloud/network/kltp/KLTPSessionPacket.java
T
2026-07-07 00:26:38 +08:00

106 lines
2.4 KiB
Java

package org.kne.cloud.network.kltp;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.ReadableByteChannel;
import java.nio.channels.WritableByteChannel;
import org.kne.cloud.network.ByteBufferAllocator;
import org.kne.cloud.network.NetworkPacket;
import org.kne.cloud.network.klalb.PortPacket;
import org.kne.io.KNEChannels;
public class KLTPSessionPacket extends NetworkPacket implements PortPacket{
private static final int KLTP_SESSION_HEADER_LENGTH=8;
private ByteBuffer header=NetworkPacket.bufferAllocator.allocate(KLTP_SESSION_HEADER_LENGTH);
private KLTPInputStream inputstream;
public KLTPSessionPacket(int sport, int dport,KLTPInputStream inputstream) {
setSrcPort(sport);
setDstPort(dport);
this.inputstream=inputstream;
}
public KLTPSessionPacket(int sport, int dport) {
setSrcPort(sport);
setDstPort(dport);
}
public KLTPSessionPacket() {
}
public KLTPSessionPacket(KLTPInputStream inputstream) {
super();
this.inputstream = inputstream;
}
public KLTPInputStream getInputstream() {
return inputstream;
}
@Override
public long getTotalLength() {
return KLTP_SESSION_HEADER_LENGTH;
}
@Override
public void writeToChannel(WritableByteChannel dto) throws IOException {
dto.write(header.slice(0, KLTP_SESSION_HEADER_LENGTH));
//System.out.println("writesession:"+header);
}
@Override
public void readFromChannel(ReadableByteChannel din, long length) throws IOException {
header.limit(KLTP_SESSION_HEADER_LENGTH);
KNEChannels.readFully(din, header);
header.flip();
//System.out.println("readsesion:"+header);
}
@Override
public int hashCode() {
return getSrcPort()^getDstPort();
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
KLTPSessionPacket other = (KLTPSessionPacket) obj;
return (getSrcPort()==other.getSrcPort())&&(getDstPort()==other.getDstPort());
}
@Override
protected boolean needEndPosition() {
return false;
}
public void setSrcPort(int sport) {
header.putInt(0,sport);
}
public void setDstPort(int dport) {
header.putInt(4,dport);
}
@Override
public int getSrcPort() {
return header.getInt(0);
}
@Override
public int getDstPort() {
return header.getInt(4);
}
@Override
public String toString() {
return "KLTPSession "+getSrcPort()+"->"+getDstPort();
}
}