📄 qqeventprocessor.java
字号:
* 处理我被从群中删除事件
*
* @param e
* QQEvent
*/
private void processIAmRemovedFromCluster(QQEvent e) {
final ReceiveIMPacket packet = (ReceiveIMPacket)e.getSource();
ClusterModel c = main.getMVCHelper().getClusterModel(packet.header.sender);
if(c != null) {
main.getDisplay().syncExec(
new Runnable() {
public void run() {
// 如果sender等于自己的QQ号,则表示管理员把自己删除了,如果不是,
// 表示这个sender主动退出该群
if(packet.sender == main.getMyModel().getQQ())
main.getMVCHelper().removeCluster(packet.header.sender);
// 推入这个群通知
main.getMessageHelper().putClusterNotification(packet);
}
}
);
}
}
/**
* 处理我被其他人添加到某个群的事件
*
* @param e
* QQEvent
*/
private void processIAmAddedToCluster(QQEvent e) {
final ReceiveIMPacket packet = (ReceiveIMPacket)e.getSource();
ClusterModel c = main.getMVCHelper().getClusterModel(packet.header.sender);
if(c == null) {
main.getDisplay().syncExec(
new Runnable() {
public void run() {
main.getMVCHelper().addCluster(packet.header.sender, false);
main.getMessageHelper().putClusterNotification(packet);
}
}
);
}
}
/**
* 处理接收到群发消息
*
* @param e
* QQEvent
*/
private void processReceiveClusterIM(QQEvent e) {
final ReceiveIMPacket packet = (ReceiveIMPacket)e.getSource();
main.getDisplay().asyncExec(
new Runnable() {
public void run() {
main.getMessageHelper().putClusterIM(packet);
}
}
);
}
/**
* 处理退出群成功事件
*
* @param e
* QQEvent
*/
private void processClusterExitClusterSuccess(QQEvent e) {
final ClusterCommandReplyPacket packet = (ClusterCommandReplyPacket)e.getSource();
main.getDisplay().syncExec(
new Runnable() {
public void run() {
main.getMVCHelper().removeCluster(packet.clusterId);
}
}
);
}
/**
* 处理得到成员信息成功事件
*
* @param e
* QQEvent
*/
private void processClusterGetMemberInfoSuccess(QQEvent e) {
final ClusterCommandReplyPacket packet = (ClusterCommandReplyPacket)e.getSource();
main.getDisplay().syncExec(
new Runnable() {
public void run() {
ClusterModel c = (ClusterModel)main.getMVCHelper().getClusterModel(packet.clusterId);
if(c != null) {
Map members = c.getMembers();
// 对每个得到信息的成员,设置他们model的属性
Iterator iter = packet.memberInfos.iterator();
while(iter.hasNext()) {
QQFriend friend = (QQFriend)iter.next();
FriendModel f = (FriendModel)c.getMember(friend.qqNum);
if(f != null) {
f.addProperty(IQQNode.NICK, friend.nick);
f.addProperty(INode.NAME, friend.nick);
f.addProperty(IQQNode.HEAD, new Integer(friend.face));
f.addProperty(IQQNode.MEMBER, String.valueOf(friend.isMember()));
f.addProperty(IQQNode.CONTACT, ModelUtils.createContact(friend));
}
}
// 如果存在这个群的资料窗口,则刷新数据
if(main.getShellRegistry().hasClusterInfoWindow(c)) {
ClusterInfoWindow cis = main.getShellRegistry().getClusterInfoWindow(c);
cis.setClusterModel(c);
}
// 如果存在这个群的信息窗口,则刷新数据
if(main.getShellRegistry().hasSendClusterIMWindow(c))
main.getShellRegistry().getSendClusterIMWindow(c).refreshClusterInfo();
// 遍历当前打开的群信息窗口,如果存在这个群的子群,则刷新在线状态
Iterator i = main.getShellRegistry().getSendClusterIMWindowModelIterator();
while(i.hasNext()) {
ClusterModel model = (ClusterModel)i.next();
if(model.getParentClusterId() == c.getClusterId())
main.getShellRegistry().getSendClusterIMWindow(model).refreshClusterInfo();
}
main.getClient().getClusterOnlineMember(packet.clusterId);
}
}
}
);
}
/**
* 处理被系统踢出事件
*/
private void processKickedOutBySystem() {
main.getDisplay().asyncExec(
new Runnable() {
public void run() {
main.getClient().getUser().setStatus(QQ.QQ_FRIEND_STATUS_OFFLINE);
main.logout();
MessageDialog.openWarning(main.getShell(), LumaQQ.getString("message.box.common.warning.title"), LumaQQ.getString("message.box.login.twice"));
}
}
);
}
/**
* 处理创建群成功事件
*
* @param e
* QQEvent
*/
private void processClusterCreateSuccess(QQEvent e) {
final ClusterCommandReplyPacket packet = (ClusterCommandReplyPacket)e.getSource();
main.getDisplay().syncExec(
new Runnable() {
public void run() {
main.getMVCHelper().addCluster(packet.clusterId, true);
}
}
);
}
/**
* 处理请求发送文件事件
*
* @param e
* QQEvent
*/
private void processRequestSendFile(QQEvent e) {
final ReceiveIMPacket packet = (ReceiveIMPacket)e.getSource();
if(packet.fileArgs.transferType == QQ.QQ_TRANSFER_FILE) {
main.getDisplay().syncExec(
new Runnable() {
public void run() {
main.getMessageHelper().putSendFileRequestIM(packet);
}
}
);
} else {
log.debug("对方可能发出了如来神掌,我闪~");
}
}
/**
* 处理登陆未知错误事件
*/
private void processLoginUnknownError() {
main.getDisplay().syncExec(
new Runnable() {
public void run() {
main.getClient().getUser().setStatus(QQ.QQ_FRIEND_STATUS_OFFLINE);
main.stopStatusAnimation();
main.getUIHelper().setIconByStatus();
main.logout();
MessageDialog.openError(main.getShell(), LumaQQ.getString("message.box.login.fail.title"), LumaQQ.getString("message.box.login.unknown.error"));
}
}
);
}
/**
* 处理登陆超时事件
*
* @param e
* QQEvent
*/
private void processLoginTimeout() {
main.getDisplay().syncExec(
new Runnable() {
public void run() {
// 登录超时后自动重连
retryCount++;
if(retryCount > 6) {
main.getClient().getUser().setStatus(QQ.QQ_FRIEND_STATUS_OFFLINE);
main.stopStatusAnimation();
main.getUIHelper().setIconByStatus();
main.logout();
MessageDialog.openError(main.getShell(), LumaQQ.getString("message.box.login.fail.title"), LumaQQ.getString("message.box.login.timeout"));
} else {
// 奇数次:随机使用服务器
// 偶数次:随机使用服务器,强制使用TCP登录
boolean forceTcp = retryCount % 2 == 0;
QQUser me = main.getClient().getUser();
byte status = me.getStatus();
me.setStatus(QQ.QQ_FRIEND_STATUS_OFFLINE);
main.logout();
me.setStatus(status);
main.checkLogin(true, forceTcp);
}
}
}
);
}
/**
* 处理keep alive成功事件,主要就是保存一下当前在线人数
*
* @param e
* QQEvent
*/
private void processKeepAliveSuccess(QQEvent e) {
// 设置上线数
main.setCurrentOnlineNumber(String.valueOf(((KeepAliveReplyPacket)e.getSource()).onlines));
}
/*
* 这段代码不再使用,现在我们把删除失败当作是好友已经被删除
// 处理删除好友失败事件
private void processDeleteFriendFail(QQEvent e) {
// 得到被删除的QQ号
DeleteFriendPacket packet = (DeleteFriendPacket)e.getSource();
final Integer key = new Integer(packet.getTo());
// 除去删除走向映射,得到这个好友的组索引和组内索引
main.removeDeleteToMap(key);
// 打开消息框通知用户删除失败
main.getDisplay().syncExec(
new Runnable() {
public void run() {
MessageBox box = new MessageBox(main.getShell(), SWT.ICON_ERROR | SWT.OK);
box.setText(LumaQQ.getResourceString("message.box.common.fail.title"));
box.setMessage(LumaQQ.getResourceString("error.delete.friend.fail", new Object[] { key.toString() }));
box.open();
}
}
);
}*/
/**
* 处理删除好友成功事件
*
* @param e
* QQEvent
*/
private void processDeleteFriendSuccess(QQEvent e) {
// 得到被删除的QQ号
DeleteFriendPacket packet = (DeleteFriendPacket)e.getSource();
Integer key = new Integer(packet.getTo());
// 得到这个好友的组索引和组内索引,以及好友的model
final int[] indices = main.getMVCHelper().getFriendCoordinate(packet.getTo());
// 得到好友删除后的去向,可能是拖到陌生人或者黑名单里面了,也可能就是直接删了,那样就是null
final GroupModel g = main.removeDeleteToMap(key);
// 更新服务器端好友列表
// 这个功能不再使用,因为LumaQQ会允许不自动更新分组信息,所以,这里搞成自动的会带来问题
//main.getClient().removeFriendFromList(packet.getTo());
// 从model中删除
main.getDisplay().syncExec(
new Runnable() {
public void run() {
FriendModel f = null;
if(indices != null)
f = (FriendModel)main.getModel().removeItem(indices[0], indices[1]);
if(g != null && f != null) {
int gIndex = main.getModel().indexOf(g);
main.getModel().addItem(gIndex, f);
main.getUIHelper().adjustAnimateAfterDrag(f.getQQ(), indices[0], gIndex, f);
main.setGroupDirty(true);
}
}
}
);
}
/**
* 处理登陆密码错误事件
*/
private void processLoginPasswordError() {
main.getDisplay().syncExec(
new Runnable() {
public void run() {
// 隐藏窗口
main.setVisible(false);
// 退出登录
main.getClient().getUser().setStatus(QQ.QQ_FRIEND_STATUS_OFFLINE);
main.logout();
// 显示密码错误提示框
MessageDialog.openError(main.getShell(), LumaQQ.getString("message.box.login.fail.title"), LumaQQ.getString("error.login.password.wrong"));
// 再次显示登录对话框
LoginDialog login = new LoginDialog(main.getShell());
if(login.open()) {
// 创建QQ用户对象
QQUser me = new QQUser(login.getQQ(), login.getMd5Password());
if(login.isLoginHidden()) {
me.setLoginMode(QQ.QQ_LOGIN_MODE_HIDDEN);
me.setStatus(QQ.QQ_FRIEND_STATUS_HIDDEN);
} else {
me.setLoginMode(QQ.QQ_LOGIN_MODE_NORMAL);
me.setStatus(QQ.QQ_FRIEND_STATUS_ONLINE);
}
// 设置用户对象
main.getClient().setUser(me);
// 初始化用户文件路径
LumaQQ.initUserFilePath(me);
// 设置client,相当于刷新各种数据
main.setClient(main.getClient());
// relayout
main.getShutter().layout();
// 打开主界面
main.setVisible(true);
main.checkLogin(false, false);
} else
main.close();
}
}
);
}
/**
* 处理收到消息事件
*
* @param e
* QQEvent
*/
private void processReceiveNormalIM(QQEvent e) {
// 得到包,推入消息队列
final ReceiveIMPacket packet = (ReceiveIMPacket)e.getSource();
main.getDisplay().syncExec(
new Runnable() {
public void run() {
main.getMessageHelper().putNormalIM(packet);
}
}
);
}
/**
* 处理收到短消息事件
*
* @param e
* QQEvent
*/
private void processReceiveSMS(QQEvent e) {
// 得到包,推入消息队列
final ReceiveIMPacket packet = (ReceiveIMPacket)e.getSource();
main.getDisplay().syncExec(
new Runnable() {
public void run() {
main.getMessageHelper().putSMS(packet);
}
}
);
}
/**
* 处理收到系统通知事件
*
* @param e
* QQEvent
*/
private void processReceiveSystemNotification(QQEvent e) {
final SystemNotificationPacket packet = (SystemNotificationPacket)e.getSource();
main.getDisplay().asyncExec(
new Runnable() {
public void run() {
if(packet.type == QQ.QQ_MSG_SYS_ADD_FRIEND_APPROVED)
main.getMVCHelper().addFriendViewPart(packet.from);
main.getMessageHelper().putSystemNotificationAndUpdateAnimate(packet);
}
}
);
}
/**
* 处理好友状态改变事件
*
* @param e
* QQEvent
*/
private void processFriendChangeStatus(QQEvent e) {
final FriendStatus fs = ((FriendChangeStatusPacket) e.getSource()).friendStatus;
final FriendModel f = main.getMVCHelper().getFriendModel(fs.qqNum);
if(f != null) {
final String status = Util.getStatusString(fs.status);
main.getDisplay().syncExec(new Runnable() {
public void run() {
f.addProperty(IQQNode.IP, fs.ip);
f.addProperty(IQQNode.PORT, String.valueOf(fs.port));
// 状态确实改变时才需要以下操作
if(!status.equals(f.getStatus())) {
main.setFriendProperty(f, IQQNode.STATUS, status);
if(IQQNode.VALUE_ONLINE.equals(status) && OptionUtil.getInstance().isShowOnlineTip())
main.getTipHelper().getOnlineTipShell().addFriendModel(f);
}
}
});
}
}
/**
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -