import java.util.HashMap; import java.util.Iterator; import java.util.Map; public class ChatRoomImpl extends ChatRoomSkel { private String _name; private Map _users; //key: nome do usuario, value: ChatUser object public ChatRoomImpl() { super(); _users = new HashMap(); } public ChatRoomImpl(String name, String key) { super(key); _name = name; _users = new HashMap(); } public ChatRoomImpl(String name) { super(); _name = name; _users = new HashMap(); } @Override public String getName() { echo("name: "+ _name); return _name; } @Override public Map getUsers() { echo("getUsers"); return _users; } protected void register(String name, ChatUser user) { _users.put(name, user); } @Override public boolean join(String name, ChatUser user) { if (_users.containsKey(name) ) { echo("usuario ["+name+"] ja existe na sala!"); return false; }else{ echo("join -> "+name); echo("chatuser -> "+user.objectReference().stringify()); _users.put(name, user); //notify dos demais usuarios Iterator iterator = _users.keySet().iterator(); while (iterator.hasNext()) { String key = (String) iterator.next(); ChatUser chatuser = (ChatUser) _users.get(key); echo("Notificando o usuario "+chatuser.getUsername()+" -> "+name); chatuser.notifyJoin(name, user); } return true; } } @Override public boolean leave(String name) { // TODO Auto-generated method stub if (_users.containsKey(name)){ echo("leave -> "+name); Iterator iterator = _users.keySet().iterator(); while (iterator.hasNext()) { String key = (String) iterator.next(); ChatUser chatuser = (ChatUser) _users.get(key); chatuser.notifyLeave(name); } _users.remove(name); return true; }else{ echo("usuario "+name+" nao encontrado na sala e por isso nao sera removido!!"); return false; } } @Override public void send(String name, String message) { echo("sent from ["+name+"] msg: "+message); Iterator iterator = _users.keySet().iterator(); while (iterator.hasNext()) { String key = (String) iterator.next(); ChatUser chatuser = (ChatUser) _users.get(key); chatuser.notifyMessage(name, message); } } public Map filhos() { return _users; } }