📄 qqeventprocessor.java
字号:
/**
* 处理好友个性签名改变事件
*
* @param e
*/
private void processFriendSignatureChanged(QQEvent e) {
ReceiveIMPacket packet = (ReceiveIMPacket)e.getSource();
final User u = ModelRegistry.getUser(packet.signatureOwner);
if(u == null)
return;
u.signature = packet.signature;
u.signatureModifiedTime = packet.modifiedTime;
u.hasSignature = true;
if(u.qq == main.getMyModel().qq)
main.getMyModel().signature = u.signature;
main.getDisplay().syncExec(new Runnable() {
public void run() {
main.getBlindHelper().refreshGroup(u.group);
}
});
}
/**
* 处理转让身份成功事件
*
* @param e
*/
private void processTransferRoleSuccess(QQEvent e) {
final ClusterCommandReplyPacket packet = (ClusterCommandReplyPacket)e.getSource();
final Cluster c = ModelRegistry.getCluster(packet.clusterId);
if(c == null)
return;
c.creator = packet.memberQQ;
main.getDisplay().syncExec(new Runnable() {
public void run() {
boolean hasInfo = main.getShellRegistry().hasClusterInfoWindow(c);
// 如果存在这个群的资料窗口,则刷新数据
if(hasInfo) {
ClusterInfoWindow cis = main.getShellRegistry().getClusterInfoWindow(c);
cis.setClusterModel(c);
}
// 如果存在这个群的信息窗口,则刷新数据
boolean hasIM = !main.getOptionHelper().isUseTabIMWindow() && main.getShellRegistry().hasSendClusterIMWindow(c);
if(hasIM)
main.getShellRegistry().getSendClusterIMWindow(c).refreshClusterInfo();
// 如果标签页窗口是打开的
boolean hasTabIM = main.getOptionHelper().isUseTabIMWindow() && main.getShellRegistry().isSendIMTabWindowOpened();
if(hasTabIM) {
SendIMTabWindow sitw = main.getShellRegistry().getSendIMTabWindow();
sitw.refreshTab(c);
}
if(hasIM || hasTabIM || hasInfo) {
MessageDialog.openInformation(main.getShell(),
message_box_common_info_title,
message_box_role_transferred);
}
}
});
}
/**
* 处理设置角色失败事件
*
* @param e
*/
private void processRoleOpFail(QQEvent e) {
final ClusterCommandReplyPacket packet = (ClusterCommandReplyPacket)e.getSource();
final Cluster c = ModelRegistry.getCluster(packet.clusterId);
if(c == null)
return;
boolean hasInfo = main.getShellRegistry().hasClusterInfoWindow(c);
boolean hasIM = !main.getOptionHelper().isUseTabIMWindow() && main.getShellRegistry().hasSendClusterIMWindow(c);
boolean hasTabIM = main.getOptionHelper().isUseTabIMWindow() && main.getShellRegistry().isSendIMTabWindowOpened();
if(hasIM || hasTabIM || hasInfo) {
main.getDisplay().syncExec(new Runnable() {
public void run() {
MessageDialog.openError(main.getShell(),
message_box_common_fail_title,
packet.errorMessage);
}
});
}
}
/**
* 处理设置角色成功事件
*
* @param e
*/
private void processSetRoleSuccess(QQEvent e) {
final ClusterCommandReplyPacket packet = (ClusterCommandReplyPacket)e.getSource();
final Cluster c = ModelRegistry.getCluster(packet.clusterId);
if((packet.role & QQ.QQ_ROLE_ADMIN) != 0)
c.addAdmin(packet.memberQQ);
else
c.removeAdmin(packet.memberQQ);
main.getDisplay().syncExec(new Runnable() {
public void run() {
// 刷新所有群相关窗口,显示提示框
if(refreshClusterRelatedWindow(c)) {
if((packet.role & QQ.QQ_ROLE_ADMIN) != 0)
MessageDialog.openInformation(main.getShell(),
message_box_common_info_title,
message_box_admin_set);
else
MessageDialog.openInformation(main.getShell(),
message_box_common_info_title,
message_box_admin_unset);
}
}
});
}
/**
* 刷新所有群相关窗口
*
* @param c
* Cluster
* @return
* 如果群的某些窗口是打开的,返回true
*/
protected boolean refreshClusterRelatedWindow(Cluster c) {
boolean hasInfo = main.getShellRegistry().hasClusterInfoWindow(c);
// 如果存在这个群的资料窗口,则刷新数据
if(hasInfo) {
ClusterInfoWindow cis = main.getShellRegistry().getClusterInfoWindow(c);
cis.setClusterModel(c);
}
// 如果存在这个群的信息窗口,则刷新数据
boolean hasIM = !main.getOptionHelper().isUseTabIMWindow() && main.getShellRegistry().hasSendClusterIMWindow(c);
if(hasIM)
main.getShellRegistry().getSendClusterIMWindow(c).refreshClusterInfo();
// 如果标签页窗口是打开的
boolean hasTabIM = main.getOptionHelper().isUseTabIMWindow() && main.getShellRegistry().isSendIMTabWindowOpened();
if(hasTabIM) {
SendIMTabWindow sitw = main.getShellRegistry().getSendIMTabWindow();
sitw.refreshTab(c);
}
return hasIM || hasTabIM || hasInfo;
}
/**
* 处理批量得到群名片成功事件
*
* @param e
*/
private void processClusterGetCardBatchSuccess(QQEvent e) {
ClusterCommandReplyPacket packet = (ClusterCommandReplyPacket)e.getSource();
final Cluster c = ModelRegistry.getCluster(packet.clusterId);
if(c == null)
return;
if(c.cardUpdated)
return;
// 保存群名片名称
for(CardStub stub : packet.cardStubs) {
User m = c.getMember(stub.qq);
if(m == null)
continue;
m.cardName = stub.name;
if(m.hasCardName())
m.displayName = m.cardName;
}
// 如果还有更多名片,继续请求
if(packet.nextStart != 0)
main.getClient().getCardBatch(c.clusterId, packet.nextStart);
else {
c.cardUpdated = true;
main.getDisplay().syncExec(new Runnable() {
public void run() {
main.getBlindHelper().refreshGroup(c.group);
}
});
}
}
/**
* 处理更新组织架构成功事件
*
* @param e
*/
private void processClusterUpdateOrganizationSuccess(QQEvent e) {
ClusterCommandReplyPacket packet = (ClusterCommandReplyPacket)e.getSource();
Cluster c = ModelRegistry.getCluster(packet.clusterId);
c.removeAllOrganizations();
for(QQOrganization qqOrg : packet.organizations) {
Organization org = new Organization();
org.id = qqOrg.id;
org.path = qqOrg.path;
org.name = qqOrg.name;
c.addOrganization(org);
}
main.getClient().getClusterInfo(c.clusterId);
}
/**
* 处理子群操作成功事件
*
* @param e
*/
private void processClusterSubClusterOpSuccess(QQEvent e) {
ClusterCommandReplyPacket packet = (ClusterCommandReplyPacket)e.getSource();
switch(packet.subClusterOpByte) {
case QQ.QQ_CLUSTER_SUB_CMD_GET_DIALOG_LIST:
final Cluster dialogContainer = ModelRegistry.getDialogContainer();
if(dialogContainer != null) {
dialogContainer.removeAllSubClusters();
for(SimpleClusterInfo info : packet.subClusters) {
Cluster c = new Cluster();
c.clusterType = ClusterType.DIALOG;
c.clusterId = info.id;
c.name = info.name;
dialogContainer.addSubCluster(c);
ModelRegistry.addCluster(c);
main.getClient().getTempClusterInfo(c.clusterType.toQQConstant(), c.clusterId, c.parentClusterId);
}
main.getDisplay().syncExec(new Runnable() {
public void run() {
main.getBlindHelper().refreshGroup(dialogContainer.group);
}
});
}
break;
case QQ.QQ_CLUSTER_SUB_CMD_GET_SUBJECT_LIST:
final Cluster parent = ModelRegistry.getCluster(packet.clusterId);
if(parent != null) {
parent.removeAllSubClusters();
for(SimpleClusterInfo info : packet.subClusters) {
Cluster c = new Cluster();
c.clusterType = ClusterType.SUBJECT;
c.clusterId = info.id;
c.name = info.name;
parent.addSubCluster(c);
ModelRegistry.addCluster(c);
main.getClient().getTempClusterInfo(c.clusterType.toQQConstant(), c.clusterId, c.parentClusterId);
}
main.getDisplay().syncExec(new Runnable() {
public void run() {
main.getBlindHelper().refreshGroup(parent.group);
}
});
}
break;
}
}
/**
* 处理创建临时群成功事件
*
* @param e
*/
private void processClusterCreateTempClusterSuccess(QQEvent e) {
final ClusterCommandReplyPacket packet = (ClusterCommandReplyPacket)e.getSource();
main.getDisplay().syncExec(new Runnable() {
public void run() {
Cluster c = main.getBlindHelper().addTempCluster(packet.type, packet.clusterId, packet.parentClusterId);
if(c != null && main.getUIHelper().hasPromotingDiscuss(packet.getSequence())) {
main.getUIHelper().removePromotingDiscuss(packet.getSequence());
main.getShellLauncher().openClusterIMWindow(c);
}
}
});
}
/**
* 处理重定向到0地址事件
*/
private void processLoginRedirectNull() {
main.getDisplay().syncExec(new Runnable() {
public void run() {
// 自动随机更换其他服务器登录
main.logout();
main.checkLogin(true, false);
}
});
}
/**
* 初始网络错误
*
* @param e
*/
private void processNetworkError(final QQEvent e) {
final ErrorPacket packet = (ErrorPacket)e.getSource();
if(!packet.connectionId.equals(QQPort.MAIN.name))
return;
if(main.getClient().getUser().getStatus() != QQ.QQ_STATUS_OFFLINE) {
main.getDisplay().syncExec(new Runnable() {
public void run() {
main.restartLogin(e);
}
});
}
}
/**
* 处理请求密钥失败事件
* @param e
*/
private void processRequestKeyFail(QQEvent e) {
RequestKeyPacket packet = (RequestKeyPacket)e.getSource();
main.getClient().requestKey(packet.getRequest());
}
/**
* 处理请求密钥成功事件
*
* @param e
* QQEvent
*/
private void processRequestKeySuccess(QQEvent e) {
RequestKeyReplyPacket packet = (RequestKeyReplyPacket)e.getSource();
QQUser me = main.getClient().getUser();
switch(packet.subCommand) {
case QQ.QQ_SUB_CMD_REQUEST_FILE_AGENT_KEY:
me.setFileAgentKey(packet.key);
me.setFileAgentToken(packet.token);
break;
case QQ.QQ_SUB_CMD_REQUEST_UNKNOWN03_KEY:
me.setUnknown03Key(packet.key);
me.setUnknown03Token(packet.token);
break;
case QQ.QQ_SUB_CMD_REQUEST_UNKNOWN06_KEY:
me.setUnknown06Key(packet.key);
me.setUnknown06Token(packet.token);
break;
case QQ.QQ_SUB_CMD_REQUEST_UNKNOWN07_KEY:
me.setUnknown07Key(packet.key);
me.setUnknown07Token(packet.token);
break;
case QQ.QQ_SUB_CMD_REQUEST_UNKNOWN08_KEY:
me.setUnknown08Key(packet.key);
me.setUnknown08Token(packet.token);
break;
}
}
/**
* 处理代理出错事件
*
* @param e
* QQEvent
*/
private void processProxyError(QQEvent e) {
final ErrorPacket packet = (ErrorPacket)e.getSource();
if(!packet.connectionId.equals(QQPort.MAIN.name))
return;
if(main.getClient().getUser().getStatus() != QQ.QQ_STATUS_OFFLINE) {
main.getDisplay().syncExec(new Runnable() {
public void run() {
main.stopWaitingPanelAnimation();
main.getClient().getUser().setStatus(QQ.QQ_STATUS_OFFLINE);
main.logout();
MessageDialog.openError(main.getShell(), message_box_proxy_error_title, packet.errorMessage);
}
});
}
}
/**
* 处理未知IM事件,这个目前用来自动拒绝TCP方式的文件传输,等到TCP实现时,不再需要
*
* @param e
* QQEvent
*/
private void processUnknownTypeIM(QQEvent e) {
ReceiveIMPacket packet = (ReceiveIMPacket)e.getSource();
if(packet.header.type == QQ.QQ_RECV_IM_FRIEND || packet.header.type == QQ.QQ_RECV_IM_STRANGER) {
if(packet.normalHeader.type == QQ.QQ_IM_TYPE_TCP_REQUEST)
main.getClient().rejectSendFile(packet.normalHeader.sender, packet.normalHeader.sequence, false);
}
}
/**
* 处理对方拒绝我加入群的事件
*
* @param e
* QQEvent
*/
private void processRequestJoinClusterRejected(QQEvent e) {
final ReceiveIMPacket packet = (ReceiveIMPacket)e.getSource();
main.getDisplay().syncExec(new Runnable() {
public void run() {
main.getMessageHelper().putClusterNotification(packet);
}
});
}
/**
* 处理对方同意我加入群的事件
*
* @param e
* QQEvent
*/
private void processRequestJoinClusterApproved(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 processRequestJoinCluster(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.getMessageHelper().putClusterNotification(packet);
}
});
}
}
/**
* 处理我被从群中删除事件
*
* @param e
* QQEvent
*/
private void processIAmRemovedFromCluster(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() {
// 如果sender等于自己的QQ号,则表示管理员把自己删除了,如果不是,
// 表示这个sender主动退出该群
if(packet.sender == main.getMyModel().qq)
main.getBlindHelper().removeCluster(packet.header.sender);
// 推入这个群通知
main.getMessageHelper().putClusterNotification(packet);
}
});
}
}
/**
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -