📄 recievethread.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 + -