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

📄 mymanagerlistener.java

📁 模仿腾讯QQ的
💻 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 + -