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

📄 controlservice.java

📁 JAVA编写的聊天小程序!!程序默认需放到D:下
💻 JAVA
字号:
package group.server;

import java.io.*;
import java.net.*;
import java.util.*;
import group.Customer;
import group.Message;

/**
 <code>ControlService</code>此类主要负责处理服务器跟某个客户端连接后的事项
 @author wls
*/
public class ControlService extends Thread
{
	private static HashMap map = new HashMap();
	private static ManageMes manMes = new ManageMes();

	private String clientID;
	private ObjectOutputStream objOut;
	private ObjectInputStream objIn;
	private Socket conSocket;
	private ServerFrame conFrame;

	/**
	 ControlService类的构造函数,用于初始化一些IO流和起动线程
	 @param s 连接用的Socket对象
	*/
	public ControlService(Socket socket, ServerFrame serFrame)
	{
		conSocket = socket;
		conFrame = serFrame;
		manMes.setFrame(serFrame);

		try
		{
			objIn = new ObjectInputStream(conSocket.getInputStream());
			objOut = new ObjectOutputStream(conSocket.getOutputStream());
		}catch(IOException IO_e)
		{
			conFrame.updateMes("ControlService类中创建输入或者输出流时发生IO错误:\n" +
				IO_e.toString());
			return;
		}

		start();
	}

	/**
	 结程执行入口,负责与相应的客户端之间的连接
	*/
	public void run()
	{
		while(true)
		{
			try
			{
				Object obj = objIn.readObject();
				System.out.println(obj);
				transact(obj);

			}catch(IOException IO_e)
			{
											System.out.println("moveFrend()方法之前");
				moveFrend();
				conFrame.updateMes("ControlService类的run()方法在读取对象时出现IO错误:\n" +
					IO_e.toString());
				return;
			}
			catch(ClassNotFoundException CNF_e)
			{
				conFrame.updateMes("ControlService类的run()方法在读取对象时出现ClassNotFoundException错误:\n" +
					CNF_e.toString());
			}
		}
	}

	/**
	 此方法用来更新服务器和所有客户端的在线好友列表
	*/
	private void moveFrend()
	{
		manMes.changeFrend(clientID + "move");

		if(map.size() == 0)
		{
			return;
		}

		Customer cusObj = new Customer();
		setCus(cusObj, clientID, "", manMes.getName(clientID), false, false, true);
		map.remove(clientID);
		manMes.sendAll(map, cusObj);
	}

	/*
	 用于读到和分析对象中信息的方法,并执行相应的动作
	 @param obj 被分析的对象,有Message和Customer对象两种
	*/
	private void transact(Object obj) throws IOException
	{
		boolean bool;

		if(obj instanceof Message)
		{
			Message mesObj = (Message)obj;
			String ID = mesObj.getID();

			if(!mesObj.isLatent())
			{
				String tmpMes = manMes.getName(ID) + "[" + ID + "]" + "说: " + mesObj.getMessage();
				manMes.changeMes(tmpMes);
				mesObj.setMessage(tmpMes);
				manMes.sendAll(map, mesObj);
			}
			else
			{
				ObjectOutputStream toClient = (ObjectOutputStream)map.get(mesObj.getToFrendID());
				mesObj.setMessage(manMes.getName(ID) + "[" + ID + "]" + "对您说: " + mesObj.getMessage());
				manMes.sendLatentMes(mesObj, toClient);
			}
		}
		else if(obj instanceof Customer)
		{
			Customer cusObj = (Customer)obj;
			String ID = cusObj.getID();
			String passWord = cusObj.getPassWord();

			if(cusObj.isLogin())
			{
				bool = manMes.login(ID, passWord);

				if(bool)
				{
					clientID = ID;
					map.put(ID, objOut);
					manMes.changeFrend(ID);
					setCus(cusObj, clientID, "", manMes.getName(ID), true, false, false);
					manMes.sendAll(map, cusObj);

					Set set = map.keySet();
					Iterator i = set.iterator();

					while(i.hasNext())
					{
						String tmpID = (String)i.next();
						Customer tmpCus = new Customer();

						if(tmpID.equals(ID))
						{
							continue;
						}

						try
						{
							setCus(tmpCus, tmpID, "", manMes.getName(tmpID), true, false, false);
							objOut.writeObject(tmpCus);
						}catch(IOException IO_e)
						{
						}
					}

					Message mesObj = new Message();
					String tmpMes = manMes.getName(ID) +"[" + ID + "]" + "微笑着说:" + "hi !!! 大家好,我来也...";
					mesObj.setMessage(tmpMes);
					manMes.changeMes(tmpMes);
					manMes.sendAll(map, mesObj);
				}
				else
				{
					setCus(cusObj, ID, "", "", false, false, false);

					try
					{
						objOut.writeObject(cusObj);
					}catch(IOException IO_e2)
					{
						conFrame.updateMes("登录的成功与否的信息写给客户端时发生IO错误:\n" +
							IO_e2.toString());
					}
				}
			}
			else if(cusObj.isNewID())
			{
				ID = manMes.buildID(cusObj.getName(), passWord);

				if(ID.equals("faild"))
				{
					setCus(cusObj, "faild", "", "", false, true, false);
				}
				else
				{
					setCus(cusObj, ID, "", "", false, true, false);
				}

				try
				{
					objOut.writeObject(cusObj);
				}catch(IOException IO_e)
				{
					conFrame.updateMes("发送注册成功与否的信息给客户端时发生IO错误:\n" +
						IO_e.toString());
				}
			}
		}
	}

	/*
	 设置Customer对象的状态
	*/
	private void setCus(Customer cusObj, String id, String passWord, String name,
		boolean login, boolean newID, boolean move)
	{
		cusObj.setID(id);
		cusObj.setPassWord(passWord);
		cusObj.setName(name);
		cusObj.setLogin(login);
		cusObj.setNewID(newID);
		cusObj.setMove(move);
	}
}



⌨️ 快捷键说明

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