package com.mogujie.tt.imlib.proto;
import java.util.List;
import com.mogujie.tt.config.ProtocolConstant;
import com.mogujie.tt.config.SysConstant;
import com.mogujie.tt.imlib.IMLoginManager;
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 CreateTempGroupPacket extends Packet {
private Logger logger = Logger.getLogger(CreateTempGroupPacket.class);
public CreateTempGroupPacket() {
// todo eric remove this
setNeedMonitor(true);
}
public CreateTempGroupPacket(String groupName, String groupAvatarUrl,
List<String> memberList) {
mRequest = new PacketRequest(groupName, groupAvatarUrl, memberList);
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.groupName);
bodyBuffer.writeString(req.groupAvatarUrl);
writeStringList(req.memberList, bodyBuffer);
int headLength = headerBuffer.readableBytes();
int bodyLength = bodyBuffer.readableBytes();
logger.d("tempgroup#message len:%d, header report len:%d", headLength
+ bodyLength, header.getLength());
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);
logger.d("tempgroup#header:%s", header);
// starts filling from here
res.result = buffer.readInt();
String groupId = buffer.readString();
String groupName = buffer.readString();
List<String> memberList = readStringList(buffer);
if (res.result == 0) {
res.entity.id = groupId;
res.entity.name = groupName;
res.entity.avatarUrl = "";
res.entity.creatorId = IMLoginManager.instance().getLoginId();
res.entity.type = IMSession.SESSION_TEMP_GROUP;
res.entity.updated = (int) (System.currentTimeMillis() / 1000L);
logger.d("updated#updated:%d", res.entity.updated);
res.entity.memberIdList = memberList;
logger.d("tempgroup#group:%s", res.entity);
}
mResponse = res;
} catch (Exception e) {
logger.e("tempgroup#decode exception:%s", e.getMessage());
logger.e(e.getMessage());
}
}
public static class PacketRequest extends Request {
String groupName;
String groupAvatarUrl;
List<String> memberList;
public PacketRequest(String groupName, String groupAvatarUrl,
List<String> memberList) {
this.groupName = groupName;
this.groupAvatarUrl = groupAvatarUrl;
this.memberList = memberList;
Header header = new DefaultHeader(ProtocolConstant.SID_GROUP,
ProtocolConstant.CID_GROUP_CREATE_TMP_GROUP_REQUEST);
int contentLength = getStringLen(groupName)
+ getStringLen(groupAvatarUrl)
+ getStringListLen(memberList);
header.setLength(SysConstant.PROTOCOL_HEADER_LENGTH + contentLength);
setHeader(header);
}
}
public static class PacketResponse extends Response {
public int result;
public GroupEntity entity = new GroupEntity();
}
}