📄 serverreceivethread.java
字号:
package com.softfz.jn0708.thread;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import javax.swing.JOptionPane;
import javax.swing.text.BadLocationException;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyledDocument;
import com.softfz.jn0708.dao.intef.IDepartmentDAO;
import com.softfz.jn0708.dao.intef.IUserDAO;
import com.softfz.jn0708.dao.oracle.ImplementDepartmentDAO;
import com.softfz.jn0708.dao.oracle.ImplementUserDAO;
import com.softfz.jn0708.main.manager.ManagerPanel;
import com.softfz.jn0708.srcpackage.*;
import com.softfz.jn0708.util.Tools;
/**
* 服务器接收线程
* @author admin
*
*/
public class ServerReceiveThread extends Thread {
private Socket clientSocket;
private ObjectInputStream ois;
private ObjectOutputStream oos;
private ManagerPanel managerpanel;
private Set totalThread ;
private SrcPackage revPackage = null;
private SrcPackage validatePackage = null;
private SrcPackage onLinePackage=null;
private SrcPackage okpwdPackage = null;
private String uno = null;
private String utrem = null;
private String dno = null;
private TUser usr ;
private static IDepartmentDAO deptdao = new ImplementDepartmentDAO();
private static IUserDAO userdao = new ImplementUserDAO();
private boolean tag = false;
/**
* 无参构造
*
*/
public ServerReceiveThread(){
}
/**
* 带参数构造
* @param clientSocket 客户端socket
* @param managerpanel 管理面板
* @param totalThread 保存客户线程的hashset
*/
public ServerReceiveThread(Socket clientSocket, ManagerPanel managerpanel,Set totalThread) {
super();
this.clientSocket = clientSocket;
this.managerpanel = managerpanel;
this.totalThread = totalThread;
try {
ois = new ObjectInputStream(clientSocket.getInputStream());
oos = new ObjectOutputStream(clientSocket.getOutputStream());
} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
}
/**
* 线程的run()方法
*
*/
public void run() {
int i=1;
while(!tag){
if (totalThread.size()<0){
managerpanel.getBtnNote().setEnabled(false);
}
//接收包数据
HashMap map;
List userdata;
// 验证包
HashMap data = new HashMap();
// 上线包
HashMap logindata = new HashMap();
IUserDAO userdao = new ImplementUserDAO();
List rowdata = null;
try {
revPackage = (SrcPackage) ois.readObject();
// 登录包
if (revPackage.getType().equals(SrcPackage.LOGIN_TYPE)) {
// 获取登录包中的用户名和密码
map = revPackage.getData();
String UNO = map.get("UNO").toString();
String UPWD = map.get("UPWD").toString();
userdata = userdao.select(UNO,"","","");
if (userdata.size()>0){
if (((List)userdata.get(0)).get(15).toString().trim().equals(map.get("UPWD").toString().trim())&&(((List)userdata.get(0)).get(12).toString().trim().equals("1"))){
i=3;
}else
if ((((List)userdata.get(0)).get(15).toString().trim().equals(map.get("UPWD").toString().trim()))&&(((List)userdata.get(0)).get(12).toString().trim().equals("0"))){
i=4;
//保存用户编号 和 用户所在的部门
uno = UNO;
dno = ((List)userdata.get(0)).get(13).toString().trim();
utrem = ((List)userdata.get(0)).get(2).toString().trim();
}else{
i=2;
}
}
// 发验证包
if (i == 1) {
// 用户名不存在
data.put("TAG", "1");
} else if (i == 2) {
// 用户名存在但密码不正确
data.put("TAG", "2");
} else if (i == 3) {
// 此用户已在线
data.put("TAG", "3");
} else {
// 正确的登录信息
data.put("TAG", "4");
//打包个人信息
usr = new TUser();
usr.setUNO(((List)userdata.get(0)).get(0).toString().trim());
usr.setUNAME(((List)userdata.get(0)).get(1).toString().trim());
usr.setUTERM(((List)userdata.get(0)).get(2).toString().trim());
usr.setDNO(((List)userdata.get(0)).get(13).toString().trim());
usr.setDNAME(((List)userdata.get(0)).get(6).toString().trim());
usr.setUPASSWORD(((List)userdata.get(0)).get(15).toString().trim());
//////////////////////////////////////////////////////
data.put("UINFO",usr);
data.put("COMPANY", getCompany());
//修改用户在线状态
userdao.modifyLoginUser(uno,"1");
rowdata = userdao.getOnlineRowData();//获取行数据
managerpanel.getModel().setData(rowdata);
}
//验证返回包
validatePackage = new SrcPackage();
validatePackage.setData(data);
validatePackage.setFrom(SrcPackage.SERVER_ID);
validatePackage.setTo(revPackage.getFrom());
validatePackage.setType(SrcPackage.VELIDATE_TYPE);
try {
//发送验证返回
oos.writeObject(validatePackage);
} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
break;
}
//登录成功 通知所有人
if (i==4){
//打包 上线包
logindata.put("COMPANY", getCompany());
onLinePackage=new SrcPackage();
onLinePackage.setData(logindata);
onLinePackage.setFrom(revPackage.getFrom());
onLinePackage.setTo(utrem);
onLinePackage.setType(SrcPackage.UPLINE_TYPE);
onLinePackage.setTomeno(managerpanel.getJtpNote().getText());
//将线程保存到set里
totalThread.add(this);
//群发上线包
Iterator it = totalThread.iterator();
while(it.hasNext()){
ServerReceiveThread srt = (ServerReceiveThread)it.next();
if (srt.isAlive()){
//发送上线包
try {
srt.getOos().writeObject(onLinePackage);
srt.getOos().flush();
} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
break;
}
}
}
// 写入日志文件
// 创建样式文档
StyledDocument managerinfo= managerpanel.getInfor().getStyledDocument();
// 获取当前样式
SimpleAttributeSet style = new SimpleAttributeSet();
//当前时间
SimpleDateFormat snedTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String date = snedTime.format(new Date());
String str2 ="上线了";
try {
managerinfo.insertString(managerinfo.getLength(),"\n"+date+" "+utrem+" "+str2+"\n", style);
for (int j = 0; j< str2.length(); j++) {
// 设置文本插入符的位置
managerpanel.getInfor().setCaretPosition(managerinfo.getLength());
}
managerinfo.insertString(managerinfo.getLength(), "\n", style);
} catch (BadLocationException e2) {
// TODO 自动生成 catch 块
e2.printStackTrace();
}
managerpanel.getQqframe().getLogpanel().getRightPanel().getHistoryTextArea().append(utrem+" "+"用户上线了\n");
Tools.writeToLogFile(utrem+" "+"用户上线了\n");
}
}
//聊天包
if (revPackage.getType().equals(SrcPackage.CHAT_TYPE)) {
Iterator chatit = totalThread.iterator();
while(chatit.hasNext()){
ServerReceiveThread srt = (ServerReceiveThread)chatit.next();
if (!srt.getUtrem().equals(revPackage.getFrom())){
if (srt.isAlive()){
//发送聊天包
try {
srt.getOos().writeObject(revPackage);
srt.getOos().flush();
} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
}
}
}
}
//下线包
if (revPackage.getType().equals(SrcPackage.DOWNLINE_TYPE)) {
Iterator chatit = totalThread.iterator();
System.out.println("1 totalThread size "+totalThread.size());
while(chatit.hasNext()){
ServerReceiveThread srt = (ServerReceiveThread)chatit.next();
if (srt.getUno().equals(revPackage.getFrom())){
if (srt.isAlive()){
srt.getOis().close();
srt.getOos().close();
srt.clientSocket.close();
srt.setTag(true);
//修改用户在线状态
userdao.modifyLoginUser(revPackage.getFrom(),"0");
rowdata = userdao.getOnlineRowData();//获取行数据
managerpanel.getModel().setData(rowdata);
//写入日志文件
// 创建样式文档
StyledDocument managerinfo= managerpanel.getInfor().getStyledDocument();
// 获取当前样式
SimpleAttributeSet style = new SimpleAttributeSet();
//当前时间
SimpleDateFormat snedTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String date = snedTime.format(new Date());
String str2 ="下线了";
try {
managerinfo.insertString(managerinfo.getLength(),"\n"+date+" "+revPackage.getTomeno()+" "+str2+"\n", style);
for (int j = 0; j< str2.length(); j++) {
// 设置文本插入符的位置
managerpanel.getInfor().setCaretPosition(managerinfo.getLength());
}
managerinfo.insertString(managerinfo.getLength(), "\n", style);
} catch (BadLocationException e2) {
// TODO 自动生成 catch 块
e2.printStackTrace();
}
managerpanel.getQqframe().getLogpanel().getRightPanel().getHistoryTextArea().append(revPackage.getTomeno()+" "+"用户下线了\n");
Tools.writeToLogFile(revPackage.getTomeno()+" "+"用户下线了\n");
}
// totalThread.remove(srt);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -