package com.mogujie.tt.packet.base;
import com.mogujie.tt.config.SysConstant;
import com.mogujie.tt.log.Logger;
/**
* TCP协议的头文件
*
* @author dolphinWang
* @time 2014/04/30
*/
public class Header {
private Logger logger = Logger.getLogger(Header.class);
private int length; // 数据包长度,包括包头
private int serviceId; // SID
private int commandId; // CID
private short version; // 版本号
private short reserved; // 保留,可用于如序列号等
public Header() {
length = 0;
version = 0;
serviceId = 0;
commandId = 0;
reserved = 0;
}
/**
* 头文件的压包函数
*
* @return 数据包
*/
public DataBuffer encode() {
DataBuffer db = new DataBuffer(SysConstant.PROTOCOL_HEADER_LENGTH);
db.writeInt(length);
db.writeShort((short) serviceId);
db.writeShort((short) commandId);
db.writeShort(version);
logger.d("packet#header encode -> length:%d, seviceId:%d, commandId:%d, version:%d, reserved:%d", length, serviceId, commandId, version, reserved);
db.writeShort(reserved);
return db;
}
/**
* 头文件的解包函数
*
* @param buffer
*/
public void decode(DataBuffer buffer) {
if (null == buffer)
return;
try {
length = buffer.readInt();
serviceId = buffer.readShort();
commandId = buffer.readShort();
version = buffer.readShort();
reserved = buffer.readShort();
logger.d(
"decode header, length:%d, version:%d, serviceId:%d, commandId:%d, reserved:%d",
length, version, serviceId, commandId,
reserved);
} catch (Exception e) {
logger.e(e.getMessage());
}
}
@Override
public String toString() {
// TODO Auto-generated method stub
return String
.format("decode header, length:%d, version:%d, serviceId:%d, commandId:%d, reserved:%d",
length, version, serviceId, commandId,
reserved);
}
public int getCommandId() {
return commandId;
}
public void setCommandId(int commandID) {
this.commandId = commandID;
}
public int getServiceId() {
return serviceId;
}
public void setServiceId(int serviceID) {
this.serviceId = serviceID;
}
public int getLength() {
return length;
}
public void setLength(int length) {
this.length = length;
}
public short getVersion() {
return version;
}
public void setVersion(short version) {
this.version = version;
}
public short getReserved() {
return reserved;
}
public void setReserved(short reserved) {
this.reserved = reserved;
}
}