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

📄 clientlist.java

📁 本程序可在局域网内实现聊天、传送文件功能
💻 JAVA
字号:
package org.tuna.net.csuim;

import java.net.*;
import java.util.*;
import org.tuna.net.encode.UTF16Encoder;

public class ClientList extends Thread
{
	//private ArrayList users;    //for jdk1.4
	private ArrayList<User> users;
	//private ArrayList userAdapters;    //for jdk1.4
	private ArrayList<UserListener> userListeners;
	private int port;
	private DatagramSocket sock;
	private InetAddress serverAddress;
	private int serverPort;
	private boolean stop;
	
	public ClientList(int op, InetAddress sa, int sp) throws Exception
	{
		//users = new ArrayList();    //for jdk1.4
		users = new ArrayList<User>();
		userListeners = new ArrayList<UserListener>();
		serverAddress = sa;
		serverPort = sp;
		port = op;
		sock = new DatagramSocket(port);
		stop = false;
		this.start();
	}
	
	
	//  -----  for thread  -----
	public void run()
	{
		try{			
			while( !stop ){
				byte[] rcvByte = new byte[512];
				DatagramPacket rcvpkt = new DatagramPacket(rcvByte, rcvByte.length);
				this.sock.receive(rcvpkt);				
				byte[] b = new byte[rcvpkt.getLength()];
		    System.arraycopy(rcvByte, 0, b, 0, rcvpkt.getLength());
		    String cmdstr = UTF16Encoder.decode(b).trim();
		    execute(cmdstr.charAt(0), new User(cmdstr.substring(1)));
			}
		}
		catch(Exception e){
			e.printStackTrace();
		}
	}
	
		
	// -----  Public Method  -----
	public void addUserListener(UserListener ul)
	{
		userListeners.add(ul);
	}
	
	public void close()
	{
		this.stop = true;
		try{
			User exit = new User("exit", false);
			byte[] b = UTF16Encoder.encode('0' + exit.toString());
			this.sock.send(new DatagramPacket(b, b.length, InetAddress.getLocalHost(), this.port));
			Thread.sleep(1000);
			this.sock.close();
		}catch(Exception e){}
	}
	
	public int countUsers()
	{
		return users.size();
	}
	
	public User getUser(String id)
	{
		if ( !isUserExist(id) )
		   return null;
		else
		   return users.get(getUserNumberInList(id));
	}
	
	private boolean isUserExist(String id)
	{
		if ( getUserNumberInList(id) == -1 )
		   return false;
		else 
		   return true;
	}
	
	public User[] toArray()
	{
		if (users.size() == 0) 
		  return null;
		else
		  return users.toArray(new User[users.size()]);
	}
	
	public void updateList()
	{
		try{
			User temp = new User("ask_all", false);
			temp.update("onPort", String.valueOf(this.port));
			byte[] b = UTF16Encoder.encode(TransData.ASK_FOR_ALL + temp.toString());
			this.sock.send(new DatagramPacket(b, b.length, this.serverAddress, this.serverPort));
		}catch(Exception e){}
	}
	
	
	//------  Private Method  ---------	
	private void activeCreateNewEvent(User u)
	{
		for(int i = 0; i < userListeners.size(); i++)
		   userListeners.get(i).createNewPerformed(u);
	}
	
	private void activeLeaveEvent(User u)
	{
		for(int i = 0; i < userListeners.size(); i++)
		   userListeners.get(i).leavePerformed(u);
	}
	
	private void activeOnlineEvent(User u)
	{
		for(int i = 0; i < userListeners.size(); i++)
		   userListeners.get(i).onlinePerformed(u);
	}
		
	private void activeUpdateEvent(User u)
	{
		for(int i = 0; i < userListeners.size(); i++)
		   userListeners.get(i).updatePerformed(u);
	}
		
	private void execute(char cmd, User u)
	{
		switch(cmd){
			case TransData.USER_ONLINE:
			   online(u);
			   break;
			case TransData.USER_LEAVE:
			   leave(u);
			   break;
			case TransData.USER_UPDATE:
			   update(u);
			   break;
			//case 
		}
	}
	
	private int getUserNumberInList(String id)
	{
		for(int i = 0; i < users.size(); i++)
		   if ( users.get(i).value("ID").equals(id) )
		      return i;
	  return -1;
	}
		
	private void leave(User u)
	{
		if ( isUserExist(u.value("ID")) ){
		   users.get(getUserNumberInList(u.value("ID"))).update("online", "false");
		   activeLeaveEvent(u);
		}
	}
	
	private void online(User u)
	{
		if ( isUserExist(u.value("ID")) ){
		   users.get(getUserNumberInList(u.value("ID"))).update(u);
		   activeOnlineEvent(u);
		}
		else{
			this.users.add(u);
			activeCreateNewEvent(u);
		}
	}
		
	private void update(User u)
	{
		if ( isUserExist(u.value("ID")) ){
		   users.get(getUserNumberInList(u.value("ID"))).update(u);
		   activeUpdateEvent(u);
		}
	}
	
}

⌨️ 快捷键说明

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