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

📄 recievethread.java

📁 用java开发的QQ管理系统
💻 JAVA
字号:
package com.zlf.qqserver.servermngpanel.toppanel;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.SocketException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
import java.util.Vector;

import com.zlf.dao.DaoFactory;
import com.zlf.dao.UserDao;
import com.zlf.qq.pub.DataPacket;
import com.zlf.qqserver.ServerMain;
import com.zlf.qqserver.Public;

public class RecieveThread implements Runnable {
	private String id;

	private ObjectInputStream ois;

	private boolean stop = false;

	private DataPacket dataPacket = null;

	private ServerMain f;
	private UserDao userDao=DaoFactory.newInstance().createUserDao();
	
	private HashMap h=new HashMap();
	
	public RecieveThread(String id, ObjectInputStream ois, ServerMain f) {
		this.id = id;
		this.ois = ois;
		this.f = f;
	}

	public void run() {
		while (!stop) {
			// 接收客户端信息,客户端下线包,聊天包
			try {
				dataPacket = (DataPacket) ois.readObject();
				if (dataPacket.getType().equals(DataPacket.down_line_type)) {
					// 如果是下线包的话,向所有用户发下线包
					sendDownLinePacket();
					TopPanel.setTShow(dataPacket.getFrom(),5);
					break;
				} else if (dataPacket.getType().equals(
						DataPacket.privateChat_type)) {
					// 私聊包
					String toId = dataPacket.getTo();
					ObjectOutputStream oos = (ObjectOutputStream) ((ArrayList) Public.mySocketInfo
							.get(toId)).get(2);
					oos.writeObject(dataPacket);
					oos.flush();
				} else if (dataPacket.getType()
						.equals(DataPacket.deptChat_type)) {
					// 部门私聊包
					String toDeptId = dataPacket.getTo();// 部门id
					// 根据部门编号找到该部门在线的用户,给他们发部门私聊包
					Set set = (Set) Public.mySocketInfo.keySet();
					Iterator iter = set.iterator();
					while (iter.hasNext()) {
						String userId = (String) iter.next();// 在线用户的id
						if (!(dataPacket.getFrom().equals(userId))) {
							// 不发给自己
							String userInDeptId = (String) ((ArrayList) Public.mySocketInfo
									.get(userId)).get(4);
							//System.out.println(userInDeptId);
							if (userInDeptId.equals(toDeptId)) {
								ObjectOutputStream oos = (ObjectOutputStream) ((ArrayList) Public.mySocketInfo
										.get(userId)).get(2);
								oos.writeObject(dataPacket);
								oos.flush();
							}
						}
					}
				} else if (dataPacket.getType()
						.equals(DataPacket.publicChat_type)){
					// 给全公司发聊天包,除开自己
					Set set = (Set) Public.mySocketInfo.keySet();//取出所有id
					Iterator iter = set.iterator();
					while(iter.hasNext()){
						String userId=(String) iter.next();
						if (!userId.equals(id)){
							ArrayList al=(ArrayList) Public.mySocketInfo.get(userId);
							ObjectOutputStream oos=(ObjectOutputStream) al.get(2);
							oos.writeObject(dataPacket);
							oos.flush();
						}
					}
					
				}else if(dataPacket.getType().equals(DataPacket.UPDATE_PWD)){
					//密码修改包
					String QQ_id =dataPacket.getFrom();
					String QQ_pwd=(String) dataPacket.getData().get("newPwd");//新密码
					//根据QQ_id到存储介质中修改用户的密码
					userDao.updatePwd(QQ_id, QQ_pwd);
					
				}else if(dataPacket.getType().equals(DataPacket.update_tree_type)){
					//更新树
					sendUpdateTreePacket();
				}else if((dataPacket.getType().equals(DataPacket.transfile_type)
						||(dataPacket.getType().equals(DataPacket.canSendtransfile_type))
						||dataPacket.getType().equals(DataPacket.cannotSendtransfile_type))){
					
					String toId = dataPacket.getTo();
					
					//System.out.println(toId);
					ObjectOutputStream oos = (ObjectOutputStream) ((ArrayList) Public.mySocketInfo
							.get(toId)).get(2);
					oos.writeObject(dataPacket);
					oos.flush();
				}else if(dataPacket.getType().equals(DataPacket.chat_all_type)){
					// 给全公司发公告
					Set set = (Set) Public.mySocketInfo.keySet();//取出所有id
					Iterator iter = set.iterator();
					while(iter.hasNext()){
						String userId=(String) iter.next();
						ArrayList al=(ArrayList) Public.mySocketInfo.get(userId);
						ObjectOutputStream oos=(ObjectOutputStream) al.get(2);
						oos.writeObject(dataPacket);
						oos.flush();
					}
				}
			} catch (SocketException e) {
				// 向所有用户发下线包
				sendDownLinePacket();
				return;
			} catch (IOException e) {
				return;
			} catch (ClassNotFoundException e) {
				e.printStackTrace();
				return;
			}
		}
	}

	public void sendDownLinePacket() {
		Set set = (Set) Public.mySocketInfo.keySet();
		Iterator iter = set.iterator();
		String[] QQ_id = new String[set.size()];
		int i = 0;
		//System.out.println(set.size());
		while (iter.hasNext()) {
			QQ_id[i] = (String) iter.next();
			//System.out.println(QQ_id[i]);
			if (!QQ_id[i].equals(id)) {
				ArrayList arry = (ArrayList) Public.mySocketInfo.get(QQ_id[i]);
				ObjectOutputStream tempOos = (ObjectOutputStream) arry.get(2);// 取出list里的输出流
				DataPacket downLinePacket = new DataPacket(
						DataPacket.down_line_type, id, "", null);
				if (downLinePacket != null) {
					try {
						// 发出下线包
						tempOos.writeObject(downLinePacket);
						tempOos.flush();
					} catch (IOException e) {
						return;
					}
				}
			}
			i++;
		}
		Public.mySocketInfo.remove(id);
		// 修改数据库的用户表的用户在线字段改成0
		userDao.updateOnLine(0, id);
		// 刷新在线用户的显示
		h.put("9", "");
		Vector vector = userDao.selectUser(h);
		h.clear();
		f.getServerMngPanel().getTablePanel().getDataModel().setData(vector);
	}
	
	public void sendUpdateTreePacket() {
		Set set = (Set) Public.mySocketInfo.keySet();
		Iterator iter = set.iterator();
		String[] QQ_id = new String[set.size()];
		int i = 0;
		//System.out.println(set.size());
		while (iter.hasNext()) {
			QQ_id[i] = (String) iter.next();
			//System.out.println(QQ_id[i]);
			if (!QQ_id[i].equals(id)) {
				ArrayList arry = (ArrayList) Public.mySocketInfo.get(QQ_id[i]);
				ObjectOutputStream tempOos = (ObjectOutputStream) arry.get(2);// 取出list里的输出流
				DataPacket updateTreePacket = new DataPacket(
						DataPacket.update_tree_type, id, "", null);
				if (updateTreePacket != null) {
					try {
						// 发出下线包
						tempOos.writeObject(updateTreePacket);
						tempOos.flush();
					} catch (IOException e) {
						return;
					}
				}
			}
			i++;
		}
		Public.mySocketInfo.remove(id);
//		// 修改数据库的用户表的用户在线字段改成0
		userDao.updateOnLine(0, id);
		// 刷新在线用户的显示
		h.put("9", "");
		Vector vector = userDao.selectUser(h);
		h.clear();
		f.getServerMngPanel().getTablePanel().getDataModel().setData(vector);
	}
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -