⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 serverevent.java

📁 聊天工具
💻 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 + -