⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sgip_command.java

📁 联通的SGIP协议Java实现
💻 JAVA
字号:
package spApi;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class SGIP_Command {
	protected byte[] bodybytes;
	protected MsgHead head;
	protected int TotalLength = 0;
	protected static Seq seq = null;
	public static final int LEN_SGIP_HEADER = 20;
	public static final int LEN_SGIP_BIND = 41;
	public static final int LEN_SGIP_BIND_RESP = 9;
	public static final int LEN_SGIP_UNBIND = 0;
	public static final int LEN_SGIP_UNBIND_RESP = 0;
	public static final int LEN_SGIP_SUBMIT = 123;
	public static final int LEN_SGIP_SUBMIT_RESP = 9;
	public static final int LEN_SGIP_DELIVER = 57;
	public static final int LEN_SGIP_DELIVER_RESP = 9;
	public static final int LEN_SGIP_REPORT = 44;
	public static final int LEN_SGIP_REPORT_RESP = 9;
	public static final int LEN_SGIP_USERRPT = 51;
	public static final int LEN_SGIP_USERRPT_RESP = 9;
	public static final int LEN_SGIP_TRACE = 41;
	public static final int LEN_SGIP_TRACE_RESP = 48;
	public static final int LEN_MAX_CONTENT = 160;
	public static final int TIMEOUT = 60000;
	public static final int SUBMIT_OK = 0;// 无错误命令正常接受
	public static final int SUBMIT_ERROR_STRUCTURE = 1;// 非法登录,如登录名、口令出错、登录名与口令不符等。
	public static final int SUBMIT_ERROR_COMMANDTYPE = 2;// 重复登录,如在同一TCP/IP连接中连续两次以上请求登录。
	public static final int SUBMIT_ERROR_SEQ_DUPLICATE = 3;// 连接过多,指单个节点要求同时建立的连接数过多。
	public static final int SUBMIT_ERROR_MSG_LENGTH = 4;// 登录类型错,指bind命令中的logintype字段出错。
	public static final int SUBMIT_ERROR_FEECODE = 5;// 参数格式错,指命令中参数值与参数类型不符或与协议规定的范围不符。
	public static final int SUBMIT_ERROR_CONTENT_LENGTH_EXCEED = 6;// 非法手机号码,协议中所有手机号码字段出现非86130号码或手机号码前未加“86”时都应报错。
	public static final int SUBMIT_ERROR_SERVERID = 7;
	public static final int SUBMIT_ERROR_FLOW_CONTROL = 8;
	public static final int SUBMIT_ERROR_OTHERS = 9;
	public static final int ID_SGIP_BIND = 1;
	public static final int ID_SGIP_BIND_RESP = -2147483647;
	public static final int ID_SGIP_UNBIND = 2;
	public static final int ID_SGIP_UNBIND_RESP = -2147483646;
	public static final int ID_SGIP_SUBMIT = 3;
	public static final int ID_SGIP_SUBMIT_RESP = -2147483645;
	public static final int ID_SGIP_DELIVER = 4;
	public static final int ID_SGIP_DELIVER_RESP = -2147483644;
	public static final int ID_SGIP_REPORT = 5;
	public static final int ID_SGIP_REPORT_RESP = -2147483643;
	public static final int ID_SGIP_USERRPT = 17;
	public static final int ID_SGIP_USERRPT_RESP = -2147483631;
	public static final int ID_SGIP_TRACE = 4096;
	public static final int ID_SGIP_TRACE_RESP = -2147479552;
	public static final int MSG_TYPE_ASCII = 0;
	public static final int MSG_TYPE_WRITECARD = 3;
	public static final int MSG_TYPE_BINARY = 4;
	public static final int MSG_TYPE_UCS2 = 8;
	public static final int MSG_TYPE_CHINESE = 15;
	public static final int READ_SGIP_INVALID = 0;
	public static final int READ_SGIP_DELIVER = 1;
	public static final int READ_SGIP_REPORT = 2;
	public static final int READ_SGIP_USERRPT = 3;
	public static final int READ_SGIP_UNBIND = 4;

	public SGIP_Command() {
		head = new MsgHead();
		if (seq == null)
			seq = new Seq();
	}

	public SGIP_Command(long paramLong)// paramLong公司编码
	{
		head = new MsgHead();
		if (seq == null)
			seq = new Seq();

		seq.setNodeId(paramLong);
	}

	public SGIP_Command(MsgHead paramMsgHead) {
		this.head = paramMsgHead;
		if (seq == null)
			seq = new Seq();
	}

	public SGIP_Command(SGIP_Command paramSGIP_Command) {
		head = paramSGIP_Command.head;
		bodybytes = paramSGIP_Command.bodybytes;
		TotalLength = paramSGIP_Command.TotalLength;
		seq = seq;
	}

	public SGIP_Command(long paramLong, int paramInt1, int paramInt2,
			int paramInt3, int paramInt4) {
		if (seq == null) {
			seq = new Seq(paramInt1, paramInt2);
		}

		seq.setNodeId(paramLong);

		this.TotalLength = (20 + paramInt3);

		this.head = new MsgHead();
		this.head.setTotalLength(this.TotalLength);
		this.head.setCommandID(paramInt4);
		this.head.setSeq_1(seq.getGlobalSeq_1());
		this.head.setSeq_2(seq.getGlobalSeq_2());
		this.head.setSeq_3(seq.getGlobalSeq_3());

		this.bodybytes = new byte[paramInt3];
	}

	public SGIP_Command(MsgHead paramMsgHead, int paramInt1, int paramInt2) {
		if (seq == null) {
			seq = new Seq();
		}

		this.TotalLength = (20 + paramInt1);

		this.head = new MsgHead();
		this.head.setTotalLength(this.TotalLength);
		this.head.setCommandID(paramInt2);
		this.head.setSeq_1(paramMsgHead.getSeq_1());
		this.head.setSeq_2(paramMsgHead.getSeq_2());
		this.head.setSeq_3(paramMsgHead.getSeq_3());

		this.bodybytes = new byte[paramInt1];
	}

	public SGIP_Command(long paramLong, int paramInt1, int paramInt2) {
		if (seq == null)
			seq = new Seq();

		seq.setNodeId(paramLong);

		this.TotalLength = (20 + paramInt1);

		this.head = new MsgHead();
		this.head.setTotalLength(this.TotalLength);
		this.head.setCommandID(paramInt2);
		this.head.setSeq_1(seq.getGlobalSeq_1());
		this.head.setSeq_2(seq.getGlobalSeq_2());
		this.head.setSeq_3(seq.getGlobalSeq_3());

		this.bodybytes = new byte[paramInt1];
	}

	public SGIP_Command(int paramInt1, int paramInt2) {
		if (seq == null) {
			seq = new Seq();
		}

		this.TotalLength = (20 + paramInt1);

		this.head = new MsgHead();
		this.head.setTotalLength(this.TotalLength);
		this.head.setCommandID(paramInt2);
		this.head.setSeq_1(seq.getGlobalSeq_1());
		this.head.setSeq_2(seq.getGlobalSeq_2());
		this.head.setSeq_3(seq.getGlobalSeq_3());

		this.bodybytes = new byte[paramInt1];
	}

	public int write(OutputStream paramOutputStream) {
		byte[] arrayOfByte;
		try {
			arrayOfByte = new byte[this.TotalLength];
			synchronized (Seq.seqclass) {
				Seq.computeSequence();
				this.head.setSeq_2(seq.getGlobalSeq_2());
				this.head.setSeq_3(seq.getGlobalSeq_3());
			}
			BytesCopy(this.head.Head, arrayOfByte, 0, 19, 0);
			BytesCopy(this.bodybytes, arrayOfByte, 0, TotalLength - 20 - 1, 20);
//			System.out.println("bobybytes1----->"+head.Head[2]);
//			System.out.println("bobybytes2----->"+bodybytes[2]);
//			System.out.println("bobybytes3------>"+bodybytes[3]);
//			System.out.println("bobybytes4------>"+bodybytes[4]);
//			System.out.println(arrayOfByte.equals(arrayOfByte));
			paramOutputStream.write(arrayOfByte);
			System.out.println("<><><><><><><><>"+TotalLength+"<><><><><><><><><><>"+"\n");
			return 0;
		} catch (Exception localException) {
			System.out.println(localException.toString());
		}
		return -1;
	}

	public SGIP_Command read(InputStream paramInputStream) throws IOException,
			Exception {
		head.read(paramInputStream);
		readdataintobody(paramInputStream);
		System.out.println("CommandID="+head.getCommandID());

		switch (head.getCommandID()) {
		case -2147483645:
			return new SubmitResp(this);
		case 4:
			return new Deliver(this);
		case -2147483644:
			return new DeliverResp(this);
		case 1:
			return new Bind(this);
		case -2147483647:
			return new BindResp(this);
		case 2:
			return new Unbind(this);
		case 3:
			return new Submit(this);
		case -2147483646:
			return new UnbindResp(this);
		case 5:
			return new Report(this);
		case -2147479552:
			return new TraceResp(this);
		case 17:
			return new Userrpt(this);
		}

		return null;
	}

	private void readdataintobody(InputStream paramInputStream)
			throws IOException, Exception {
		TotalLength = head.getTotalLength();
		bodybytes = new byte[this.TotalLength - 20];
		paramInputStream.read(bodybytes);
	}

	public int getTotalLength() {
		return this.head.getTotalLength();
	}

	public long getSeqno_1() {
		return this.head.getSeq_1();
	}

	public int getSeqno_2() {
		return this.head.getSeq_2();
	}

	public int getSeqno_3() {
		return this.head.getSeq_3();
	}

	public MsgHead getMsgHead() {
		return this.head;
	}

	public void setSeqno_1(long paramLong) {
		this.head.setSeq_1(paramLong);
	}

	public int getCommandID() {
		return this.head.getCommandID();
	}

	protected static int ByteToInt(byte paramByte) {
		return paramByte;
	}

	protected static byte IntToByte(int paramInt) {
		return (byte) paramInt;
	}

	protected static int BytesToInt(byte[] paramArrayOfByte) {
		return (((0xFF & paramArrayOfByte[0]) << 8) + paramArrayOfByte[1]);
	}

	protected static byte[] IntToBytes(int paramInt) {
		byte[] arrayOfByte = new byte[2];
		arrayOfByte[1] = (byte) (0xFF & paramInt);
		arrayOfByte[0] = (byte) ((0xFF00 & paramInt) >> 8);
		return arrayOfByte;
	}

	protected static byte[] IntToBytes4(int paramInt) {
		byte[] arrayOfByte = new byte[4];
		arrayOfByte[3] = (byte) (0xFF & paramInt);
		arrayOfByte[2] = (byte) ((0xFF00 & paramInt) >> 8);
		arrayOfByte[1] = (byte) ((0xFF0000 & paramInt) >> 16);
		arrayOfByte[0] = (byte) ((0xFF000000 & paramInt) >> 24);
		return arrayOfByte;
	}

	protected static byte[] LongToBytes4(long paramLong) {
		byte[] arrayOfByte = new byte[4];
		arrayOfByte[3] = (byte) (int) (0xFF & paramLong);
		arrayOfByte[2] = (byte) (int) ((0xFF00 & paramLong) >> 8);
		arrayOfByte[1] = (byte) (int) ((0xFF0000 & paramLong) >> 16);
		arrayOfByte[0] = (byte) (int) ((0xFF000000 & paramLong) >> 24);
		return arrayOfByte;
	}

	protected static void LongToBytes4(long paramLong, byte[] paramArrayOfByte) {
		paramArrayOfByte[3] = (byte) (int) (0xFF & paramLong);
		paramArrayOfByte[2] = (byte) (int) ((0xFF00 & paramLong) >> 8);
		paramArrayOfByte[1] = (byte) (int) ((0xFF0000 & paramLong) >> 16);
		paramArrayOfByte[0] = (byte) (int) ((0xFF000000 & paramLong) >> 24);
	}

	protected static void IntToBytes(int paramInt, byte[] paramArrayOfByte) {
		paramArrayOfByte[1] = (byte) (0xFF & paramInt);
		paramArrayOfByte[0] = (byte) ((0xFF00 & paramInt) >> 8);
	}

	protected static void IntToBytes4(int paramInt, byte[] paramArrayOfByte) {
		paramArrayOfByte[3] = (byte) (0xFF & paramInt);
		paramArrayOfByte[2] = (byte) ((0xFF00 & paramInt) >> 8);
		paramArrayOfByte[1] = (byte) ((0xFF0000 & paramInt) >> 16);
		paramArrayOfByte[0] = (byte) (int) ((0xFF000000 & paramInt) >> 24);
	}

	protected static int Bytes4ToInt(byte[] paramArrayOfByte) {
		return ((0xFF & paramArrayOfByte[0]) << 24
				| (0xFF & paramArrayOfByte[1]) << 16
				| (0xFF & paramArrayOfByte[2]) << 8 | 0xFF & paramArrayOfByte[3]);
	}

	protected static long Bytes4ToLong(byte[] paramArrayOfByte) {
		return ((0xFF & paramArrayOfByte[0]) << 24
				| (0xFF & paramArrayOfByte[1]) << 16
				| (0xFF & paramArrayOfByte[2]) << 8 | 0xFF & paramArrayOfByte[3]);
	}

	protected static void BytesCopy(byte[] paramArrayOfByte1,
			byte[] paramArrayOfByte2, int paramInt1, int paramInt2,
			int paramInt3) {
		int j = 0;
		for (int i = paramInt1; i <= paramInt2; ++i) {
			paramArrayOfByte2[(paramInt3 + j)] = paramArrayOfByte1[i];
			++j;
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -