package com.mogujie.tt.imlib.proto;
import com.mogujie.tt.config.ProtocolConstant;
import com.mogujie.tt.config.SysConstant;
import com.mogujie.tt.log.Logger;
import com.mogujie.tt.packet.base.DataBuffer;
import com.mogujie.tt.packet.base.Header;
import com.mogujie.tt.packet.base.Packet;
import com.mogujie.tt.utils.SequenceNumberMaker;
public class HeartBeatPacket extends Packet {
private Logger logger = Logger.getLogger(HeartBeatPacket.class);
public HeartBeatPacket() {
mRequest = new HeartBeatRequest();
setNeedMonitor(false);
}
@Override
public DataBuffer encode() {
Header heartbeatHeader = mRequest.getHeader();
DataBuffer headerBuffer = heartbeatHeader.encode();
// 这个协议没有body
return headerBuffer;
}
@Override
public void decode(DataBuffer buffer) {
if (null == buffer)
return;
try {
HeartBeatResponse res = new HeartBeatResponse();
Header ResponseHeartBeatHeader = new Header();
ResponseHeartBeatHeader.decode(buffer);
res.setHeader(ResponseHeartBeatHeader);
mResponse = res;
} catch (Exception e) {
logger.e(e.getMessage());
}
}
public static class HeartBeatRequest extends Request {
public HeartBeatRequest() {
Header recentcontactHeader = new Header();
recentcontactHeader
.setVersion((short) SysConstant.PROTOCOL_VERSION);
//recentcontactHeader.setFlag((short) SysConstant.PROTOCOL_FLAG);
recentcontactHeader.setServiceId(ProtocolConstant.SID_DEFAULT);
recentcontactHeader
.setCommandId(ProtocolConstant.CID_HEART_BEAT);
// recentcontactHeader.setError((short) SysConstant.PROTOCOL_ERROR);
short seqNo = SequenceNumberMaker.getInstance().make();
recentcontactHeader.setReserved(seqNo);
int contentLength = 0;
recentcontactHeader.setLength(SysConstant.PROTOCOL_HEADER_LENGTH
+ contentLength);
setHeader(recentcontactHeader);
}
}
// 服务器目前不会给心跳进行回复,但是会主动发心跳过来
public static class HeartBeatResponse extends Response {
}
}