package com.mogujie.tt.imlib.proto;
import java.util.ArrayList;
import java.util.List;
import com.mogujie.tt.config.ProtocolConstant;
import com.mogujie.tt.config.SysConstant;
import com.mogujie.tt.imlib.IMSession;
import com.mogujie.tt.log.Logger;
import com.mogujie.tt.packet.base.DataBuffer;
import com.mogujie.tt.packet.base.DefaultHeader;
import com.mogujie.tt.packet.base.Header;
import com.mogujie.tt.packet.base.Packet;
/**
* MsgServerPacket:请求(返回)登陆消息服务器 yugui 2014-05-04
*/
public class GroupPacket extends Packet {
private Logger logger = Logger.getLogger(GroupPacket.class);
public GroupPacket() {
setNeedMonitor(true);
}
public GroupPacket(int sessionType) {
mRequest = new PacketRequest(sessionType);
setNeedMonitor(true);
}
@Override
public DataBuffer encode() {
Header header = mRequest.getHeader();
DataBuffer headerBuffer = header.encode();
DataBuffer bodyBuffer = new DataBuffer();
PacketRequest req = (PacketRequest) mRequest;
if (null == req)
return null;
// bodyBuffer.writeString(req.getUser_id_url());
// bodyBuffer.writeString(req.getUser_token());
// bodyBuffer.writeInt(req.getOnline_status());
// bodyBuffer.writeInt(req.getClient_type());
// bodyBuffer.writeString(req.getClient_version());
int headLength = headerBuffer.readableBytes();
int bodyLength = bodyBuffer.readableBytes();
DataBuffer buffer = new DataBuffer(headLength + bodyLength);
buffer.writeDataBuffer(headerBuffer);
buffer.writeDataBuffer(bodyBuffer);
return buffer;
}
@Override
public void decode(DataBuffer buffer) {
if (null == buffer)
return;
try {
PacketResponse res = new PacketResponse();
Header header = new Header();
header.decode(buffer);
res.setHeader(header);
// starts filling from here
int cnt = buffer.readInt();
logger.d("group#group cnt:%d", cnt);
int prevType = 0;
for (int i = 0; i < cnt; ++i) {
GroupEntity entity = new GroupEntity();
/*
* String id; String name; String avatar; String creatorId; int
* type; // 1--normal group, 2--temporary group int updated;
* List<String> memberIdList;
*/
entity.id = buffer.readString();
entity.name = buffer.readString();
logger.d("group#name:%s", entity.name);
entity.avatarUrl = buffer.readString();
entity.creatorId = buffer.readString();
entity.type = buffer.readInt();
if (header.getCommandId() == ProtocolConstant.CID_GROUP_DIALOG_LIST_RESPONSE) {
entity.updated = buffer.readInt();
} else {
entity.updated = 0;
}
logger.d("group#type:%d", entity.type);
int memberListCnt = buffer.readInt();
logger.d("group#member cnt:%d", memberListCnt);
for (int j = 0; j < memberListCnt; ++j) {
String id = buffer.readString();
entity.memberIdList.add(id);
}
res.entityList.add(entity);
}
mResponse = res;
} catch (Exception e) {
logger.e("group#exception:%s", e.getStackTrace());
logger.e(e.getMessage());
}
}
public static class PacketRequest extends Request {
public PacketRequest(int groupType) {
int cid = (groupType == IMSession.SESSION_GROUP) ? ProtocolConstant.CID_GROUP_LIST_REQUEST
: ProtocolConstant.CID_GROUP_DIALOG_LIST_REQUEST;
Header header = new DefaultHeader(ProtocolConstant.SID_GROUP,
cid);
int contentLength = 0;
header.setLength(SysConstant.PROTOCOL_HEADER_LENGTH + contentLength);
setHeader(header);
}
}
public static class PacketResponse extends Response {
public List<GroupEntity> entityList = new ArrayList<GroupEntity>();
}
}