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

📄 serverdatabase.java

📁 JAVA实现的聊天工具,可以容纳最多10个用户 1.本系统需要JDK1.5 或更高版本的支持。 2.serverDatabase为服务器端的数据文件. 若使用现有数据,可用帐号:1, 密码
💻 JAVA
字号:
//class to handle all info the server needed,cannot be instantiated once
import java.io.*;
import java.util.*;

public class ServerDatabase implements Serializable{
	private long registeredClient;
	private long haveRegisteredClientNum; //no matter exist or not;
	private int admNum;
	private int haveRegisteredAdmNum;  //no matter exist or not;
	private int serverThreadNum; //num of thread in Server-Thread-Pool
	private transient long  onlineClient;
	private transient List<Long> onlineClientsList;
	
	private List<ClientData> clients; //list contains objects of ClientData
	private List<Administrator> admList;
	
	public ServerDatabase(){ //constructor
		registeredClient=0;
		haveRegisteredClientNum=0;
		admNum=0;
		haveRegisteredAdmNum=0;
		serverThreadNum=20; 
		onlineClient=0;
		onlineClientsList=new LinkedList<Long>();
		clients=new LinkedList<ClientData>();
		admList=new LinkedList<Administrator>();
	}
	
	void delAdm(int id){
		int index=Collections.binarySearch(admList,new Administrator(id));
		admList.remove(index);	
		admNum--;
	}
	
	int getAdmNum(){
		//System.out.println(admNum);
		return admNum;
	}
	
	boolean containsAdm(int id){
		int index=Collections.binarySearch(admList,new Administrator(id));
		if(index<0){			
			return false;
		}
		return true;
	}
	
	int getNewAdmID(){
		return haveRegisteredAdmNum;
	}
	
	void addAdm(Administrator a){
		admList.add(a);
		admNum++;
		haveRegisteredAdmNum++;
	}
	
	List<Administrator> getAdmList(){
		return admList;
	}
	
	Administrator findAdm(int id){
		int index=Collections.binarySearch(admList,new Administrator(id));
		if(id<0)
			return null;
		return admList.get(index);
	}
	
	synchronized List<Long> getOnlineClientsList(){
		return onlineClientsList;
	}
	
	synchronized long getRegisteredClient(){
		return registeredClient;
	}
	
	synchronized long getNewClientID(){
		return haveRegisteredClientNum;
	}
	
	synchronized long getOnlineClient(){ //clients' id
		return onlineClient;
	}
	
	synchronized void setRegisteredClient(long num){
		registeredClient=num;
	}
	
	synchronized void setOnlineClient(long num){
		onlineClient=num;
	}
	
	synchronized void addClient(ClientData c){
		clients.add(c);
		registeredClient++;	
		haveRegisteredClientNum++;
	}
	
	synchronized ClientData getClient(long index){ //get client by index in the list
		try{
			return clients.get((int)index);
		}catch(IndexOutOfBoundsException e){
			return null;
		}
	}
	
	synchronized ClientData findClient(long id){  
		//System.out.println("to find id:"+id);
		int index=Collections.binarySearch(clients,new ClientData(id));
		
		if(index<0)  //not find
			return null;
		else{
			ClientData temp=clients.get(index);
			return temp;
		}		
	}
	
	synchronized boolean setOnline(long id,String ip){ //mark a client online and update his ip
		int index=Collections.binarySearch(clients,new ClientData(id));
		
		if(index<0)
			return false;
		else{
			clients.get(index).updateIP(ip);
			clients.get(index).markOnline();
			onlineClient++;	
			if(onlineClientsList==null)
				onlineClientsList=new LinkedList<Long>();
			onlineClientsList.add(new Long(id));
			Collections.sort(onlineClientsList);
			return true;
		}
	}
	
	synchronized void setOffline(long id){
		int index=Collections.binarySearch(clients,new ClientData(id));
		clients.get(index).markOffline();
		int index1=Collections.binarySearch(onlineClientsList,new Long(id));
		onlineClientsList.remove(index1);
		onlineClient--;
	}
	
	synchronized void delClient(long id){   //id exits
		int index=Collections.binarySearch(clients,new ClientData(id));
		boolean online=clients.get(index).isOnline();
		clients.remove(index);
		registeredClient--;
		if(online){
			onlineClient--;
			onlineClientsList.remove(new Long(id));
		}			
	}
	
	synchronized boolean contains(long id){  //given the id,test existance
		if(findClient(id)==null)
			return false;
		else 
			return true;
	}
	
	synchronized void addClientFriends(long id,List<Long> friends){
		int index=Collections.binarySearch(clients,new ClientData(id));
		//System.out.println(id);
		clients.get(index).addFriends(friends);
	}
	
	synchronized List<Long> delClientFriends(long id,List<Long> friends){
		int index=Collections.binarySearch(clients,new ClientData(id));
		List<Long> tempList;
		tempList=clients.get(index).delFriends(friends);
		return tempList;
	}
	
	void setServerThreadNum(int size){
		serverThreadNum=size;
	}
	
	int getServerThreadNum(){
		return serverThreadNum;
	}
}

⌨️ 快捷键说明

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