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

📄 readthread.java

📁 聊天工具
💻 JAVA
字号:
package thread;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Set;

import server.dao.UserDAO;
import server.factory.DaoFactory;
import server.login.ServerFrme;
import utils.InfoPacket;
import utils.StaticUtils;
import utils.UserInfoBean;
/**
 * 接受客户端登录线程
 * @author 洪景泉
 *
 */
public class ReadThread extends Thread {
	private ServerFrme qqServerFrm = null;

	private InputStream is = null;

	private OutputStream os = null;
	public ReadThread(ServerFrme qqServerFrm,InputStream is,
			OutputStream os) {
		this.qqServerFrm = qqServerFrm;
		this.is = is;
		this.os = os;
	}

	public void run() {
		while (true) {
			// 睡眠
			try {
				sleep(20);
				
				// 接受数据
				byte[] bs = new byte[1024];
				is.read(bs);
				InfoPacket dataPacket = null;
				
				dataPacket = new InfoPacket(bs);
				// 处理数据

				if (dataPacket != null) {
					if(dataPacket.getType()==InfoPacket.MODIINFO){
					//	System.out.println("收到密码修改包");
					
						UserInfoBean userBean=createUserBean(dataPacket);
						UserDAO userDao=DaoFactory.getUserDao();	
						//OracleDAO userDao = new OracleDAO();
						userDao.updateClient(userBean);
									
						qqServerFrm.getUserPane().getCenterPane().reLoadTable();
						qqServerFrm.getServerPane().getCenterPane().reLoadTable();

					}
					if (dataPacket.getType() == InfoPacket.CHAT) {
						
						String currentID=dataPacket.getFrom();
						String [] arr=currentID.split(":");
						String to = dataPacket.getTo();
						if (to.startsWith("1:")) {

							Set<String> set = StaticUtils.onlineUser.keySet();// 返回此
							// Hashtable中所包含的键的Set 视图
							Iterator<String> iter = set.iterator();
							while (iter.hasNext()) {
								String key = iter.next();
								// System.out.println("key="+key);

								//System.out.println("Size:"+ HashtableUtils.onlineUser.size());
							//如果目的地是自己就不发包
								
								if(arr[0].equals(key)){
									System.out.println("key1="+key);
									continue;
								}
								ArrayList al = (ArrayList) StaticUtils.onlineUser
										.get(key);
								((OutputStream) al.get(1)).write(dataPacket.toByteArray());
							}

						} else if (to.startsWith("2:")) {
							String strTo = to.substring(2);
//							 返回此Hashtable中所包含的键的Set视图
							Set<String> set = StaticUtils.onlineUser.keySet();
							Iterator<String> iter = set.iterator();

							while (iter.hasNext()) {
								String key = iter.next();
								//如果目的地是自己就不发包
								
								if(arr[0].equals(key)){
									System.out.println("key2="+key);
									continue;
								}
								// System.out.println(key);
								ArrayList al = (ArrayList) StaticUtils.onlineUser
										.get(key);
								if (al.get(3).equals(strTo)) {
									((OutputStream) al.get(1))
											.write(dataPacket.toByteArray());

								}
							}

						} else if (to.startsWith("3:")) {// 选中的是某个用户
							to = to.substring(2);
							ArrayList al = (ArrayList) StaticUtils.onlineUser
									.get(to);

							OutputStream os = (OutputStream) al
									.get(1);
							os.write(dataPacket.toByteArray());

						}
					}
					if(dataPacket.getType() == InfoPacket.FILE){
						//System.out.println("收到文件包");
						String to = dataPacket.getTo();
						to = to.substring(2);
						ArrayList al = (ArrayList) StaticUtils.onlineUser.get(to);
						OutputStream os = (OutputStream) al.get(1);
						os.write(dataPacket.toByteArray());
						
					}
					if(dataPacket.getType() == InfoPacket.FILE_RESP){
						String to = dataPacket.getTo();
						to = to.substring(2);
						ArrayList al = (ArrayList) StaticUtils.onlineUser.get(to);
						OutputStream os = (OutputStream) al.get(1);
						os.write(dataPacket.toByteArray());
					}
				}

			} catch (InterruptedException e) {
				e.printStackTrace();
				System.exit(0);
			} catch (IOException e) {
				//通知其他用户当前用户已经下线
				String id=this.getName();
				//System.out.println(id);
				StaticUtils.onlineUser.remove(id);
				InfoPacket downPacket = new InfoPacket(InfoPacket.DOWN, "","", id);
				Set<String> set = StaticUtils.onlineUser.keySet();
				Iterator<String> iter = set.iterator();
				while (iter.hasNext()) {
					String key = iter.next();
					// System.out.println(key);
					ArrayList al = (ArrayList) StaticUtils.onlineUser.get(key);
					try {
						((OutputStream) al.get(1)).write(downPacket.toByteArray());
						
					} catch (IOException e1) {
						e1.printStackTrace();
					}
				}
//				更新数据库
				UserDAO userDao=DaoFactory.getUserDao();
				userDao.updateOnLine(id, "0");
//				刷新列表
				qqServerFrm.getServerPane().getCenterPane().reLoadTable();
				return;
			//	e.printStackTrace();
			} 
		}
	}
	/**
	 * 创建数据封装Bean在传参
	 * @param dataPacket 要封装的包
	 * @return
	 */
	 
	private UserInfoBean createUserBean(InfoPacket dataPacket ) {
		//HashMap hMap=dataPacket.getDatas();
		String hMap=dataPacket.getDatas();
		UserInfoBean userBean = new UserInfoBean();
	
//System.out.println((String)hMap.get("userPassword"));
		String[] sArr=hMap.split(",");
		String userID=sArr[0];
		String userNickName=sArr[1];
		String userPassword=sArr[2];
		String userAge=sArr[3];
		String userTelephone=sArr[4];
		String userDpm=sArr[5];
		String userAddress=sArr[6];
		String userIcon=sArr[7];
		
		byte age;
		if(userAge.equals("")){
			age=0;
		}else{
			age=Byte.parseByte(userAge.trim());
		}
					
		userBean.setSID(userID);
		userBean.setSPassword(userPassword);
		userBean.setSNickName(userNickName.trim());
		userBean.setNAge(age);
		userBean.setSDepartment(userDpm);
		userBean.setSPhone(userTelephone);
		userBean.setSAddress(userAddress);
		userBean.setSIcon(String.valueOf(userIcon));

		return userBean;
	}
}

⌨️ 快捷键说明

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