📄 qqeventprocessor.java
字号:
* 处理我被赋予管理员身份事件
*
* @param e
*/
private void processAdminEntitled(QQEvent e) {
final ReceiveIMPacket packet = (ReceiveIMPacket)e.getSource();
final Cluster c = ModelRegistry.getCluster(packet.header.sender);
if(c != null) {
// 修改相关数据
c.addAdmin(packet.memberQQ);
main.getDisplay().syncExec(new Runnable() {
public void run() {
// 如果接收者是我,表示我被设为管理员,推入这个群通知
if(packet.memberQQ == main.getMyModel().qq)
main.getMessageHelper().putClusterNotification(packet);
// 刷新群窗口
refreshClusterRelatedWindow(c);
}
});
}
}
/**
* 处理我被取消管理员身份事件
*
* @param e
*/
private void processAdminWithdrawed(QQEvent e) {
final ReceiveIMPacket packet = (ReceiveIMPacket)e.getSource();
final Cluster c = ModelRegistry.getCluster(packet.header.sender);
if(c != null) {
// 修改相关数据
c.removeAdmin(packet.memberQQ);
main.getDisplay().syncExec(new Runnable() {
public void run() {
// 如果接收者是我,表示我被取消管理员,推入这个群通知
if(packet.memberQQ == main.getMyModel().qq)
main.getMessageHelper().putClusterNotification(packet);
// 刷新群窗口
refreshClusterRelatedWindow(c);
}
});
}
}
/**
* 处理我被其他人添加到某个群的事件
*
* @param e
* QQEvent
*/
private void processIAmAddedToCluster(QQEvent e) {
final ReceiveIMPacket packet = (ReceiveIMPacket)e.getSource();
Cluster c = ModelRegistry.getCluster(packet.header.sender);
if(c == null) {
main.getDisplay().syncExec(new Runnable() {
public void run() {
main.getBlindHelper().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().syncExec(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.getBlindHelper().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() {
boolean showNick = main.getOptionHelper().isShowNick();
Cluster c = ModelRegistry.getCluster(packet.clusterId);
if(c != null) {
// 对每个得到信息的成员,设置他们model的属性
for(QQFriend friend : packet.memberInfos) {
ContactInfo info = ModelUtils.createContact(friend);
User f = ModelRegistry.getUser(friend.qqNum);
if(f != null) {
f.nick = friend.nick;
f.headId = friend.head;
f.member = friend.isMember();
f.userFlag = friend.userFlag;
f.female = !friend.isGG();
f.info = info;
if(!f.hasCardName())
f.displayName = showNick ? f.nick : (f.hasRemarkName() ? f.getRemarkName() : f.nick);
}
f = c.getMember(friend.qqNum);
if(f != null) {
f.nick = friend.nick;
f.headId = friend.head;
f.member = friend.isMember();
f.info = info;
f.userFlag = friend.userFlag;
f.female = !friend.isGG();
if(!f.hasCardName())
f.displayName = showNick ? f.nick : (f.hasRemarkName() ? f.getRemarkName() : f.nick);
}
}
// 如果存在这个群的资料窗口,则刷新数据
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<Integer> i = main.getShellRegistry().getSendClusterIMWindowModelIterator();
while(i.hasNext()) {
Cluster model = ModelRegistry.getCluster(i.next());
if(model == null)
continue;
if(model.parentClusterId == c.clusterId)
main.getShellRegistry().getSendClusterIMWindow(model).refreshClusterInfo();
}
// 得到在线成员
main.getClient().getClusterOnlineMember(packet.clusterId);
// 重画
main.getBlindHelper().refreshGroup(c.group);
}
}
});
}
/**
* 处理被系统踢出事件
*/
private void processKickedOutBySystem() {
main.getDisplay().asyncExec(new Runnable() {
public void run() {
main.getClient().getUser().setStatus(QQ.QQ_STATUS_OFFLINE);
main.logout();
MessageDialog.openWarning(main.getShell(), message_box_common_warning_title, 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.getBlindHelper().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_STATUS_OFFLINE);
main.getUIHelper().stopStatusAnimation();
main.getUIHelper().setTrayIconByStatus();
main.logout();
MessageDialog.openError(main.getShell(), message_box_login_fail_title, 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_STATUS_OFFLINE);
main.getUIHelper().stopStatusAnimation();
main.getUIHelper().setTrayIconByStatus();
main.logout();
MessageDialog.openError(main.getShell(), message_box_login_fail_title, message_box_login_timeout);
} else {
// 奇数次:随机使用服务器
// 偶数次:随机使用服务器,强制使用TCP登录
boolean forceTcp = retryCount % 2 == 0;
QQUser me = main.getClient().getUser();
byte status = me.getStatus();
me.setStatus(QQ.QQ_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
*/
private void processAddFriendSuccess(QQEvent e) {
final AddFriendExReplyPacket packet = (AddFriendExReplyPacket)e.getSource();
main.getDisplay().asyncExec(new Runnable() {
public void run() {
main.getBlindHelper().addFriend(packet.friendQQ);
}
});
}
/**
* 处理删除好友成功事件
*
* @param e
* QQEvent
*/
private void processDeleteFriendSuccess(QQEvent e) {
// 得到被删除的QQ号
final DeleteFriendPacket packet = (DeleteFriendPacket)e.getSource();
// 更新服务器端好友列表
// 这个功能不再使用,因为LumaQQ会允许不自动更新分组信息,所以,这里搞成自动的会带来问题
//main.getClient().removeFriendFromList(packet.getTo());
// 从model中删除
main.getDisplay().syncExec(new Runnable() {
public void run() {
// 得到好友删除后的去向,可能是拖到陌生人或者黑名单里面了,也可能就是直接删了,那样就是null
Group g = main.removeDeleteToMap(packet.getTo());
User f = ModelRegistry.getUser(packet.getTo());
if(f != null && !f.group.isBlackList())
main.getBlindHelper().simpleMove(f, f.group, g);
}
});
}
/**
* 处理登陆密码错误事件
* @param e
*/
private void processLoginFail(final QQEvent e) {
main.getDisplay().syncExec(new Runnable() {
public void run() {
main.restartLogin(e);
}
});
}
/**
* 处理收到消息事件
*
* @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 processReceiveSystemNotification(QQEvent e) {
final SystemNotificationPacket packet = (SystemNotificationPacket)e.getSource();
main.getDisplay().syncExec(new Runnable() {
public void run() {
main.getMessageHelper().putSystemNotificationAndUpdateAnimate(packet);
}
});
}
/**
* 处理好友状态改变事件
*
* @param e
* QQEvent
*/
private void processFriendChangeStatus(QQEvent e) {
final FriendChangeStatusPacket packet = (FriendChangeStatusPacket) e.getSource();
final User f = ModelRegistry.getUser(packet.friendQQ);
if(f != null) {
main.getDisplay().syncExec(new Runnable() {
public void run() {
// 状态确实改变时才需要以下操作
if(packet.userFlag != 0)
f.userFlag = packet.userFlag;
if(f.status.toQQConstant() != packet.status) {
f.status = Status.valueOf(packet.status);
main.getBlindHelper().refreshGroup(f.group);
// 检查最近联系人中是否有这个好友,如果有,更新状态
main.getBlindHelper().synchronizedLatestStatus(f, true);
// 如果需要,显示上线提示
if(f.isOnline() && main.getOptionHelper().isShowOnlineTip())
main.getTipHelper().getOnlineTipShell().addFriendModel(f);
}
}
});
}
}
/**
* 处理状态改变失败事件
*/
private void processChangeStatusFail() {
main.getDisplay().syncExec(new Runnable() {
public void run() {
MessageDialog.openWarning(main.getShell(), message_box_common_fail_title, error_change_status_fail);
}
});
}
/**
* 处理改变状态成功事件
*/
private void processChangeStatusSuccess() {
main.getDisplay().syncExec(new Runnable() {
public void run() {
main.getUIHelper().stopStatusAnimation();
main.getUIHelper().setTrayIconByStatus();
}
});
}
/**
* 处理得到在线好友列表的事件,判断好友的状态是否改变了,如果改变了,就刷新view
* 对于会员,我们把文字颜色设成红色
*
* @param e
* QQEvent
*/
private void processGetFriendOnlineSuccess(QQEvent e) {
// 得到包
GetOnlineOpReplyPacket packet = (GetOnlineOpReplyPacket)e.getSource();
// 循环检查各个好友的状态,如果改变了就设置
for(FriendOnlineEntry entry : packet.onlineFriends) {
// 搜索出这个好友的model
final User f = ModelRegistry.getUser(entry.status.qqNum);
if(f != null) {
// 得到状态,判断是否会员
tempHash.put(f, f);
// 如果状态改变了,更新view
if(f.status.toQQConstant() != entry.status.status) {
f.ip = entry.status.ip;
f.port = entry.status.port;
f.userFlag = entry.userFlag;
f.status = Status.valueOf(entry.status.status);
main.getBlindHelper().synchronizedLatestStatus(f, false);
if(!main.getTipHelper().isFirstTime() && f.isOnline() && main.getOptionHelper().isShowOnlineTip()) {
main.getDisplay().syncExec(new Runnable() {
public void run() {
main.getTipHelper().getOnlineTipShell().addFriendModel(f);
}
});
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -