package com.wyp.materialqqlite.qqclient;
/**
* Created by WYP on 2015/1/29.
*/
import java.io.IOException;
import java.security.KeyManagementException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.UnrecoverableKeyException;
import java.security.cert.CertificateException;
import org.apache.http.HttpVersion;
import org.apache.http.client.HttpClient;
import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.conn.scheme.PlainSocketFactory;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.params.HttpProtocolParams;
import org.apache.http.protocol.HTTP;
import android.os.Handler;
import android.os.Message;
import com.wyp.materialqqlite.Utils;
import com.wyp.materialqqlite.qqclient.msglog.BuddyMsgLog;
import com.wyp.materialqqlite.qqclient.msglog.GroupMsgLog;
import com.wyp.materialqqlite.qqclient.msglog.MessageLogger;
import com.wyp.materialqqlite.qqclient.msglog.SessMsgLog;
import com.wyp.materialqqlite.qqclient.protocol.protocoldata.BuddyInfo;
import com.wyp.materialqqlite.qqclient.protocol.protocoldata.BuddyInfoResult;
import com.wyp.materialqqlite.qqclient.protocol.protocoldata.BuddyList;
import com.wyp.materialqqlite.qqclient.protocol.protocoldata.BuddyListResult;
import com.wyp.materialqqlite.qqclient.protocol.protocoldata.BuddyMessage;
import com.wyp.materialqqlite.qqclient.protocol.protocoldata.BuddyTeamInfo;
import com.wyp.materialqqlite.qqclient.protocol.protocoldata.GetC2CMsgSigResult;
import com.wyp.materialqqlite.qqclient.protocol.protocoldata.GetQQNumResult;
import com.wyp.materialqqlite.qqclient.protocol.protocoldata.GetSignResult;
import com.wyp.materialqqlite.qqclient.protocol.protocoldata.GroupInfo;
import com.wyp.materialqqlite.qqclient.protocol.protocoldata.GroupInfoResult;
import com.wyp.materialqqlite.qqclient.protocol.protocoldata.GroupList;
import com.wyp.materialqqlite.qqclient.protocol.protocoldata.GroupListResult;
import com.wyp.materialqqlite.qqclient.protocol.protocoldata.GroupMessage;
import com.wyp.materialqqlite.qqclient.protocol.protocoldata.KickMessage;
import com.wyp.materialqqlite.qqclient.protocol.protocoldata.MessageList;
import com.wyp.materialqqlite.qqclient.protocol.protocoldata.MessageSender;
import com.wyp.materialqqlite.qqclient.protocol.protocoldata.QQCallBackMsg;
import com.wyp.materialqqlite.qqclient.protocol.protocoldata.QQMsgType;
import com.wyp.materialqqlite.qqclient.protocol.protocoldata.QQStatus;
import com.wyp.materialqqlite.qqclient.protocol.protocoldata.RecentInfo;
import com.wyp.materialqqlite.qqclient.protocol.protocoldata.RecentList;
import com.wyp.materialqqlite.qqclient.protocol.protocoldata.RecentListResult;
import com.wyp.materialqqlite.qqclient.protocol.protocoldata.SessMessage;
import com.wyp.materialqqlite.qqclient.protocol.protocoldata.StatusChangeMessage;
import com.wyp.materialqqlite.qqclient.protocol.protocoldata.SysGroupMessage;
import com.wyp.materialqqlite.qqclient.task.ChangeStatusTask;
import com.wyp.materialqqlite.qqclient.task.GroupFaceSigTask;
import com.wyp.materialqqlite.qqclient.task.HeadPicTask;
import com.wyp.materialqqlite.qqclient.task.InfoTask;
import com.wyp.materialqqlite.qqclient.task.LoginTask;
import com.wyp.materialqqlite.qqclient.task.LogoutTask;
import com.wyp.materialqqlite.qqclient.task.QQNumTask;
import com.wyp.materialqqlite.qqclient.task.QQSignTask;
import com.wyp.materialqqlite.qqclient.task.SendMsgTask;
import com.wyp.materialqqlite.qqclient.task.TaskManager;
public class QQClient {
private static final String USER_AGENT = "Mozilla/4.0 " +
"(compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR " +
"1.1.4322; .NET CLR 2.0.50727; InfoPath.2; Alexa Toolbar)";
private QQUser m_QQUser = new QQUser();
private HttpClient m_httpClient;
private TaskManager m_taskMgr;
private TaskManager m_sendMsgTaskMgr;
private TaskManager m_recvMsgTaskMgr;
private long m_lSendMsgCnt = 0;
// 初始化客户端
public boolean init() {
if (null == m_httpClient) {
try {
KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
trustStore.load(null, null);
SSLSocketFactory sf = new SSLSocketFactoryEx(trustStore);
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
// 设置一些基本参数
HttpParams params = new BasicHttpParams();
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);
HttpProtocolParams.setUseExpectContinue(params, false);
HttpProtocolParams.setUserAgent(params, USER_AGENT);
// 超时设置
// ConnManagerParams.setTimeout(params, 1000);
HttpConnectionParams.setConnectionTimeout(params, 5000);// 连接超时(单位:毫秒)
//HttpConnectionParams.setSoTimeout(params, 30*1000); // 读取超时(单位:毫秒)
SchemeRegistry schReg = new SchemeRegistry();
schReg.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
schReg.register(new Scheme("https", sf, 443));
// 设置我们的HttpClient支持HTTP和HTTPS两种模式
//SchemeRegistry schReg = new SchemeRegistry();
//schReg.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
//schReg.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 443));
// 使用线程安全的连接管理来创建HttpClient
ClientConnectionManager connectionMgr = new ThreadSafeClientConnManager(params, schReg);
m_httpClient = new DefaultHttpClient(connectionMgr, params);
} catch (KeyStoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (CertificateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (KeyManagementException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnrecoverableKeyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
m_taskMgr = new TaskManager();
m_taskMgr.init(0);
m_sendMsgTaskMgr = new TaskManager();
m_sendMsgTaskMgr.init(1);
m_recvMsgTaskMgr = new TaskManager();
m_recvMsgTaskMgr.init(1);
return true;
}
// 反初始化客户端
public void uninit() {
m_sendMsgTaskMgr.shutdown();
m_recvMsgTaskMgr.shutdown();
m_taskMgr.shutdown();
// 由于以下HttpClient关闭连接代码需要在子线程调用,否则会报android.os.NetworkOnMainThreadException,所以这里不作释放了
// if (m_httpClient != null && m_httpClient.getConnectionManager() != null)
// m_httpClient.getConnectionManager().shutdown();
new Thread(){
@Override
public void run() {
if (m_httpClient != null && m_httpClient.getConnectionManager() != null)
m_httpClient.getConnectionManager().shutdown();
m_httpClient = null;
}
}.start();
m_QQUser.reset();
}
// 设置QQ号码
public void setQQNum(String strQQNum) {
if (!isOffline())
return;
m_QQUser.m_strQQNum = strQQNum;
m_QQUser.m_nQQUin = (int)Long.parseLong(strQQNum);
m_QQUser.m_UserInfo.m_nQQUin = m_QQUser.m_nQQUin;
m_QQUser.m_UserInfo.m_nQQNum = m_QQUser.m_nQQUin;
m_QQUser.m_UserInfo.m_bHasQQNum = true;
}
// 设置QQ号码和密码
public void setQQPwd(String strQQPwd) {
m_QQUser.m_strQQPwd = strQQPwd;
}
// 设置QQ号码和密码
public void setUser(String strQQNum, String strQQPwd) {
if (!isOffline())
return;
m_QQUser.m_strQQNum = strQQNum;
m_QQUser.m_strQQPwd = strQQPwd;
m_QQUser.m_nQQUin = (int)Long.parseLong(strQQNum);
m_QQUser.m_UserInfo.m_nQQUin = m_QQUser.m_nQQUin;
m_QQUser.m_UserInfo.m_nQQNum = m_QQUser.m_nQQUin;
m_QQUser.m_UserInfo.m_bHasQQNum = true;
}
// 设置登录状态
public void setLoginStatus(int nStatus) {
m_QQUser.m_nLoginStatus = nStatus;
}
// 获取QQ号码
public String getQQNum() {
return m_QQUser.m_strQQNum;
}
// 获取QQ密码
public String getQQPwd() {
return m_QQUser.m_strQQPwd;
}
// 获取登录状态
public int getLoginStatus() {
return m_QQUser.m_nLoginStatus;
}
public void setProxyHandler(Handler handler) {
m_QQUser.setProxyHandler(handler);
}
public void setNullProxyHandler(Handler handler) {
m_QQUser.setNullProxyHandler(handler);
}
public boolean sendProxyMsg(int nMsgId,
int nArg1, int nArg2, Object obj) {
return m_QQUser.sendProxyMsg(nMsgId, nArg1, nArg2, obj);
}
public void setCallBackHandler(Handler handler) {
m_QQUser.setCallBackHandler(handler);
}
public void setNullCallBackHandler(Handler handler) {
m_QQUser.setNullCallBackHandler(handler);
}
public boolean sendCallBackMsg(int nMsgId,
int nArg1, int nArg2, Object obj) {
return m_QQUser.sendCallBackMsg(nMsgId, nArg1, nArg2, obj);
}
public boolean isNullCallBack() {
return m_QQUser.isNullCallBack();
}
// 设置验证码
public void setVerifyCode(String strVerifyCode) {
m_QQUser.m_strVerifyCode = strVerifyCode;
}
// 登录
public boolean login() {
if (!isOffline()
|| Utils.isEmptyStr(m_QQUser.m_strQQNum)
|| Utils.isEmptyStr(m_QQUser.m_strQQPwd))
return false;
LoginTask task = new LoginTask("LoginTask", m_httpClient);
task.m_QQUser = m_QQUser;
task.m_recvMsgTaskMgr = m_recvMsgTaskMgr;
return m_taskMgr.addTask(task);
}
// 注销
public boolean logout() {
if (isOffline())
return false;
LogoutTask task = new LogoutTask("LogoutTask", m_httpClient);
task.m_QQUser = m_QQUser;
return m_taskMgr.addTask(task);
}
// 取消登录
public void cancelLogin() {
m_taskMgr.delAllTask();
m_sendMsgTaskMgr.delAllTask();
m_recvMsgTaskMgr.delAllTask();
}
// 改变在线状态
public void changeStatus(int nStatus) {
if (isOffline())
return;
String strTaskName = "ChangeStatusTask";
ChangeStatusTask task = new ChangeStatusTask(strTaskName, m_httpClient);
task.m_QQUser = m_QQUser;
task.m_nStatus = nStatus;
m_taskMgr.addTask(task);
}
// 更新好友列表
public void updateBuddyList() {
}
// 更新群列表
public void updateGroupList() {
}
// 更新最近联系人列表
public void updateRecentList() {
}
// 更新好友信息
public void updateBuddyInfo(int nQQUin) {
if (isOffline())
return;
String strTaskName = "InfoTask_B" + nQQUin;
InfoTask task = new InfoTask(strTaskName, m_httpClient);
task.m_QQUser = m_QQUser;
task.m_nType = InfoTask.OP_TYPE_GETBUDDYINFO;
task.m_nGroupCode = 0;
task.m_nQQUin = nQQUin;
m_taskMgr.addTask(task);
}
// 更新群成员信息
public void updateGroupMemberInfo(int nGroupCode, int nQQUin) {
if (isOffline())
return;
String strTaskName = "InfoTask_S_" + nGroupCode + "_" + nQQUin;
InfoTask task = new InfoTask(strTaskName, m_httpClient);
task.m_QQUser = m_QQUser;
task.m_nType = InfoTask.OP_TYPE_GETGMEMBERINFO;
task.m_nGroupCode = nGroupCode;
task.m_nQQUin = nQQUin;
m_taskMgr.addTask(task);
}
// 更新群信息
public void updateGroupInfo(int nGroupCode) {
if (isOffline())
return;
String strTaskName = "InfoTask_G_" + nGroupCode;
InfoTask task = new InfoTask(strTaskName, m_httpClient);
task.m_QQUser = m_QQUser;
task.m_nType = InfoTask.OP_TYPE_GETGROUPINFO;
task.m_nGroupCode = nGroupCode;
task.m_nQQUin = 0;
m_taskMgr.addTask(task);
}
// 更新好友号码
public void updateBuddyNum(int nQQUin) {
if (isOffline())
return;
String strTaskName = "QQNumTask_B_" + nQQUin;
QQNumTask task = new QQNumTask(strTaskName, m_httpClient);
task.m_QQUser = m_QQUser;
task.getBuddyNum(nQQUin);
m_taskMgr.addTask(task);
}
// 更新群成员号码
public void updateGroupMemberNum(int nGroupCode, int nQQUin) {
if (isOffline())
return;
String strTaskName = "QQNumTask_S_" + nGroupCode + "_" + nQQUin;
QQNumTask task = new QQNumTask(strTaskName, m_httpClient);
task.m_QQUser = m_QQUser;
task.getGMemberNum(nGroupCode, nQQUin);
m_taskMgr.addTask(task);
}
// 更新群号码
public void updateGroupNum(int nGroupCode) {
if (isOffline())
return;
String strTaskName = "QQNumTask_G_" + nGroupCode;
QQNumTask task = new QQNumTask(strTaskName, m_httpClient);
task.m_QQUser = m_QQUser;
task.getGroupNum(nGroupCode);
m_taskMgr.addTask(task);
}
// 更新好友个性签名
public void updateBuddySign(int nQQUin) {
if (isOffline())
return;
String strTaskName = "QQSignTask_BG_" + nQQUin;
QQSignTask task = new QQSignTask(strTaskName, m_httpClient);
task.m_QQUser = m_QQUser;
task.m_nType = QQSignTask.OP_TYPE_GET;
task.addGetParam(false, 0, nQQUin);
m_taskMgr.addTask(task);
}
// 更新群成员个性签名
public void updateGroupMemberSign(int nGroupCode, int nQQUin) {
if (isOffline())
return;
String strTaskName = "QQSignTask_SG_" + nGroupCode + "_" + nQQUin;
QQSignTask task = new QQSignTask(strTaskName, m_httpClient);
task.m_QQUser = m_QQUser;
task.m_nType = QQSignTask.OP_TYPE_GET;
task.addGetParam(true, nGroupCode, nQQUin);
m_taskMgr.addTask(task);
}
// 修改QQ个性签名
public void modifyQQSign(String strSign) {
if (isOffline() || null == strSign)
return;
String strTaskName = "QQSignTask_BS";
QQSignTask task = new QQSignTask(strTaskName, m_httpClient);
task.m_QQUser = m_QQUser;
task.m_nType = QQSignTask.OP_TYPE_SET;
task.addSetParam(strSign);
m_taskMgr.addTask(task);
}
// 更新好友头像
public void updateBuddyHeadPic(int nQQUin, int nQQNum) {
if (isOffline() || 0 == nQQUin || 0 == nQQNum)
return;
String strTaskName = "HeadPicTask_B_" + nQQUin;
HeadPicTask task = new HeadPicTask(strTaskName, m_httpClient);
task.m_QQUser = m_QQUser;
task.getBuddyHeadPic(nQQUin, nQQNum);
m_taskMgr.addTask(task);
}
// 更新群成员头像
public void updateGroupMemberHeadPic(int nGroupCode, int nQQUin, int nQQNum) {
if (isOffline() || 0 == nGroupCode || 0 == nQQUin || 0 == nQQNum)
return;
String strTaskName = "HeadPicTask_S_" + nGroupCode + "_" + nQQUin;
HeadPicTask task = new HeadPicTask(strTaskName, m_httpClient);
task.m_QQUser = m_QQUser;
task.getGMemberHeadPic(nGroupCode, nQQUin, nQQNum);
m_taskMgr.addTask(task);
}
// 更新群头像
public void updateGroupHeadPic(int nGroupCode, int nGroupNum) {
if (isOffline() || 0 == nGroupCode || 0 == nGroupNum)
return;
String strTaskName = "HeadPicTask_G_" + nGroupCode;
HeadPicTask task = new HeadPicTask(strTaskName, m_httpClient);
task.m_QQUser = m_QQUser;
task.getGroupHeadPic(nGroupCode, nGroupNum);
m_taskMgr.addTask(task);
}
// 更新群表情信令
public void updateGroupFaceSignal() {
if (isOffline())
return;
String strTaskName = "GroupFaceSigTask";
GroupFaceSigTask task = new GroupFaceSigTask(strTaskName, m_httpClient);
task.m_QQUser = m_QQUser;
m_taskMgr.addTask(task);
}
// 发送好友消息
public boolean sendBuddyMsg(int nToUin, int nTime, String strMsg) {
if (isOffline())
return false;
BuddyMessage buddyMsg = QQUtils.createBuddyMessage(nTime, strMsg);
String strName = "";
int nQQUin = nToUin;
BuddyInfo buddyInfo = m_QQUser.m_BuddyList.getBuddy(nQQUin);
if (buddyInfo != null) {
if (!Utils.isEmptyStr(buddyInfo.m_strMarkName))
strName = buddyInfo.m_strMarkName;
else
strName = buddyInfo.m_strNickName;
}
m_QQUser.m_MsgList.addBuddyMsg(nQQUin, strName, buddyMsg);
m_QQUser.m_MsgList.emptyBuddyUnreadMsgCount(nQQUin);
String strTaskName = "SendMsgTask_" + m_lSendMsgCnt;
m_lSendMsgCnt++;
SendMsgTask task = new SendMsgTask(strTaskName, m_httpClient);
task.m_QQUser = m_QQUser;
task.m_nMsgType = QQMsgType.QQ_MSG_TYPE_BUDDY;
task.addBuddyMsg(nToUin, nTime, strMsg);
return m_sendMsgTaskMgr.addTask(task);
}
// 发送群消息
public boolean sendGroupMsg(int nGroupId, int nTime, String strMsg) {
if (isOffline())
return false;
GroupMessage groupMsg = QQUtils.createGroupMessage(nTime, strMsg);
String strName = "";
int nGroupCode = m_QQUser.m_GroupList.getGroupCodeById(nGroupId);
GroupInfo groupInfo = m_QQUser.m_GroupList.getGroupByCode(nGroupCode);
if (groupInfo != null) {
strName = groupInfo.m_strName;
}
m_QQUser.m_MsgList.addGroupMsg(
nGroupCode, strName, groupMsg);
m_QQUser.m_MsgList.emptyGroupUnreadMsgCount(nGroupCode);
String strTaskName = "SendMsgTask_" + m_lSendMsgCnt;
m_lSendMsgCnt++;
SendMsgTask task = new SendMsgTask(strTaskName, m_httpClient);
task.m_QQUser = m_QQUser;
task.m_nMsgType = QQMsgType.QQ_MSG_TYPE_GROUP;
task.addGroupMsg(nGroupId, nTime, strMsg);
return m_sendMsgTaskMgr.addTask(task);
}
// 发送临时会话消息
public boolean sendSessMsg(int nGroupId, int nToUin, int nTime, String strMsg) {
if (isOffline())
return false;
SessMessage sessMsg = QQUtils.createSessMessage(nTime, strMsg);
String strName = "";
int nQQUin = nToUin;
int nGroupCode = 0;
BuddyInfo buddyInfo = null;
GroupInfo groupInfo = m_QQUser.m_GroupList.getGroupById(nGroupId);
if (groupInfo != null) {
nGroupCode = groupInfo.m_nGroupCode;
buddyInfo = groupInfo.getMemberByUin(nQQUin);
if (buddyInfo != null) {
if (!Utils.isEmptyStr(buddyInfo.m_strGroupCard))
strName = buddyInfo.m_strGroupCard;
else
strName = buddyInfo.m_strNickName;
}
}
m_QQUser.m_MsgList.addSessMsg(
nGroupCode, nQQUin, strName, sessMsg);
m_QQUser.m_MsgList.emptySessUnreadMsgCount(nGroupCode, nQQUin);
String strTaskName = "SendMsgTask_" + m_lSendMsgCnt;
m_lSendMsgCnt++;
SendMsgTask task = new SendMsgTask(strTaskName, m_httpClient);
task.m_QQUser = m_QQUser;
task.m_nMsgType = QQMsgType.QQ_MSG_TYPE_SESS;
task.addSessMsg(nGroupId, nToUin, nTime, strMsg);
return m_sendMsgTaskMgr.addTask(task);
}
// 是否离线状态
public boolean isOffline() {
return (QQStatus.OFFLINE == m_QQUser.m_nStatus) ? true : false;
}
//
// 获取在线状态
public int getStatus() {
return m_QQUser.m_nStatus;
}
// 获取验证码图片
public byte[] getVerifyCodePic() {
return m_QQUser.m_VerifyCodePic;
}
// 获取用户信息
public BuddyInfo getUserInfo() {
return m_QQUser.m_UserInfo;
}
// 获取好友列表
public BuddyList getBuddyList() {
return m_QQUser.m_BuddyList;
}
// 获取群列表
public GroupList getGroupList() {
return m_QQUser.m_GroupList;
}
// 获取最近联系人列表
public RecentList getRecentList() {
return m_QQUser.m_RecentList;
}
// 获取消息列表
public MessageList getMessageList() {
return m_QQUser.m_MsgList;
}
// 获取消息记录管理器
public MessageLogger getMsgLogger() {
return m_QQUser.m_MsgLogger;
}
// 获取用户文件夹存放路径
public String getUserFolder() {
return m_QQUser.getUserFolder();
}
// 设置用户文件夹存放路径
public void setUserFolder(String strPath) {
m_QQUser.setUserFolder(strPath);
}
// 获取个人文件夹存放路径
public String getPersonalFolder(int nUserNum) {
return m_QQUser.getPersonalFolder(nUserNum);
}
// 获取好友头像图片存放路径
public String getBuddyHeadPicFolder(int nUserNum) {
return m_QQUser.getBuddyHeadPicFolder(nUserNum);
}
// 获取群头像图片存放路径
public String getGroupHeadPicFolder(int nUserNum) {
return m_QQUser.getGroupHeadPicFolder(nUserNum);
}
// 获取群成员头像图片存放路径
public String getSessHeadPicFolder(int nUserNum) {
return m_QQUser.getSessHeadPicFolder(nUserNum);
}
// 获取聊天图片存放路径
public String getChatPicFolder(int nUserNum) {
return m_QQUser.getChatPicFolder(nUserNum);
}
// 获取用户头像图片全路径文件名
public String getUserHeadPicFullName(int nUserNum) {
return m_QQUser.getUserHeadPicFullName(nUserNum);
}
// 获取好友头像图片全路径文件名
public String getBuddyHeadPicFullName(int nQQNum) {
return m_QQUser.getBuddyHeadPicFullName(nQQNum);
}
// 获取群头像图片全路径文件名
public String getGroupHeadPicFullName(int nGroupNum) {
return m_QQUser.getGroupHeadPicFullName(nGroupNum);
}
// 获取群成员头像图片全路径文件名
public String getSessHeadPicFullName(int nQQNum) {
return m_QQUser.getSessHeadPicFullName(nQQNum);
}
// 获取聊天图片全路径文件名
public String getChatPicFullName(String strFileName) {
return m_QQUser.getChatPicFullName(strFileName);
}
// 获取消息记录全路径文件名
public String getMsgLogFullName(int nUserNum) {
return m_QQUser.getMsgLogFullName(nUserNum);
}
// // 判断是否需要更新好友头像
// public boolean isNeedUpdateBuddyHeadPic(int nQQNum) {
//
// }
//
// // 判断是否需要更新群头像
// public boolean isNeedUpdateGroupHeadPic(int nGroupNum) {
//
// }
//
// // 判断是否需要更新群成员头像
// public boolean isNeedUpdateSessHeadPic(int nQQNum) {
//
// }
// // 获取服务器时间
// public int GetServerTime() {
//
// }
public QQUser getQQUser() {
return m_QQUser;
}
public void handleProxyMsg(Message msg) {
switch (msg.what) {
case QQCallBackMsg.LOGIN_RESULT: // 登录返回消息
case QQCallBackMsg.LOGOUT_RESULT: // 注销返回消息
case QQCallBackMsg.UPDATE_USER_INFO: // 更新用户信息
case QQCallBackMsg.UPDATE_BUDDY_HEADPIC: // 更新好友头像
case QQCallBackMsg.UPDATE_GMEMBER_HEADPIC: // 更新群成员头像
case QQCallBackMsg.UPDATE_GROUP_HEADPIC: // 更新群头像
sendCallBackMsg(msg.what, msg.arg1, msg.arg2, msg.obj);
break;
case QQCallBackMsg.UPDATE_BUDDY_LIST: // 更新好友列表消息
onUpdateBuddyList(msg);
break;
case QQCallBackMsg.UPDATE_GROUP_LIST: // 更新群列表消息
onUpdateGroupList(msg);
break;
case QQCallBackMsg.UPDATE_RECENT_LIST: // 更新最近联系人列表消息
onUpdateRecentList(msg);
break;
case QQCallBackMsg.BUDDY_MSG: // 好友消息
onBuddyMsg(msg);
break;
case QQCallBackMsg.GROUP_MSG: // 群消息
onGroupMsg(msg);
break;
case QQCallBackMsg.SESS_MSG: // 临时会话消息
onSessMsg(msg);
break;
case QQCallBackMsg.STATUS_CHANGE_MSG: // 好友状态改变消息
onStatusChangeMsg(msg);
break;
case QQCallBackMsg.KICK_MSG: // 被踢下线消息
onKickMsg(msg);
break;
case QQCallBackMsg.SYS_GROUP_MSG: // 群系统消息
onSysGroupMsg(msg);
break;
case QQCallBackMsg.UPDATE_BUDDY_NUMBER: // 更新好友号码
onUpdateBuddyNumber(msg);
break;
case QQCallBackMsg.UPDATE_GMEMBER_NUMBER: // 更新群成员号码
onUpdateGMemberNumber(msg);
break;
case QQCallBackMsg.UPDATE_GROUP_NUMBER: // 更新群号码
onUpdateGroupNumber(msg);
break;
case QQCallBackMsg.UPDATE_BUDDY_SIGN: // 更新好友个性签名
onUpdateBuddySign(msg);
break;
case QQCallBackMsg.UPDATE_GMEMBER_SIGN: // 更新群成员个性签名
onUpdateGMemberSign(msg);
break;
case QQCallBackMsg.UPDATE_BUDDY_INFO: // 更新好友信息
onUpdateBuddyInfo(msg);
break;
case QQCallBackMsg.UPDATE_GMEMBER_INFO: // 更新群成员信息
onUpdateGMemberInfo(msg);
break;
case QQCallBackMsg.UPDATE_GROUP_INFO: // 更新群信息
onUpdateGroupInfo(msg);
break;
case QQCallBackMsg.UPDATE_C2CMSGSIG: // 更新临时会话信令
onUpdateC2CMsgSig(msg);
break;
case QQCallBackMsg.CHANGE_STATUS_RESULT: // 改变在线状态返回消息
onChangeStatusResult(msg);
break;
case QQCallBackMsg.INTERNAL_GETBUDDYDATA:
onInternal_GetBuddyData(msg);
break;
case QQCallBackMsg.INTERNAL_GETGROUPDATA:
onInternal_GetGroupData(msg);
break;
case QQCallBackMsg.INTERNAL_GETGMEMBERDATA:
onInternal_GetGMemberData(msg);
break;
case QQCallBackMsg.INTERNAL_GROUPID2CODE:
onInternal_GroupId2Code(msg);
break;
default:
break;
}
}
private void onUpdateBuddyList(Message msg) {
boolean bSuccess = false;
if (msg.obj != null) {
m_QQUser.m_BuddyList.reset();
BuddyListResult result = (BuddyListResult)msg.obj;
for (int i = 0; i < result.m_arrBuddyTeamInfo.size(); i++) {
BuddyTeamInfo buddyTeamInfo = result.m_arrBuddyTeamInfo.get(i);
if (buddyTeamInfo != null)
m_QQUser.m_BuddyList.addBuddyTeam(buddyTeamInfo);
}
result.m_arrBuddyTeamInfo.clear();
bSuccess = true;
}
sendCallBackMsg(msg.what, bSuccess ? 1 : 0, 0, null);
}
private void onUpdateGroupList(Message msg) {
boolean bSuccess = false;
if (msg.obj != null) {
m_QQUser.m_GroupList.reset();
GroupListResult result = (GroupListResult)msg.obj;
for (int i = 0; i < result.m_arrGroupInfo.size(); i++)
{
GroupInfo groupInfo = result.m_arrGroupInfo.get(i);
if (groupInfo != null)
m_QQUser.m_GroupList.addGroup(groupInfo);
}
result.m_arrGroupInfo.clear();
bSuccess = true;
}
sendCallBackMsg(msg.what, bSuccess ? 1 : 0, 0, null);
}
private void onUpdateRecentList(Message msg) {
boolean bSuccess = false;
if (msg.obj != null) {
m_QQUser.m_RecentList.reset();
RecentListResult result = (RecentListResult)msg.obj;
for (int i = 0; i < result.m_arrRecentInfo.size(); i++) {
RecentInfo recentInfo = result.m_arrRecentInfo.get(i);
if (recentInfo != null)
m_QQUser.m_RecentList.addRecent(recentInfo);
if (0 == recentInfo.m_nType) { // 好友
BuddyInfo buddyInfo = m_QQUser.m_BuddyList.getBuddy(recentInfo.m_nQQUin);
if (buddyInfo != null) {
MessageSender msgSender = m_QQUser.m_MsgList.getBuddyMsgSender(buddyInfo.m_nQQUin);
if (null == msgSender) {
msgSender = new MessageSender();
msgSender.m_nType = MessageSender.BUDDY;
msgSender.m_nGroupCode = 0;
msgSender.m_nQQUin = buddyInfo.m_nQQUin;
if (!Utils.isEmptyStr(buddyInfo.m_strMarkName))
msgSender.m_strName = buddyInfo.m_strMarkName;
else
msgSender.m_strName = buddyInfo.m_strNickName;
msgSender.m_nUnreadMsgCnt = 0;
m_QQUser.m_MsgList.addMsgSender(msgSender);
}
}
} else if (1 == recentInfo.m_nType) { // 群
GroupInfo groupInfo = m_QQUser.m_GroupList.getGroupById(recentInfo.m_nQQUin);
if (groupInfo != null) {
MessageSender msgSender = m_QQUser.m_MsgList.getGroupMsgSender(groupInfo.m_nGroupCode);
if (null == msgSender) {
msgSender = new MessageSender();
msgSender.m_nType = MessageSender.GROUP;
msgSender.m_nGroupCode = groupInfo.m_nGroupCode;
msgSender.m_nQQUin = 0;
msgSender.m_strName = groupInfo.m_strName;
msgSender.m_nUnreadMsgCnt = 0;
m_QQUser.m_MsgList.addMsgSender(msgSender);
}
}
}
}
result.m_arrRecentInfo.clear();
bSuccess = true;
}
sendCallBackMsg(msg.what, bSuccess ? 1 : 0, 0, null);
}
private void onBuddyMsg(Message msg) {
if (null == msg.obj)
return;
BuddyMessage buddyMsg = (BuddyMessage)msg.obj;
int nQQUin = buddyMsg.m_nFromUin;
BuddyInfo buddyInfo = m_QQUser.m_BuddyList.getBuddy(nQQUin);
if (null == buddyInfo)
return;
String strName;
if (!Utils.isEmptyStr(buddyInfo.m_strMarkName))
strName = buddyInfo.m_strMarkName;
else
strName = buddyInfo.m_strNickName;
m_QQUser.m_MsgList.addBuddyMsg(nQQUin, strName, buddyMsg);
sendCallBackMsg(msg.what, nQQUin, 0, msg.obj);
}
private void onGroupMsg(Message msg) {
if (null == msg.obj)
return;
GroupMessage groupMsg = (GroupMessage)msg.obj;
int nGroupCode = groupMsg.m_nGroupCode;
GroupInfo groupInfo = m_QQUser.m_GroupList.getGroupByCode(nGroupCode);
if (null == groupInfo)
return;
m_QQUser.m_MsgList.addGroupMsg(
nGroupCode, groupInfo.m_strName, groupMsg);
sendCallBackMsg(msg.what, nGroupCode, 0, msg.obj);
}
private void onSessMsg(Message msg) {
if (null == msg.obj)
return;
SessMessage sessMsg = (SessMessage)msg.obj;
int nQQUin = sessMsg.m_nFromUin;
int nGroupId = sessMsg.m_nGroupId;
int nGroupCode = 0;
BuddyInfo buddyInfo = null;
GroupInfo groupInfo = m_QQUser.m_GroupList.getGroupById(nGroupId);
if (null == groupInfo)
return;
nGroupCode = groupInfo.m_nGroupCode;
buddyInfo = groupInfo.getMemberByUin(nQQUin);
if (null == buddyInfo) {
buddyInfo = new BuddyInfo();
if (buddyInfo != null) {
buddyInfo.reset();
buddyInfo.m_nQQUin = sessMsg.m_nFromUin;
buddyInfo.m_nQQNum = sessMsg.m_nQQNum;
groupInfo.m_arrMember.add(buddyInfo);
}
updateGroupMemberInfo(nGroupCode, sessMsg.m_nFromUin);
}
String strName;
if (!Utils.isEmptyStr(buddyInfo.m_strGroupCard))
strName = buddyInfo.m_strGroupCard;
else
strName = buddyInfo.m_strNickName;
m_QQUser.m_MsgList.addSessMsg(
nGroupCode, nQQUin, strName, sessMsg);
sendCallBackMsg(msg.what, nGroupCode, nQQUin, msg.obj);
}
private void onSysGroupMsg(Message msg) {
if (null == msg.obj)
return;
SysGroupMessage sysGroupMsg = (SysGroupMessage)msg.obj;
int nGroupCode = sysGroupMsg.m_nGroupCode;
// m_QQUser.m_MsgList.addSystemMsg(nGroupCode, sysGroupMsg);
// if (sysGroupMsg.m_strSubType.equals("group_request_join_agree")) {
// msgSender.m_strLastMsg = "某人已同意你加入群 xx群";
// } else if (sysGroupMsg.m_strSubType.equals("group_request_join_deny")) {
// msgSender.m_strLastMsg = "某人把绝你加入群 xx群";
// } else if (sysGroupMsg.m_strSubType.equals("group_leave")) {
// msgSender.m_strLastMsg = "某人已把你踢出群 xx群";
// }
sendCallBackMsg(msg.what, nGroupCode, 0, msg.obj);
}
private void onStatusChangeMsg(Message msg) {
if (null == msg.obj)
return;
StatusChangeMessage statusChangeMsg = (StatusChangeMessage)msg.obj;
int nQQUin = statusChangeMsg.m_nQQUin;
BuddyInfo buddyInfo = m_QQUser.m_BuddyList.getBuddy(nQQUin);
if (buddyInfo != null) {
buddyInfo.m_nStatus = statusChangeMsg.m_nStatus;
buddyInfo.m_nClientType = statusChangeMsg.m_nClientType;
BuddyTeamInfo buddyTeamInfo = m_QQUser.m_BuddyList.getBuddyTeam(buddyInfo.m_nTeamIndex);
if (buddyTeamInfo != null)
buddyTeamInfo.sort();
}
sendCallBackMsg(msg.what, nQQUin, 0, null);
}
private void onKickMsg(Message msg) {
if (null == msg.obj)
return;
KickMessage kickMsg = (KickMessage)msg.obj;
m_QQUser.m_nStatus = QQStatus.OFFLINE;
m_taskMgr.shutdown();
m_sendMsgTaskMgr.shutdown();
m_recvMsgTaskMgr.shutdown();
sendCallBackMsg(msg.what, 0, 0, null);
}
private void onUpdateBuddyNumber(Message msg) {
int nQQUin = 0;
if (msg.obj != null) {
GetQQNumResult result = (GetQQNumResult)msg.obj;
nQQUin = result.m_nQQUin;
BuddyInfo buddyInfo = m_QQUser.m_BuddyList.getBuddy(nQQUin);
if (buddyInfo != null)
buddyInfo.setQQNum(result);
MessageSender msgSender = m_QQUser.m_MsgList.getBuddyMsgSender(nQQUin);
if (msgSender != null && null == msgSender.m_objLastMsg) {
BuddyMsgLog msgLog = m_QQUser.m_MsgLogger.
readLastBuddyMsgLog(result.m_nQQNum);
msgSender.m_objLastMsg = QQUtils.createBuddyMessage(msgLog);
}
}
sendCallBackMsg(msg.what, nQQUin, 0, null);
}
private void onUpdateGMemberNumber(Message msg) {
int nGroupCode = msg.arg1;
int nQQUin = 0;
if (nGroupCode != 0 && msg.obj != null) {
GetQQNumResult result = (GetQQNumResult)msg.obj;
nQQUin = result.m_nQQUin;
BuddyInfo buddyInfo = m_QQUser.m_GroupList.getGroupMemberByCode(nGroupCode, nQQUin);
if (buddyInfo != null)
buddyInfo.setQQNum(result);
MessageSender msgSender = m_QQUser.m_MsgList.getSessMsgSender(nGroupCode, nQQUin);
if (msgSender != null && null == msgSender.m_objLastMsg) {
SessMsgLog msgLog = m_QQUser.m_MsgLogger.
readLastSessMsgLog(result.m_nQQNum);
msgSender.m_objLastMsg = QQUtils.createSessMessage(msgLog);
}
}
sendCallBackMsg(msg.what, nGroupCode, nQQUin, null);
}
private void onUpdateGroupNumber(Message msg) {
int nGroupCode = msg.arg1;
if (nGroupCode != 0 && msg.obj != null) {
GetQQNumResult result = (GetQQNumResult)msg.obj;
GroupInfo groupInfo = m_QQUser.m_GroupList.getGroupByCode(nGroupCode);
if (groupInfo != null)
groupInfo.setGroupNumber(result);
MessageSender msgSender = m_QQUser.m_MsgList.getGroupMsgSender(nGroupCode);
if (msgSender != null && null == msgSender.m_objLastMsg) {
GroupMsgLog msgLog = m_QQUser.m_MsgLogger.
readLastGroupMsgLog(result.m_nQQNum);
msgSender.m_objLastMsg = QQUtils.createGroupMessage(msgLog);
}
}
sendCallBackMsg(msg.what, nGroupCode, 0, null);
}
private void onUpdateBuddySign(Message msg) {
int nQQUin = 0;
if (msg.obj != null) {
GetSignResult result = (GetSignResult)msg.obj;
nQQUin = result.m_nQQUin;
if (m_QQUser.m_UserInfo.m_nQQUin == nQQUin) // 更新用户个性签名
{
m_QQUser.m_UserInfo.setQQSign(result);
}
else // 更新好友个性签名
{
BuddyInfo buddyInfo = m_QQUser.m_BuddyList.getBuddy(nQQUin);
if (buddyInfo != null)
buddyInfo.setQQSign(result);
}
}
sendCallBackMsg(msg.what, nQQUin, 0, null);
}
private void onUpdateGMemberSign(Message msg) {
int nGroupCode = msg.arg1;
int nQQUin = 0;
if (nGroupCode != 0 && msg.obj != null) {
GetSignResult result = (GetSignResult)msg.obj;
nQQUin = result.m_nQQUin;
BuddyInfo buddyInfo = m_QQUser.m_GroupList.getGroupMemberByCode(nGroupCode, nQQUin);
if (buddyInfo != null)
buddyInfo.setQQSign(result);
}
sendCallBackMsg(msg.what, nGroupCode, nQQUin, null);
}
private void onUpdateBuddyInfo(Message msg) {
int nQQUin = 0;
if (msg.obj != null) {
BuddyInfoResult result = (BuddyInfoResult)msg.obj;
nQQUin = result.m_nQQUin;
if (m_QQUser.m_UserInfo.m_nQQUin == nQQUin) // 更新用户信息
{
m_QQUser.m_UserInfo.setBuddyInfo(result);
}
else // 更新好友信息
{
BuddyInfo buddyInfo = m_QQUser.m_BuddyList.getBuddy(nQQUin);
if (buddyInfo != null)
buddyInfo.setBuddyInfo(result);
}
}
sendCallBackMsg(msg.what, nQQUin, 0, null);
}
private void onUpdateGMemberInfo(Message msg) {
int nGroupCode = msg.arg1;
int nQQUin = 0;
if (nGroupCode != 0 && msg.obj != null) {
BuddyInfoResult result = (BuddyInfoResult)msg.obj;
nQQUin = result.m_nQQUin;
BuddyInfo buddyInfo = m_QQUser.m_GroupList.getGroupMemberByCode(nGroupCode, nQQUin);
if (buddyInfo != null)
buddyInfo.setBuddyInfo(result);
}
sendCallBackMsg(msg.what, nGroupCode, nQQUin, null);
}
private void onUpdateGroupInfo(Message msg) {
int nGroupCode = 0;
if (msg.obj != null) {
GroupInfoResult result = (GroupInfoResult)msg.obj;
nGroupCode = result.m_nGroupCode;
GroupInfo groupInfo = m_QQUser.m_GroupList.getGroupByCode(nGroupCode);
if (groupInfo != null)
groupInfo.setGroupInfo(result);
}
sendCallBackMsg(msg.what, nGroupCode, 0, null);
}
private void onUpdateC2CMsgSig(Message msg) {
int nGroupId = 0;
int nQQUin = 0;
if (msg.obj != null) {
GetC2CMsgSigResult result = (GetC2CMsgSigResult)msg.obj;
nGroupId = result.m_nGroupId;
nQQUin = result.m_nQQUin;
GroupInfo groupInfo = m_QQUser.m_GroupList.getGroupById(nGroupId);
if (groupInfo != null) {
BuddyInfo buddyInfo = groupInfo.getMemberByUin(nQQUin);
if (buddyInfo != null)
buddyInfo.m_strGroupSig = result.m_strValue;
}
}
sendCallBackMsg(msg.what, nGroupId, nQQUin, null);
}
private void onChangeStatusResult(Message msg) {
boolean bSuccess = (msg.arg1 != 0 ? true : false);
int nNewStatus = msg.arg2;
if (bSuccess)
m_QQUser.m_nStatus = nNewStatus;
sendCallBackMsg(msg.what, msg.arg1, msg.arg2, msg.obj);
}
private void onInternal_GetBuddyData(Message msg) {
m_QQUser.m_internalData.m_nQQNum = 0;
m_QQUser.m_internalData.m_strNickName = null;
int nQQUin = msg.arg1;
BuddyInfo buddyInfo = m_QQUser.m_BuddyList.getBuddy(nQQUin);
if (null == buddyInfo) {
m_QQUser.notifyProxyMsg();
return;
}
m_QQUser.m_internalData.m_nQQNum = buddyInfo.m_nQQNum;
if (!Utils.isEmptyStr(buddyInfo.m_strMarkName))
m_QQUser.m_internalData.m_strNickName = new String(buddyInfo.m_strMarkName);
else if (buddyInfo.m_strNickName != null)
m_QQUser.m_internalData.m_strNickName = new String(buddyInfo.m_strNickName);
m_QQUser.notifyProxyMsg();
}
private void onInternal_GetGroupData(Message msg) {
m_QQUser.m_internalData.m_bHasGroupInfo = false;
m_QQUser.m_internalData.m_nGroupNum = 0;
int nGroupCode = msg.arg1;
GroupInfo groupInfo = m_QQUser.m_GroupList.getGroupByCode(nGroupCode);
if (null == groupInfo) {
m_QQUser.notifyProxyMsg();
return;
}
m_QQUser.m_internalData.m_bHasGroupInfo = groupInfo.m_bHasGroupInfo;
m_QQUser.m_internalData.m_nGroupNum = groupInfo.m_nGroupNumber;
m_QQUser.notifyProxyMsg();
}
private void onInternal_GetGMemberData(Message msg) {
m_QQUser.m_internalData.m_nQQNum = 0;
m_QQUser.m_internalData.m_strNickName = null;
int nGroupCode = msg.arg1;
int nQQUin = msg.arg2;
GroupInfo groupInfo = m_QQUser.m_GroupList.getGroupByCode(nGroupCode);
if (null == groupInfo) {
m_QQUser.notifyProxyMsg();
return;
}
BuddyInfo buddyInfo = groupInfo.getMemberByUin(nQQUin);
if (null == buddyInfo) {
m_QQUser.notifyProxyMsg();
return;
}
m_QQUser.m_internalData.m_nQQNum = buddyInfo.m_nQQNum;
if (!Utils.isEmptyStr(buddyInfo.m_strGroupCard))
m_QQUser.m_internalData.m_strNickName = new String(buddyInfo.m_strGroupCard);
else if (buddyInfo.m_strNickName != null)
m_QQUser.m_internalData.m_strNickName = new String(buddyInfo.m_strNickName);
m_QQUser.notifyProxyMsg();
}
private void onInternal_GroupId2Code(Message msg) {
GroupInfo groupInfo = m_QQUser.m_GroupList.getGroupById(msg.arg1);
if (groupInfo != null)
m_QQUser.m_internalData.m_nGroupCode = groupInfo.m_nGroupCode;
else
m_QQUser.m_internalData.m_nGroupCode = 0;
m_QQUser.notifyProxyMsg();
}
}