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