📄 serverdatabase.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 + -