------- android培训、java培训、期待与您交流! ----------
package along.client.model;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import along.chatserver.common.MessageInfo;
import along.chatserver.common.MessageType;
public class ConnectToServer {
public ConnectToServer() {
}
public Socket connectToServer(Object obj) {
Socket socket=null;
try {
socket=new Socket("127.0.0.1",3002);
ObjectOutputStream oos=new ObjectOutputStream(socket.getOutputStream());
oos.writeObject(obj);
oos.flush();
ObjectInputStream ois=new ObjectInputStream(socket.getInputStream());
MessageInfo info=(MessageInfo)ois.readObject();
if(info.getMsgType()!=MessageType.TYPE_1){
ois.close();
oos.close();
socket.close();
socket=null;
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return socket;
}
}
package along.client.model;
import java.util.Vector;
import javax.swing.table.AbstractTableModel;
/**
* 查询数据,并将数据显示在列表中
* @author Along
*
*/
public class DataModel extends AbstractTableModel{
/**
*
*/
private static final long serialVersionUID = 1L;
private Vector<Vector<String>> rowVector=null;
private Vector<String> colum=null;
public DataModel(Vector<Vector<String>> rowVector,Vector<String> colum) {
this.rowVector=rowVector;
this.colum=colum;
}
public Vector<Vector<String>> queryData(String sql,String[]paras){
return rowVector;
}
@Override
public int getColumnCount() {
if(colum==null)
return 0;
return colum.size();
}
@Override
public int getRowCount() {
if(rowVector==null)
return 0;
return rowVector.size();
}
@Override
public Object getValueAt(int row, int colum) {
//返回第 row 行,第 colum 列的内容给JTable对象用以填充相对应的单元格
return rowVector.get(row).get(colum);
}
@Override
public String getColumnName(int column) {
//返回第 column列的值用作 JTable 对象相对应位置的标题
return this.colum.get(column);
}
}
package along.client.model;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.Vector;
import along.chatserver.common.MessageInfo;
import along.chatserver.common.MessageType;
import along.client.tools.ChatFrams;
import along.client.tools.ChatRoomFrames;
import along.client.tools.ClientTools;
import along.client.tools.MessagesStore;
import along.client.view.ChatJFrame;
import along.client.view.ChatRoomJFrame;
public class ReceiveThread implements Runnable{
private ObjectInputStream ois;
public ReceiveThread(ObjectInputStream ois) {
this.ois=ois;
}
@Override
public void run() {
try {
ChatRoomJFrame roomJFrame;
while (true) {
MessageInfo messageInfo=(MessageInfo)ois.readObject();
switch (messageInfo.getMsgType()) {
case MessageType.TYPE_3:
ChatJFrame frame=ChatFrams.getChatFramsMap().get(messageInfo.getSender());
if(frame==null){
String sender=messageInfo.getSender();
if(!ClientTools.getAllFriends().contains(sender))
return;
ClientTools.getUserList().getNewMessages(sender);
Vector<MessageInfo>messages=MessagesStore.getMessagesStoreMap().get(sender);
if(messages==null){
messages=new Vector<MessageInfo>();
messages.add(messageInfo);
MessagesStore.getMessagesStoreMap().put(sender, messages);
}
else{
messages.add(messageInfo);
MessagesStore.getMessagesStoreMap().put(sender, messages);
}
}
else {
frame.addNewInfo(messageInfo);
}
break;
case MessageType.TYPE_5:
ClientTools.getUserList().changeUserOnlineState(messageInfo);
break;
case MessageType.TYPE_6:
String account=messageInfo.getContent();
if(!ClientTools.getAllFriends().contains(account))
continue;
ClientTools.getUserList().changeUserLoginState(account);
break;
case MessageType.TYPE_7:
String account2=messageInfo.getContent();
if(!ClientTools.getAllFriends().contains(account2))
continue;
ClientTools.getUserList().changeUserLogoutState(account2);
break;
case MessageType.TYPE_8:
Vector<String> friends=messageInfo.getFriendVector();
ClientTools.getAllFriends().addAll(friends);
ClientTools.getUserList().getAllFriendList();
break;
case MessageType.TYPE_10:
if(ClientTools.getSearchDialog()!=null){
ClientTools.getSearchDialog().receiveQueryFriendMessage(messageInfo);
}
break;
case MessageType.TYPE_13:
if(ClientTools.getSearchDialog()!=null)
ClientTools.getSearchDialog().receiveAddFriendResult(messageInfo);
break;
case MessageType.TYPE_14:
ClientTools.getAllFriends().add(messageInfo.getContent());
ClientTools.getUserList().addFriendChangeList(messageInfo.getContent(),messageInfo.isOnline());
break;
case MessageType.TYPE_15:
ClientTools.getAllFriends().remove(messageInfo.getContent());
ClientTools.getUserList().delFriendChangeList(messageInfo.getContent());
break;
case MessageType.TYPE_17:
roomJFrame=ChatRoomFrames.getChatRoomFramMap().get(messageInfo.getReceiver());
if(roomJFrame==null)
continue;
roomJFrame.userJoinRoom(messageInfo);
break;
case MessageType.TYPE_18:
roomJFrame=ChatRoomFrames.getChatRoomFramMap().get(messageInfo.getReceiver());
if(roomJFrame==null)
continue;
roomJFrame.userLeaveRoom(messageInfo);
break;
case MessageType.TYPE_19:
roomJFrame=ChatRoomFrames.getChatRoomFramMap().get(messageInfo.getReceiver());
if(roomJFrame==null)
continue;
roomJFrame.addNewInfo(messageInfo);
break;
case MessageType.TYPE_20:
if(ClientTools.getSearchDialog()!=null)
ClientTools.getSearchDialog().receiveJoinChatRoomResult(messageInfo);
break;
case MessageType.TYPE_23:
if(ClientTools.getCreateChatRoomDialog()==null)
System.out.println("创建聊天室窗口为空");
ClientTools.getCreateChatRoomDialog().getCreateResult(messageInfo);
break;
case MessageType.TYPE_25:
if(ClientTools.getSearchDialog()!=null)
ClientTools.getSearchDialog().receiveQueryChatRoomMessage(messageInfo);
break;
}
}
} catch (IOException e) {
try {
ois.close();
} catch (IOException e1) {
e1.printStackTrace();
}
ClientTools.getUserList().quitProgram();
System.out.println("退出客户端");
return;
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
package along.client.tools;
import java.util.HashMap;
import along.client.view.ChatJFrame;
public class ChatFrams {
private static HashMap<String, ChatJFrame> chatFramMap=new HashMap<String, ChatJFrame>();
public ChatFrams() {
}
public static HashMap<String, ChatJFrame> getChatFramsMap() {
return chatFramMap;
}
}
package along.client.tools;
import java.util.HashMap;
import along.client.view.ChatRoomJFrame;
public class ChatRoomFrames {
private static HashMap<String, ChatRoomJFrame> chatRoomFramMap=new HashMap<String, ChatRoomJFrame>();
public static HashMap<String, ChatRoomJFrame> getChatRoomFramMap() {
return chatRoomFramMap;
}
}
package along.client.tools;
import java.awt.Font;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.color.ColorSpace;
import java.awt.image.BufferedImage;
import java.awt.image.ColorConvertOp;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.Vector;
import javax.imageio.ImageIO;
import along.chatserver.common.MessageInfo;
import along.client.view.CreateChatRoomDialog;
import along.client.view.SearchDialog;
import along.client.view.UserJPanel;
import along.client.view.UserList;
public class ClientTools {
private static UserList userList;
private static SearchDialog searchDialog;
private static CreateChatRoomDialog createChatRoomDialog;
private static ObjectOutputStream oos;
private static Vector<String>friendList=new Vector<String>();;
private static UserJPanel currentSelectedUser=null;
/**
* 宋体 斜体,20号
*/
public static Font font1=new Font("宋体", Font.PLAIN|Font.ITALIC, 20);
/**
* 楷体 粗斜体,30号
*/
public static Font font2=new Font("楷体", Font.PLAIN|Font.BOLD|Font.ITALIC, 30);
/**
* 楷体体 粗体,20号
*/
public static Font font3=new Font("楷体", Font.PLAIN|Font.BOLD, 20);
/**
* 楷体 粗体,40号
*/
public static Font font4=new Font("楷体", Font.PLAIN|Font.BOLD, 40);
/**
* 楷体 普通,15号
*/
public static Font font5=new Font("楷体", Font.PLAIN, 15);
/**
* 计算机屏幕宽度
*/
public static final int SCREEN_WIDTH=(int) Toolkit.getDefaultToolkit().getScreenSize().getWidth();
/**
* 计算机屏幕高度
*/
public static final int SCREEN_HEIGHT=(int) Toolkit.getDefaultToolkit().getScreenSize().getHeight();
/**
* 接收图片路径参数,并返回图片对象
* @param picDirectory图片的存储路径
* @return图片对象
*/
public static Image getImage(String picDirectory) {
Image im=null;
try
{
im=ImageIO.read(new File(picDirectory));
}
catch(Exception e)
{
e.printStackTrace();
}
return im;
}
public static void sendMessage(MessageInfo messageInfo) {
try {
oos.writeObject(messageInfo);
} catch (IOException e) {
e.printStackTrace();
ClientTools.getUserList().quitProgram();
}
}
/**
*
* @param imageDirectory 图片路径
* @return 变成灰色的图片
*/
public static BufferedImage getGrayPicture(String imageDirectory){
BufferedImage originalImage=null;
try {
originalImage = ImageIO.read(new FileInputStream(imageDirectory));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
BufferedImage grayPicture;
int imageWidth = originalImage.getWidth();
int imageHeight = originalImage.getHeight();
grayPicture = new BufferedImage(imageWidth, imageHeight,
BufferedImage.TYPE_3BYTE_BGR);
ColorConvertOp cco = new ColorConvertOp(ColorSpace
.getInstance(ColorSpace.CS_GRAY), null);
cco.filter(originalImage, grayPicture);
return grayPicture;
}
public static BufferedImage getSRGBPicture(String imageDirectory){
BufferedImage originalImage=null;
try {
originalImage = ImageIO.read(new FileInputStream(imageDirectory));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
BufferedImage magentaPicture;
int imageWidth = originalImage.getWidth();
int imageHeight = originalImage.getHeight();
magentaPicture = new BufferedImage(imageWidth, imageHeight,
BufferedImage.TYPE_3BYTE_BGR);
ColorConvertOp cco = new ColorConvertOp(ColorSpace
.getInstance(ColorSpace.CS_sRGB), null);
cco.filter(originalImage, magentaPicture);
return magentaPicture;
}
publ