Files
KLALB/src/org/kne/cloud/network/klalb/KLALBInputStream.java
T
Administrator 585b7c5fe6 KLALB大更新
新负载均衡算法
2023-07-02 13:20:11 +08:00

71 lines
1.7 KiB
Java

package org.kne.cloud.network.klalb;
import static org.kne.cloud.network.klalb.KLALBPacket.*;
import java.io.DataInputStream;
import java.io.EOFException;
import java.io.IOException;
import java.io.InputStream;
import java.io.StreamCorruptedException;
import java.net.Inet6Address;
public class KLALBInputStream extends DataInputStream {
public KLALBInputStream(InputStream in) throws IOException {
super(in);
byte[]b=new byte[5];
readFully(b);
String s=new String(b,"ascii");
if(!s.equals("KLALB")) {
throw new StreamCorruptedException("no KLALB format");
}
int bv=readInt();
int sv=readInt();
if(bv!=2)
throw new StreamCorruptedException("remote version is V"+bv+"."+sv+",not V2.0");
}
public synchronized KLALBPacket readPacket() throws IOException {
int type=read();
if(type==-1) {
throw new EOFException();
}
KLALBPacket klp;
switch(type) {
case PING:klp=new PINGPacket();
klp.readFromStream(this);
return klp;
case PONG:
klp=new PONGPacket();
klp.readFromStream(this);
return klp;
case SYNT:
klp=new SYNTPacket();
klp.readFromStream(this);
return klp;
case SACKT:
klp=new SACKTPacket();
klp.readFromStream(this);
return klp;
case RST:
klp=new RSTPacket();
klp.readFromStream(this);
return klp;
case DATAT:
klp=new DATATPacket();
klp.readFromStream(this);
return klp;
case ACKT:
klp=new ACKTPacket();
klp.readFromStream(this);
return klp;
case VADDR:
klp=new VADDRPacket();
klp.readFromStream(this);
return klp;
case LINES:
klp=new LINESPacket();
klp.readFromStream(this);
return klp;
}
throw new StreamCorruptedException("unknown package type:"+type);
}
}