📄 mymanagerlistener.java
字号:
package com.softfz.jn0708.main.manager;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import javax.swing.text.BadLocationException;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyledDocument;
import com.softfz.jn0708.dao.intef.IUserDAO;
import com.softfz.jn0708.dao.oracle.ImplementUserDAO;
import com.softfz.jn0708.srcpackage.SrcPackage;
import com.softfz.jn0708.srcpackage.TCompany;
import com.softfz.jn0708.thread.ListenThread;
import com.softfz.jn0708.thread.ServerReceiveThread;
import com.softfz.jn0708.util.Tools;
/**
* 服务器按钮监听
* @author admin
*
*/
public class MyManagerListener implements ActionListener {
private ManagerPanel managerpanel ;
private ServerSocket serverSocket;
private Set totalThread ;
private SrcPackage downlinePackage = null;
private SrcPackage shutdownPackage = null;
private SrcPackage notePackage = null;
private ListenThread listenthread ;
private ObjectOutputStream oos ;
private TCompany company;
private TCompany company2;
private IUserDAO userdao = new ImplementUserDAO();
/**
* 构造
* @param managerpanel 管理面板
* @param serverSocket 服务socket
* @param totalThread 保存线程hashset
*/
public MyManagerListener(ManagerPanel managerpanel,ServerSocket serverSocket,Set totalThread){
super();
this.managerpanel = managerpanel;
this.serverSocket = serverSocket;
this.totalThread = totalThread;
company2 = ServerReceiveThread.getCompany();
}
/**
* 按钮监听事件
*/
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("START")){
if (serverSocket.isClosed()){
try {
serverSocket = new ServerSocket(Integer.parseInt(Tools.properties.get("ServerPort").toString()));
} catch (NumberFormatException e1) {
// TODO 自动生成 catch 块
e1.printStackTrace();
} catch (IOException e1) {
// TODO 自动生成 catch 块
e1.printStackTrace();
}
}else{
}
startServer();
}else if (e.getActionCommand().equals("STOP")){
stopServer();
}else if (e.getActionCommand().equals("DOWN")){
String uno = managerpanel.getSelectedUno().trim();
String utirm = managerpanel.getSelectedUtirm().trim();
//写入日志文件
//创建样式文档
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+" "+managerpanel.getSelectedUtirm().trim()+" "+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(managerpanel.getSelectedUtirm().trim()+" "+"用户被强制下线了\n");
Tools.writeToLogFile(managerpanel.getSelectedUtirm().trim()+" "+"用户被强制下线了\n");
//修改用户在线状态
userdao.modifyLoginUser(uno,"0");
List rowdata = userdao.getOnlineRowData();//获取行数据
managerpanel.getModel().setData(rowdata);
managerpanel.getBtnDown().setEnabled(false);
downlinePackage = new SrcPackage();
downlinePackage.setFrom(SrcPackage.SERVER_ID);
downlinePackage.setTo(uno);
downlinePackage.setTomeno(utirm);
downlinePackage.setType(SrcPackage.DOWNLINE_TYPE);
company = ServerReceiveThread.getCompany();
HashMap updowndata = new HashMap();
updowndata.put("COMPANY", company);
downlinePackage.setData(updowndata);
Iterator it = totalThread.iterator();
while(it.hasNext()){
ServerReceiveThread srt = (ServerReceiveThread)it.next();
if (srt.isAlive()){
//发送下线包
try {
srt.getOos().writeObject(downlinePackage);
srt.getOos().flush();
Thread.sleep(500);
} catch (IOException e1) {
// TODO 自动生成 catch 块
break;
} catch (InterruptedException e1) {
// TODO 自动生成 catch 块
e1.printStackTrace();
}
}
}
}else if (e.getActionCommand().equals("NOTE")){
notePackage = new SrcPackage();
notePackage.setFrom(SrcPackage.SERVER_ID);
notePackage.setTo("");
notePackage.setType(SrcPackage.NOTE_TYPE);
notePackage.setTomeno(managerpanel.getJtpNote().getText());
// System.out.println(totalThread.size());
Iterator it = totalThread.iterator();
while(it.hasNext()){
ServerReceiveThread srt = (ServerReceiveThread)it.next();
if (srt.isAlive()){
try{
srt.getOos().writeObject(notePackage);
srt.getOos().flush();
} catch (IOException e1) {
System.out.println("公告发送失败");
// // TODO 自动生成 catch 块
// e1.printStackTrace();
}catch (NullPointerException e2) {
// TODO 自动生成 catch 块
System.out.println("2没有客户端连接");
return;
}
}
}
//写入日志文件
//创建样式文档
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+" "+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(str2+"\n");
Tools.writeToLogFile(str2+"\n");
}
}
/**
* 获取管理面板
* @return
*/
public ManagerPanel getManagerpanel() {
return managerpanel;
}
/**
* 获取服务socket
* @return
*/
public ServerSocket getServerSocket() {
return serverSocket;
}
/**
* 启动服务器的方法
*
*/
public void startServer(){
managerpanel.getBtnStart().setEnabled(false);
managerpanel.getBtnStop().setEnabled(true);
String str ="服务器启动,并等待连接...";
//创建样式文档
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());
//插入文本
try {
//创建服务器监听线程
listenthread = new ListenThread(managerpanel,serverSocket,totalThread);
listenthread.start();
managerinfo.insertString(managerinfo.getLength(),date+":"+str+ "\n", style);//服务器启动按钮
//设置文本插入符的位置
for (int i = 0; i < str.length(); i++) {
managerpanel.getInfor().setCaretPosition(managerinfo.getLength());
}
managerinfo.insertString(managerinfo.getLength(), "\n", style);
// 写入日志文件
// managerpanel.getQqframe().getLogpanel().getLeftPanel().getTodayTextArea().append("服务器启动,并等待连接...\n");
managerpanel.getQqframe().getLogpanel().getRightPanel().getHistoryTextArea().append("服务器启动,并等待连接...\n");
Tools.writeToLogFile("服务器启动,并等待连接...\n");
} catch (NumberFormatException e1) {
// TODO 自动生成 catch 块
e1.printStackTrace();
} catch (BadLocationException e1) {
// TODO 自动生成 catch 块
e1.printStackTrace();
}
}
/**
* 关闭服务器的方法
*
*/
public void stopServer(){
IUserDAO userdao = new ImplementUserDAO();
managerpanel.getBtnStart().setEnabled(true);
managerpanel.getBtnStop().setEnabled(false);
shutdownPackage = new SrcPackage();
shutdownPackage.setData(null);
shutdownPackage.setFrom("SHUTDOWN");
shutdownPackage.setTo("SHUTDOWN");
shutdownPackage.setTomeno("SHUTDOWN");
shutdownPackage.setType(SrcPackage.DOWNLINE_TYPE);
HashMap updowndata = new HashMap();
updowndata.put("COMPANY2", company2);
shutdownPackage.setData(updowndata);
try {
Iterator it = totalThread.iterator();
while(it.hasNext()){
ServerReceiveThread srt = (ServerReceiveThread)it.next();
if (srt.isAlive()){
srt.getOos().writeObject(shutdownPackage);
srt.getOos().flush();
Thread.sleep(200);
srt.getOis().close();
srt.getOos().close();
srt.getClientSocket().close();
srt.setTag(true);
//修改用户在线状态
userdao.modifyLoginUser(srt.getUno(),"0");
}
}
serverSocket.close();
totalThread.removeAll(totalThread);
userdao.modifyLoginUser("","0");
List data;
data = userdao.getOnlineRowData();//获取行数据
managerpanel.getModel().setData(data);
//创建样式文档
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+" "+str2+"\n", style);
for (int i = 0; i < str2.length(); i++) {
// 设置文本插入符的位置
managerpanel.getInfor().setCaretPosition(managerinfo.getLength());
}
managerinfo.insertString(managerinfo.getLength(), "\n", style);
} catch (BadLocationException e2) {
// TODO 自动生成 catch 块
e2.printStackTrace();
}
managerpanel.getQqframe().getLogpanel().getRightPanel().getHistoryTextArea().append("服务器关闭连接\n");
Tools.writeToLogFile("服务器关闭连接\n");
try{
listenthread.getReceivethread().setTag(true);
}catch(NullPointerException e2){
// System.exit(0);
if (totalThread.size()<1)
System.out.println("已经没有客户端连接");
}
// System.exit(0);
} catch (IOException e1) {
// TODO 自动生成 catch 块
System.out.println("服务器关闭连接");
// e1.printStackTrace();
} catch (InterruptedException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -