📄 managemes.java
字号:
package group.server;
import java.awt.*;
import java.io.*;
import java.net.*;
import java.util.*;
import group.Customer;
import group.Message;
/**
<code>ManageMes</code>此类主要负责消息的调转
*/
public class ManageMes
{
private static int nextID = 1000;
private ServerFrame manFrame;
private PrintWriter saveID;
private BufferedReader readID;
private String[] infoArray;
public ManageMes()
{
}
public void setFrame(ServerFrame frame)
{
manFrame = frame;
readInfo();
}
/**
该方法负责更新服务器的消息面板中的消息
@param mes 要更新的消息字符串
*/
public synchronized void changeMes(String mes)
{
manFrame.updateMes(mes);
}
/**
此方法用来添加或删除服务器的在线好友列表
@param frendID 要添加或删除的在线好友的ID
*/
public synchronized void changeFrend(String frendID)
{
if(!frendID.endsWith("move"))
{
String tmpName = getName(frendID);
if(tmpName.length() > 8)
{
tmpName = tmpName.substring(0, 7) + "..";
}
manFrame.updateFrend(tmpName + "[" + frendID + "]");
}
else
{
String tmpFrendID = frendID.substring(0, frendID.lastIndexOf("move"));
String tmpName = getName(tmpFrendID);
if(tmpName.length() > 8)
{
tmpName = tmpName.substring(0, 7) + "..";
}
manFrame.updateFrend(tmpName + "[" + tmpFrendID + "]"+ "move");
}
}
/**
此方法用来发送悄悄话
@param mes 要发送的Message对象
@param objOut ObjectOutputStream对象,从其中获取输出流
*/
public synchronized void sendLatentMes(Message mes, ObjectOutputStream objOut)
{
try
{
objOut.writeObject(mes);
}catch(IOException IO_e)
{
manFrame.updateMes("ManageMes类在发送悄悄话消息发生IO错误:\n" +
IO_e.toString());
}
}
/**
此方法用来做登录验证用
@param ID 要登录的用户ID
@param passWord 要登录的用户的密码
*/
public synchronized boolean login(String ID, String passWord)
{
System.out.println("ID = " + ID + ", passWord = " + passWord);
for(int i = infoArray.length; --i >= 0;)
{
if(!infoArray[i].substring(0, infoArray[i].indexOf("::")).equals(ID))
{
continue;
}
else if(!infoArray[i].substring(infoArray[i].lastIndexOf("::") + 2).equals(passWord))
{
return false;
}
else
{
return true;
}
}
return false;
}
/**
此方法用来注册新的账号
@param name 要注册的用户的昵称
@param passWord 要注册的用户的密码
*/
public synchronized String buildID(String name, String passWord)
{
try
{
saveID = new PrintWriter(new FileWriter("user.txt", true), true);
}catch(IOException IO_e)
{
manFrame.updateMes("ManageMes类的buildID()方法发生IO错误:\n" +
IO_e.toString());
}
String ID = Integer.toString(++nextID);
saveID.print(ID + "::");
saveID.print(name + "::");
saveID.println(passWord);
saveID.close();
readInfo();
return ID;
}
/**
此方法用来向所有的用户发送消息
@param map 一个HashMap对象,里面有对应每个用户的ID和ObjectOutputStream对像
@param obj 要发送给客户端的对象,为一个Object对象
*/
public synchronized void sendAll(HashMap map, Object obj)
{
Set set = map.entrySet();
Iterator i = set.iterator();
while(i.hasNext())
{
Map.Entry me = (Map.Entry)i.next();
try
{
((ObjectOutputStream)me.getValue()).writeObject(obj);
}catch(IOException IO_e2)
{
manFrame.updateMes("ManageMes类的sendAll()方法在写对象发生IO错误:\n" +
IO_e2.toString());
}
}
}
/**
此方法用来从给定的ID中取得其对应的昵称
@param ID 要取其对应昵称的ID,是一个字符串
*/
public synchronized String getName(String ID)
{
for(int i = infoArray.length; --i >= 0;)
{
String tmpID = infoArray[i].substring(0, infoArray[i].indexOf("::"));
if(!tmpID.equals(ID))
{
continue;
}
else
{
return infoArray[i].substring(infoArray[i].indexOf("::") + 2,
infoArray[i].lastIndexOf("::"));
}
}
return "";
}
/**
此方法用来从文件中读取用户的账号信信并保存到一个数组中
*/
private void readInfo()
{
ArrayList arrayList = new ArrayList();
File file = new File("user.txt");
if(!file.exists())
{
try
{
file.createNewFile();
}catch(IOException IO_e)
{
manFrame.updateMes("创建user.txt文件时出现IO错误:\n" + IO_e.toString());
return;
}
}
try
{
readID = new BufferedReader(new FileReader(file));
}catch(FileNotFoundException FNOT_e)
{
manFrame.updateMes("ManageMes类中读取账号信息时发生文件不存在错误:\n" + FNOT_e.toString());
return;
}
try
{
String tmp;
while((tmp = readID.readLine()) != null)
{
arrayList.add(tmp);
}
}catch(IOException IO_e)
{
manFrame.updateMes("ManageMes类的readInfo()方法在读取文件时发生IO错误:\n" +
IO_e.toString());
}finally
{
try
{
readID.close();
}catch(IOException IO_e3)
{
manFrame.updateMes("ManageMes类的readInfo()方法在关闭流时发生IO错误:\n" +
IO_e3.toString());
}
}
Object[] tmp = arrayList.toArray();
int len = tmp.length;
infoArray = new String[len];
for(int i = len; --i >= 0;)
{
infoArray[i] = (String)tmp[i];
System.out.println(i + " user.txt文件中的用户信息: " + infoArray[i]);
}
if(len > 0)
{
nextID = Integer.parseInt(infoArray[len - 1].substring(0,
infoArray[len - 1].indexOf("::")));
}
System.out.println("nextID = " + nextID);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -