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

📄 managemes.java

📁 JAVA编写的聊天小程序!!程序默认需放到D:下
💻 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 + -