import java.io.IOException;
import java.io.PrintStream;
import java.util.Enumeration;
import java.util.Vector;
/*
*
* @author zhang
*
* 广播类,封装了信息转发和userList管理的方法
*/
public class Broadcast
{
private Vector userList = null;
private final int MAX_SIZE=200;
private final int MIN_LEN=20;
private static Broadcast broadcast=null;
public Broadcast()
{
userList = new Vector(MIN_LEN);
}
public static Broadcast getInstence(){
if(broadcast==null) return new Broadcast();
return broadcast;
}
public synchronized boolean addUser(Angent angent)
{
if(this.userList.size()==200) return false;
for(Enumeration enumeration = userList.elements(); enumeration.hasMoreElements();)
if(((Angent)enumeration.nextElement()).getUserId().compareTo(angent.getUserId()) == 0)
return false;//如果有相同的用户名
//第一次登录:
userList.addElement(angent);
return true;
}
public synchronized void broadcast(String s)
{sendOther(s,null);}
public synchronized int getUserNumber()
{
return userList.size();
}
public synchronized void removeUser(Angent angent)
{ //删除用户
userList.removeElement(angent);
}
public synchronized void sendTo(String s, String toUser)
{
for(Enumeration enumeration = userList.elements(); enumeration.hasMoreElements();)
{ //angent是目标代理
Angent angent = (Angent)enumeration.nextElement();
if(angent.getUserId().equals(toUser))
{
angent.getOut().println(s);
break;
}
}
}
public synchronized void sendOther(String s,Angent angent)
{
for(Enumeration enumeration = userList.elements(); enumeration.hasMoreElements();)
{
Angent angent1 = (Angent)enumeration.nextElement();
if((!angent.getUserId().equals(angent.getUserId())))
{ //保证不发送给本人,节省了带宽
angent.getOut().println(s);
}
}
}
}