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;
/**
* MsgServerPacket:请求(返回)分配一个消息服务器的IP和端口 yugui 2014-05-04
*/
public class MsgServerPacket extends Packet {
private Logger logger = Logger.getLogger(MsgServerPacket.class);
public MsgServerPacket() {
mRequest = new MsgServerRequest();
setNeedMonitor(true);
}
@Override
public DataBuffer encode() {
Header RequestMsgServerHeader = mRequest.getHeader();
DataBuffer headerBuffer = RequestMsgServerHeader.encode();
int readable = headerBuffer.readableBytes();
DataBuffer buffer = new DataBuffer(readable);
buffer.writeDataBuffer(headerBuffer);
return buffer;
}
@Override
public void decode(DataBuffer buffer) {
if (null == buffer)
return;
try {
MsgServerResponse res = new MsgServerResponse();
Header ResponseMsgServerHeader = new Header();
ResponseMsgServerHeader.decode(buffer);
res.setHeader(ResponseMsgServerHeader);
if (ResponseMsgServerHeader.getServiceId() != ProtocolConstant.SID_LOGIN
||
ResponseMsgServerHeader.getCommandId() != ProtocolConstant.CID_LOGIN_RES_MSGSERVER)
return;
int nResult = buffer.readInt();
res.setResult(nResult);
if (nResult == 0) {
int len = buffer.readInt();
res.setStrIp1(buffer.readString(len));
len = buffer.readInt();
res.setStrIp2(buffer.readString(len));
res.setPort(buffer.readShort());
}
mResponse = res;
} catch (Exception e) {
logger.e(e.getMessage());
}
}
public static class MsgServerRequest extends Request {
public MsgServerRequest() {
Header msrHeader = new Header();
msrHeader.setVersion((short) SysConstant.PROTOCOL_VERSION);
//msrHeader.setFlag((short) SysConstant.PROTOCOL_FLAG);
msrHeader.setServiceId(ProtocolConstant.SID_LOGIN);
msrHeader.setCommandId(ProtocolConstant.CID_LOGIN_REQ_MSGSERVER);
//msrHeader.setError((short) SysConstant.PROTOCOL_ERROR);
short seqNo = SequenceNumberMaker.getInstance().make();
msrHeader.setReserved(seqNo);
msrHeader.setLength(SysConstant.PROTOCOL_HEADER_LENGTH);
setHeader(msrHeader);
}
}
public static class MsgServerResponse extends Response {
private int result;
private String strIp1;
private String strIp2;
private short port;
public MsgServerResponse() {
}
public int getResult() {
return result;
}
public void setResult(int result) {
this.result = result;
}
public String getStrIp1() {
return strIp1;
}
public void setStrIp1(String strIp1) {
this.strIp1 = strIp1;
}
public String getStrIp2() {
return strIp2;
}
public void setStrIp2(String strIp2) {
this.strIp2 = strIp2;
}
public short getPort() {
return port;
}
public void setPort(short port) {
this.port = port;
}
}
}