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

📄 clientreceivethread.java

📁 模仿腾讯QQ的
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package com.softfz.jn0708.thread;

import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.JProgressBar;
import javax.swing.text.BadLocationException;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyledDocument;
import com.softfz.jn0708.chat.ChatFrame;
import com.softfz.jn0708.srcpackage.*;
/**
 * 客户端接收线程
 * @author admin
 *
 */
public class ClientReceiveThread extends Thread {

	private boolean tag = false;
	private ObjectInputStream ois;
	private ObjectOutputStream oos;
	private ChatFrame chatframe;
	private SrcPackage revPackage = null;
	private SrcPackage filerevPackage = null;
	private HashMap map ;
	private TCompany company ;
	private JButton btnSave ;	
	private JButton btnNo ;
	private JButton btnCancle;
	private JProgressBar probar = new JProgressBar(0,100);
	
	
	/**
	 * 构造函数
	 * @param ois 输入流
	 * @param oos 输出流
	 * @param chatframe 聊天主窗体
 	 */
	public ClientReceiveThread(ObjectInputStream ois ,ObjectOutputStream oos, ChatFrame chatframe) {
		super();
		this.ois = ois;
		this.oos = oos;
		this.chatframe = chatframe;
		probar.setValue(0);
		probar.setStringPainted(true);
	}
	/**
	 * 线程的run方法
	 */
	public void run() {	

		while (!tag) {				
			try {
				revPackage = (SrcPackage) ois.readObject();	

				// 上线包
				if (revPackage.getType().equals(SrcPackage.UPLINE_TYPE)) {	
	
					if (!revPackage.getFrom().equals(chatframe.getUser().getUNO())){
						try {							
							map = revPackage.getData();
							company =	(TCompany) map.get("COMPANY");
							chatframe.getUserlistpanel().updateTree(company);						
							
		//					创建样式文档
							StyledDocument lgchat= chatframe.getChatcontent().getJtpchatcontent().getStyledDocument();
							// 获取当前样式
							SimpleAttributeSet style = new SimpleAttributeSet(); 							//当前时间
							SimpleDateFormat loginTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
							String date = loginTime.format(new Date());							
							chatframe.getChatcontent().getJtpchatcontent().setEditable(true);	
							 // 先在 chatInfoText 上写入一个名字号码及 发送的时间	
							lgchat.insertString(lgchat.getLength(),"【"+date+"】 "+revPackage.getTo()+" 上线了"+ "\n", style);
							for (int i = 0; i < revPackage.getTo().length(); i++) {
								// 设置文本插入符的位置
								chatframe.getChatcontent().getJtpchatcontent().setCaretPosition(lgchat.getLength());
							}
							lgchat.insertString(lgchat.getLength(), "\n", style);
						} catch (BadLocationException e) {
							// TODO 自动生成 catch 块
							e.printStackTrace();
							break;
						}
						
					}else{
						map = revPackage.getData();
						company =	(TCompany) map.get("COMPANY");
						chatframe.getUserlistpanel().updateTree(company);
					}					
					//加载当前公告
					chatframe.getJtpNote().setEnabled(true);
					chatframe.getJtpNote().setText(revPackage.getTomeno());
					chatframe.getJtpNote().setEnabled(false);	
				}				
				
				//接收聊天包
				if (revPackage.getType().equals(SrcPackage.CHAT_TYPE)) {
					HashMap map2 ;
					List tmpList;
					map2 = revPackage.getData();
					tmpList = (List)map2.get("CHATCONTENT");	
					
					StyledDocument sdChatContent= chatframe.getChatcontent().getJtpchatcontent().getStyledDocument();
					SimpleAttributeSet style = new SimpleAttributeSet(); // 样式
					SimpleDateFormat tiem = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
					String date = tiem.format(new Date());						
					chatframe.getChatcontent().getJtpchatcontent().setEditable(true);
					
	
					if(revPackage.getTomeno().equals("company")){
						
						sdChatContent.insertString(sdChatContent.getLength(), "【"+date+"】"+" "+revPackage.getFrom()+" 对 "+revPackage.getTo()+" 的所有人说:" + "\n", style);
						for (int i = 0; i < tmpList.size(); i++) {
							// 设置文本插入符的位置
							chatframe.getChatcontent().getJtpchatcontent().setCaretPosition(sdChatContent.getLength());
							Object o = tmpList.get(i);

							if (o instanceof Icon) {
								chatframe.getChatcontent().getJtpchatcontent().insertIcon((ImageIcon) o);
							} else if (o instanceof String) {
								sdChatContent.insertString(sdChatContent.getLength(), (String) o,style);
							}
						}
						sdChatContent.insertString(sdChatContent.getLength(), "\n\n", style);
						int pos = chatframe.getChatcontent().getJtpchatcontent().getDocument().getLength();
						chatframe.getChatcontent().getJtpchatcontent().scrollRectToVisible(new Rectangle(pos,pos));
						chatframe.getChatcontent().getJtpchatcontent().setEditable(false);							
						
					}else if (revPackage.getTo().equals(chatframe.getUser().getUTERM().trim())){
						
						sdChatContent.insertString(sdChatContent.getLength(),  "【"+date+"】"+" "+revPackage.getFrom()+" 对你说:" + "\n", style);
						for (int i = 0; i < tmpList.size(); i++) {
							// 设置文本插入符的位置
							chatframe.getChatcontent().getJtpchatcontent().setCaretPosition(sdChatContent.getLength());
							Object o = tmpList.get(i);

							if (o instanceof Icon) {
								chatframe.getChatcontent().getJtpchatcontent().insertIcon((ImageIcon) o);
							} else if (o instanceof String) {
								sdChatContent.insertString(sdChatContent.getLength(), (String) o,style);
							}
						}
						sdChatContent.insertString(sdChatContent.getLength(), "\n\n", style);
						int pos = chatframe.getChatcontent().getJtpchatcontent().getDocument().getLength();
						chatframe.getChatcontent().getJtpchatcontent().scrollRectToVisible(new Rectangle(pos,pos));
						chatframe.getChatcontent().getJtpchatcontent().setEditable(false);
					}else 
					if (revPackage.getTo().equals(chatframe.getUser().getDNAME()))
					{
						
						sdChatContent.insertString(sdChatContent.getLength(), "【"+date+"】"+" "+revPackage.getFrom()+" 对 "+revPackage.getTo()+" 的所有人说:" + "\n", style);
						for (int i = 0; i < tmpList.size(); i++) {
							// 设置文本插入符的位置
							chatframe.getChatcontent().getJtpchatcontent().setCaretPosition(sdChatContent.getLength());
							Object o = tmpList.get(i);

							if (o instanceof Icon) {
								chatframe.getChatcontent().getJtpchatcontent().insertIcon((ImageIcon) o);
							} else if (o instanceof String) {
								sdChatContent.insertString(sdChatContent.getLength(), (String) o,style);
							}
						}
						sdChatContent.insertString(sdChatContent.getLength(), "\n\n", style);
						int pos = chatframe.getChatcontent().getJtpchatcontent().getDocument().getLength();
						chatframe.getChatcontent().getJtpchatcontent().scrollRectToVisible(new Rectangle(pos,pos));
						chatframe.getChatcontent().getJtpchatcontent().setEditable(false);
					}
					
				}
				//下线包
				if (revPackage.getType().equals(SrcPackage.DOWNLINE_TYPE)) {				
					HashMap map3 ;				
					if ((revPackage.getFrom().equals(SrcPackage.SERVER_ID) )&& (revPackage.getTo().equals(chatframe.getUser().getUNO()))){				
						
						try {
				
							chatframe.getOis().close();
							chatframe.getOos().close();
							chatframe.getClientSocket().close();
							chatframe.getReceiveThread().setTag(true);
							JOptionPane.showMessageDialog(null, "您已和服务器断开连接!", "提示",JOptionPane.INFORMATION_MESSAGE);
							System.exit(0);
									
						} catch (IOException e1) {
//							// TODO 自动生成 catch 块
//							e1.printStackTrace();
							System.out.println("已和服务器断开连接");
							
						}
						
					}
					if ((revPackage.getFrom().equals(SrcPackage.SERVER_ID) )&& (!revPackage.getTo().equals(chatframe.getUser().getUNO()))){

						map3 = revPackage.getData();
						company =	(TCompany) map3.get("COMPANY");
						chatframe.getUserlistpanel().updateTree(company);						
						try { 							
							StyledDocument sdChatContent= chatframe.getChatcontent().getJtpchatcontent().getStyledDocument();
							SimpleAttributeSet style = new SimpleAttributeSet(); // 样式
							SimpleDateFormat tiem = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
							String date = tiem.format(new Date());				
							chatframe.getChatcontent().getJtpchatcontent().setEditable(true);
							
							sdChatContent.insertString(sdChatContent.getLength(), "【"+date+"】 "+revPackage.getTomeno()+"下线了" + "\n", style);
							sdChatContent.insertString(sdChatContent.getLength(), "\n", style);
							chatframe.getChatcontent().getJtpchatcontent().setEditable(false);
						} catch (BadLocationException e1) {
							// TODO 自动生成 catch 块
							e1.printStackTrace();
						}
					}
//					System.out.println(revPackage.getFrom());
//					System.out.println(revPackage.getTomeno());
					if(revPackage.getFrom().equals("SHUTDOWN") ){
						map = revPackage.getData();
						company =	(TCompany) map.get("COMPANY");
						chatframe.getUserlistpanel().updateTree(company);
						JOptionPane.showMessageDialog(null, "您已和服务器断开连接!", "提示",JOptionPane.INFORMATION_MESSAGE);
//						System.exit(0);
					}
					System.out.println("下线了");
				}
	//				公告包
				if (revPackage.getType().equals(SrcPackage.NOTE_TYPE)) {
					
					chatframe.getJtpNote().setEnabled(true);
					chatframe.getJtpNote().setText(revPackage.getTomeno());
					chatframe.getJtpNote().setEnabled(false);
						
				}
				//密码修改验证包
				if (revPackage.getType().equals(SrcPackage.OK_PWD_TYPE)) {	
					if (revPackage.getTomeno().equals("Y")){
						JOptionPane.showMessageDialog(null, "密码修改成功!", "提示",JOptionPane.INFORMATION_MESSAGE);
						chatframe.getToppanel().getSetpwd().dispose();
						
					}else if(revPackage.getTomeno().equals("N")){
						JOptionPane.showMessageDialog(null, "密码修改失败!", "提示",JOptionPane.INFORMATION_MESSAGE);
					}
				}
				
				//文件发送询问包
				
				if (revPackage.getType().equals(SrcPackage.FILESEND_TYPE)) {
					
					System.out.println("send 询问");
					
					if(revPackage.getTo().equals(chatframe.getUser().getUNO())){
						
						
						//创建样式文档
						StyledDocument content= chatframe.getChatcontent().getJtpchatcontent().getStyledDocument();
						// 获取当前样式
						SimpleAttributeSet style = new SimpleAttributeSet(); 							//当前时间
					
						chatframe.getChatcontent().getJtpchatcontent().setEditable(true);	
						
						List filedata = (ArrayList)revPackage.getData().get("FILECONTENT");
						String fileName = (String) filedata.get(0);
						String fileLength = (String) filedata.get(1);
						
						btnSave = new JButton("另存为");		
						btnNo = new JButton("拒绝");		

						content.insertString(content.getLength(), revPackage.getTomeno()+ " 要给您发送文件 \"" + fileName
									+ "(" + fileLength + " k)\"您是要 ", style);

						MyActionListener myactionlistener = new MyActionListener();
						btnSave.setBorder(null);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -