package com.mogujie.tt.imlib.proto;
import com.mogujie.tt.config.ProtocolConstant;
import com.mogujie.tt.config.SysConstant;
import com.mogujie.tt.entity.User;
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:请求(返回)登陆消息服务器 yugui 2014-05-04
*/
public class LoginPacket extends Packet {
private Logger logger = Logger.getLogger(LoginPacket.class);
public LoginPacket() {
}
public LoginPacket(String _user_id_url, String _user_token, int _online_status,
int _client_type, String _client_version) {
mRequest = new LoginRequest(_user_id_url, _user_token, _online_status, _client_type,
_client_version);
setNeedMonitor(true);
}
@Override
public DataBuffer encode() {
Header RequestLoginHeader = mRequest.getHeader();
DataBuffer headerBuffer = RequestLoginHeader.encode();
DataBuffer bodyBuffer = new DataBuffer();
LoginRequest req = (LoginRequest) 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 {
LoginResponse res = new LoginResponse();
Header ResponseLoginHeader = new Header();
ResponseLoginHeader.decode(buffer);
res.setHeader(ResponseLoginHeader);
if (ResponseLoginHeader.getServiceId() != ProtocolConstant.SID_LOGIN ||
ResponseLoginHeader.getCommandId() != ProtocolConstant.CID_LOGIN_RES_USERLOGIN)
return;
res.setServer_time(buffer.readInt());
int nResult = buffer.readInt();
res.setResult(nResult);
if (nResult == 0) {
res.setOnline_status(buffer.readInt());
res.setUserId(buffer.readString(buffer.readInt()));
res.setNickname(buffer.readString(buffer.readInt()));
res.setAvatar_url(buffer.readString(buffer.readInt()));
res.setTitle(buffer.readString(buffer.readInt()));
res.setPosition(buffer.readString(buffer.readInt()));
res.setRoleStatus(buffer.readInt());
res.setSex(buffer.readInt());
res.setDepartId(buffer.readString(buffer.readInt()));
res.setJobNumber(buffer.readInt());
res.setTelphone(buffer.readString(buffer.readInt()));
res.setEmail(buffer.readString(buffer.readInt()));
res.setToken(buffer.readString(buffer.readInt()));
}
mResponse = res;
} catch (Exception e) {
logger.e(e.getMessage());
}
}
public static class LoginRequest extends Request {
private String user_id_url;
private String user_token;
private int online_status;
private int client_type;
private String client_version;
public LoginRequest(String _user_id_url, String _user_token, int _online_status,
int _client_type, String _client_version) {
user_id_url = _user_id_url;
user_token = _user_token;
online_status = _online_status;
client_type = _client_type;
client_version = _client_version;
Header loginHeader = new Header();
//loginHeader.setFlag((short) SysConstant.PROTOCOL_FLAG);
loginHeader.setServiceId(ProtocolConstant.SID_LOGIN);
loginHeader.setCommandId(ProtocolConstant.CID_LOGIN_REQ_USERLOGIN);
loginHeader.setVersion((short) SysConstant.PROTOCOL_VERSION);
//loginHeader.setError((short) SysConstant.PROTOCOL_ERROR);
short seqNo = SequenceNumberMaker.getInstance().make();
loginHeader.setReserved(seqNo);
int contentLength = 4 + getUtf8Bytes(user_id_url).length+ 4 + getUtf8Bytes(user_token).length + 4 + 4 + 4
+ getUtf8Bytes(client_version).length;
loginHeader.setLength(SysConstant.PROTOCOL_HEADER_LENGTH + contentLength);
setHeader(loginHeader);
}
public String getClient_version() {
return client_version;
}
public void setClient_version(String client_version) {
this.client_version = client_version;
}
public int getOnline_status() {
return online_status;
}
public void setOnline_status(int online_status) {
this.online_status = online_status;
}
public int getClient_type() {
return client_type;
}
public void setClient_type(int client_type) {
this.client_type = client_type;
}
public String getUser_id_url() {
return user_id_url;
}
public void setUser_id_url(String user_id_url) {
this.user_id_url = user_id_url;
}
public String getUser_token() {
return user_token;
}
public void setUser_token(String user_token) {
this.user_token = user_token;
}
}
public static class LoginResponse extends Response {
private int server_time;
private int result;
private int online_status;
private String userId;
private String nickname;
private String avatar_url;
private String title;
private String position;
private int roleStatus;
private int sex;
private String departId;
private int jobNumber;
private String telphone;
private String email;
private String token;
public LoginResponse() {
}
public User getUser() {
User user = new User();
user.setOnlineStatus(online_status);
user.setUserId(userId);
user.setNickName(nickname);
user.setAvatarUrl(avatar_url);
user.setTitle(title);
user.setPosition(position);
user.setRoleStatus(roleStatus);
user.setSex(sex);
user.setDepartId(departId);
user.setJobNum(jobNumber);
user.setTelphone(telphone);
user.setEmail(email);
user.setToken(token);
return user;
}
public int getServer_time() {
return server_time;
}
public void setServer_time(int server_time) {
this.server_time = server_time;
}
public int getResult() {
return result;
}
public void setResult(int result) {
this.result = result;
}
public int getOnline_status() {
return online_status;
}
public void setOnline_status(int online_status) {
this.online_status = online_status;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public String getAvatar_url() {
return avatar_url;
}
public void setAvatar_url(String avatar_url) {
this.avatar_url = avatar_url;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getPosition() {
return position;
}
public void setPosition(String position) {
this.position = position;
}
public int getRoleStatus() {
return roleStatus;
}
public void setRoleStatus(int roleStatus) {
this.roleStatus = roleStatus;
}
public int getSex() {
return sex;
}
public void setSex(int sex) {
this.sex = sex;
}
public String getDepartId() {
return departId;
}
public void setDepartId(String departId) {
this.departId = departId;
}
public int getJobNumber() {
return jobNumber;
}
public void setJobNumber(int jobNumber) {
this.jobNumber = jobNumber;
}
public String getTelphone() {
return telphone;
}
public void setTelphone(String telphone) {
this.telphone = telphone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
}
}