📄 friendsdatabase.java
字号:
//class to store friends' info
import java.util.*;
import java.io.*;
class FriendsData implements Serializable , Comparable<FriendsData>{
private String name;
private long id;
private String ip;
/*public FriendsData(String name,long id){
this.name=name;
this.id=id;
}*/
public FriendsData(long id){ //constructor used when Collections.binarySerach() needed
this.id=id;
}
public FriendsData(String name,long id,String ip){
this.name=name;
this.id=id;
this.ip=ip;
}
public int compareTo(FriendsData fd){
boolean b=(id==fd.getID());
return (b==true ? 0 : id>fd.getID() ? 1 : -1);
}
void updateIP(String ip){
this.ip=ip;
}
String getIP(){
return ip;
}
String getName(){
return name;
}
long getID(){
return id;
}
void setName(String name){
this.name=name;
}
public String toString(){
return "ID: "+id+", Name: "+name;
}
}
//one client has a FriendsDatabase
public class FriendsDatabase implements Serializable{
private List<FriendsData> friendsList;
//private List<FriendsData> onlineFriendsList=null;
//private long key; //this key is associated with client's id; a client has a unique key
public FriendsDatabase(){
friendsList=new LinkedList<FriendsData>();
synchronized (friendsList){};
//onlineFriendsList=new LinkedList<FriendsData>();
}
/*public FriendsDatabase(long key){
this();
this.key=key;
}
public void setKey(long key){
this.key=key;
}
public long getKey(){
return key;
}*/
synchronized void removeAllFriends(){ //called when the server has quited,to clear the database
friendsList.removeAll(friendsList);
}
synchronized boolean contains(long id){
if(findFriend(id)==null)
return false;
return true;
}
synchronized boolean haveFriends(){ //if has any friend
return !(friendsList.size()==0);
}
synchronized void addFriend(FriendsData fd){ //called from ClientControlThread
friendsList.add(fd);
}
synchronized void delFriend(long friendID){ //called from ClientControlThread
int index=Collections.binarySearch(friendsList,new FriendsData(friendID));
if(index<0){
//System.out.println("ID :"+friendID+" isn't your friends!");
return;
}
friendsList.remove(index);
}
synchronized void viewAllFriends(){ //called from ClientControlThread
if(friendsList.size()==0)
System.out.println("Have no friends!");
ListIterator iterator=friendsList.listIterator();
for(;iterator.hasNext();)
System.out.print("\n"+iterator.next());
}
/*void viewOnlineFriends(){ //called from ClientControlThread
if(onlineFriendsList.size()==0) {
System.out.println("No friends online!");
return;
}
ListIterator iterator=onlineFriendsList.listIterator();
for(;iterator.hasNext();)
System.out.println("\n"+iterator.next());
}*/
synchronized void sortFriendsList(){ //called from ClientControlThread
if(friendsList==null)
return;
Collections.sort(friendsList);
}
/*FriendsData findOnlineFriend(long id){
int index=Collections.binarySearch(onlineFriendsList,new FriendsData(id));
if(index<0)
return null;
else
return onlineFriendsList.get(index);
}
synchronized void addOnlineFriend(FriendsData fd){ //called from ClientThread
if(onlineFriendsList==null)
onlineFriendsList=new LinkedList<FriendsData>();
onlineFriendsList.add(fd);
}
synchronized void sortOnlineFriendsList(){ //called from ClientThread
if(onlineFriendsList==null)
return;
Collections.sort(onlineFriendsList);
}*/
synchronized FriendsData findFriend(long id){ //called from ClientThread
int index=Collections.binarySearch(friendsList,new FriendsData(id));
if(index<0)
return null;
else
return friendsList.get(index);
}
//called from ClientThread
synchronized void friendQuit(long friendID){ //del this id from onlineFriendsList
System.out.println("Friend,ID:"+friendID+", Name :"+findFriend(friendID).getName()+" has quited.");
delFriend(friendID);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -