📄 controlmes.java
字号:
package group.client;
import java.io.*;
import java.net.*;
import javax.swing.*;
import group.Customer;
import group.Message;
/**
用于控与服务器端连接的类
*/
public class ControlMes
{
private String ID; //保存登录成功的用户的ID
private ObjectOutputStream objOut; //与服务器传输数据的输入和输出流
private ObjectInputStream objIn;
private Socket clientSocket;
private Client client;
private ClientFrame conFrame;
public ControlMes(Client c, ClientFrame cFrame)
{
client = c;
conFrame = cFrame;
}
/**
此方法用于发送消息给服务器
@param mes 要发送到服务器的消息辽符串
*/
public void sendMes(String mes)
{
Message mesObj = new Message();
setMesObj(mesObj, mes, this.ID, "", false);
write(mesObj);
}
/**
此方法用来发送悄悄话到服务器
@param toFrendID 接收悄悄话的好友的ID
@param mes 消息字符串
*/
public void sendLatent(String toFrendID, String mes)
{
Message mesObj = new Message();
setMesObj(mesObj, mes, ID, toFrendID, true);
write(mesObj);
}
/*
设置Message对象的方法
*/
private void setMesObj(Message mesObj, String mes, String id, String toFrendID, boolean latent)
{
mesObj.setMessage(mes);
mesObj.setID(id);
mesObj.setToFrendID(toFrendID);
mesObj.setLatent(latent);
}
/**
此方法用来发送登录消息
@param ID 用户登录的ID
@param passWord 用户登录的密码
*/
public void sendLogin(String ID, String passWord)
{
Customer cusObj = new Customer();
this.ID = ID;
setCusObj(cusObj, ID, passWord, "", true, false, false);
write(cusObj);
}
/**
此方法用来发送注册消息
@param passWord 用户注册的密码
@param name 用户注册的昵称
*/
public void buildID(String passWord, String name)
{
Customer cusObj = new Customer();
setCusObj(cusObj, "", passWord, name, false, true, false);
write(cusObj);
}
/*
用于设置Customer对象的方法
*/
private void setCusObj(Customer cusObj, String id, String pass, String name, boolean login, boolean newID, boolean move)
{
cusObj.setID(id);
cusObj.setPassWord(pass);
cusObj.setName(name);
cusObj.setLogin(login);
cusObj.setNewID(newID);
cusObj.setMove(move);
}
/*
此方法用来发写对象给服务器
*/
private void write(Object obj)
{
try
{
objOut.writeObject(obj);
}catch(IOException IO_e)
{
if(obj instanceof Message)
{
conFrame.updateMes("发送消息时出错:");
}
else
{
conFrame.updateMes("注册或登录时出错:");
}
conFrame.updateMes(IO_e.toString());
return;
}
}
/**
用于接收从服务器接消息
*/
public void inceptObj()
{
Object obj = null;
try
{
System.out.println("readObject()前: " + obj);
obj = objIn.readObject();
System.out.println("readObject()后: " + obj);
}catch(IOException IO_e)
{
System.out.println("读取对象出错");
System.out.println(IO_e.toString());
JOptionPane.showMessageDialog(conFrame,
"与服务器的连接断开,程序即将关闭!!!",
"错误", JOptionPane.ERROR_MESSAGE);
System.exit(1);
}catch(ClassNotFoundException CNF_e)
{
conFrame.updateMes("接收消息时出现错误:");
conFrame.updateMes(CNF_e.toString());
return;
}catch(Exception e)
{
}
if(obj instanceof Message)
{
Message mesObj = (Message)obj;
disposeMes(mesObj);
}
else if(obj instanceof Customer)
{
Customer cusObj = (Customer)obj;
disposeCus(cusObj);
}
}
/*
处理消息对象用的方法
*/
private void disposeMes(Message mesObj)
{
String mes = mesObj.getMessage();
conFrame.updateMes(mes);
}
/*
处理用户状态对象用的方法
*/
private void disposeCus(Customer cusObj)
{
String tmpID = cusObj.getID();
String tmpName = cusObj.getName();
if(cusObj.isMove() && (!tmpID.equals(ID)))
{
if(tmpName.length() > 8)
{
tmpName = tmpName.substring(0, 7) + "..";
}
String moveID = tmpName + "[" + tmpID + "]" + "move";
conFrame.updateFrend(moveID);
}
else if(cusObj.isNewID() && (!tmpID.equals("faild")))
{
JOptionPane.showMessageDialog(null,
"注册成功," + "您的ID号是: " + tmpID, "注册成功", JOptionPane.INFORMATION_MESSAGE);
client.startLogin();
}
else if(cusObj.isLogin() && (!tmpID.equals(ID)))
{
if(tmpName.length() > 8)
{
tmpName = tmpName.substring(0, 7) + "..";
}
conFrame.updateFrend(tmpName + "[" + tmpID + "]");
}
else if(cusObj.isLogin() && tmpID.equals(ID))
{
if(tmpName.length() > 8)
{
tmpName = tmpName.substring(0, 7) + "..";
}
conFrame.updateFrend(tmpName + "[" + ID + "]");
client.startFrame();
}
else if(!cusObj.isLogin() && tmpID.equals(this.ID))
{
JOptionPane.showMessageDialog(null,
"登录不成功!!!请重试。", "登录不成功", JOptionPane.INFORMATION_MESSAGE);
client.startLogin();
}
}
/**
接收一个连接服务器的Socket对象,从中创建对象流
@param soc 连接服务器的Socket
*/
public void setSocket(Socket soc)
{
clientSocket = soc;
int i = 0;
for(; i < 5; i++) //这个循环用来尝试连接服务器5次
{
try
{
objOut = new ObjectOutputStream(clientSocket.getOutputStream());
objIn = new ObjectInputStream(clientSocket.getInputStream());
break;
}catch(IOException IO_e)
{
}
try
{
Thread.sleep(2000);
}catch(InterruptedException e)
{
}
}
if(i > 4)
{
JOptionPane.showMessageDialog(conFrame,
"连接服务器出错!!!请稍后再试.",
"错误", JOptionPane.ERROR_MESSAGE);
System.exit(1);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -