📄 serverevent.java
字号:
package server.serverpane;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import server.dao.UserDAO;
import server.factory.DaoFactory;
import server.login.ServerFrme;
import thread.AcceptThread;
import utils.InfoPacket;
import utils.LogUtils;
import utils.PropUtils;
import utils.StaticUtils;
/**
* 服务器面板中的监听事件类
* @author 洪景泉
*
*/
public class ServerEvent implements ActionListener{
private ServerFrme qqServerFrm = null;
private ServerSocket ss=null;
public ServerEvent(ServerFrme qqServerFrm) {
this.qqServerFrm = qqServerFrm;
}
public void actionPerformed(ActionEvent e) {
JButton btnTemp=(JButton)e.getSource();
String actOpen=btnTemp.getActionCommand();
/**
* 启动服务器
*/
if(actOpen.equals("open")){
try {
String port=PropUtils.read("port");
ss = new ServerSocket(Integer.parseInt(port));
AcceptThread at = new AcceptThread(qqServerFrm, ss);//创建监听线程
at.start();
} catch (IOException e1) {
e1.printStackTrace();
JOptionPane.showMessageDialog(qqServerFrm, "端口设置错误或者此端口已被占用");
return;
}
//系统日志信息
String sFilename =new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date());
qqServerFrm.getServerPane().getBottomPane().getTaInfo().append("["+sFilename+"]: 开启服务器\n");
//刷新日志
LogUtils.write("./log/","启动服务器");
//更换图片
qqServerFrm.getServerPane().getBottomPane().getLabImg().setIcon(new ImageIcon("./image/total/enablestate.gif"));
//设置按钮状态
qqServerFrm.getServerPane().getBottomPane().setBtnEnable(true);
}
/**
* 关闭服务器
*/
if(actOpen.equals("close")){
// 系统日志信息
String sFilename =new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date());
qqServerFrm.getServerPane().getBottomPane().getTaInfo().append("["+sFilename+"]: 关闭服务器\n");
// 刷新日志
LogUtils.write("./log/","关闭服务器");
// 更换图片
qqServerFrm.getServerPane().getBottomPane().getLabImg().setIcon(new ImageIcon("./image/total/disablestate.gif"));
// 设置按钮状态
qqServerFrm.getServerPane().getBottomPane().setBtnEnable(false);
// 1更新数据库的在线标志,并刷新 JTable
UserDAO userDao=DaoFactory.getUserDao();
//遍历在线用户列表
Set<String> set = StaticUtils.onlineUser.keySet();//返回此 Hashtable 中所包含的键的 Set 视图
Iterator<String> iter = set.iterator();
while (iter.hasNext()) {
String id = iter.next();
//System.out.println("id="+id);
userDao.updateOnLine(id,"0");//1表示在线
InfoPacket downPacket = new InfoPacket(InfoPacket.DOWN, "","", id);
ArrayList al = (ArrayList) StaticUtils.onlineUser.get(id);
try {
((OutputStream) al.get(1)).write(downPacket.toByteArray());
} catch (IOException e1) {
e1.printStackTrace();
}
}
qqServerFrm.getServerPane().getCenterPane().reLoadTable();
StaticUtils.onlineUser.clear();
// 关闭服务端socket
try {
ss.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
/**
* 强制用户下线
*/
if(actOpen.equals("coerce")){
JTable tblTemp = qqServerFrm.getServerPane().getCenterPane().getJTable();
int[] row = tblTemp.getSelectedRows();
int len=row.length;
if(len>=1 &&(JOptionPane.showConfirmDialog(qqServerFrm, "确实要对所选择的用户强制下线?", "强制下线", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION)){
List<String> list = new ArrayList<String>();
for(int i=0;i<len;i++){
String id = (String) tblTemp.getValueAt(row[i], 0);
list.add(id);
String sFilename =new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date());
qqServerFrm.getServerPane().getBottomPane().getTaInfo().append("["+sFilename+"]: "+id+"被强制下线\n");
LogUtils.write("./log/",id+"被强制下线");
//发送下线包
InfoPacket downPacket = new InfoPacket(InfoPacket.DOWN, "","", id);
// System.out.println(key);
ArrayList al = (ArrayList) StaticUtils.onlineUser.get(id);
try {
((OutputStream) al.get(1)).write(downPacket.toByteArray());
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
// qqServerFrm.getServerPane().getCenterPane().reLoadTable();
}
/**
* 发送公告
*/
if(actOpen.equals("affiche")){
// System.out.println("公告");
String affiche=qqServerFrm.getServerPane().getBottomPane().getTaAffiche().getText();
InfoPacket affichePacket = new InfoPacket(InfoPacket.AFFICHE, "","", affiche);
StaticUtils.afficheInfo=affiche;
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(affichePacket.toByteArray());
} catch (IOException e1) {
e1.printStackTrace();
}
}
qqServerFrm.getServerPane().getBottomPane().getTaAffiche().setText("");
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -