⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qqeventprocessor.java

📁 lumaQQ的源文件
💻 JAVA
📖 第 1 页 / 共 4 页
字号:

	/**
	 * 处理好友个性签名改变事件
	 * 
	 * @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 + -