martes, noviembre 28, 2006

Uso de Hashtable en J2ME - Hashtable management using J2ME

(versión sin depurar)

Ejemplo del manejo (inserción y eliminación de elementos usando un string como key) de un Hashtable en J2ME sobre la lógica de un chat donde los usuarios y las salas de chat se almacenan por separado, enlazándose mediante referencias.


/*
* LogicaChat.java
*
* Created on 28 de noviembre de 2006, 19:00
*
* Pedro Luis Mateo || pedrolmn@gmail.com
*/

package hello;
import java.util.*;

////////////////////////////////////////////////////////////////////////////////
public class LogicaChat {

/** Creates a new instance of LogicaChat */
public LogicaChat() {
}

//variables en las que se basa la logica del chat
/*private*/ Hashtable chatrooms = new Hashtable();
/*private*/ Hashtable users = new Hashtable();

//metodos
public void newChatRoom(ChatRoom cr){
chatrooms.put(cr.name,cr);
}

public void delChatRoom(ChatRoom cr){
//primero elimino todos sus usuarios
cr.users.resetIterator();
while (cr.users.hasNext()){
//disminuyo la rpesencia de un usuario en salas
((User)cr.users.next()).exitRoom();
//si ya no se encuentra en ninguna sala, elimino
if (!((User)cr.users.next()).isInRooms()){
users.remove(((User)cr.users.next()).nick);
}
}
//por ultimo elimino el chatroom
chatrooms.remove(cr.name);
}

public void newUser(User u){
users.put(u.nick,u);
}

public void delUser(User u){
//eliminamos si no esta presente en ningun chatroom
if (!u.isInRooms()) users.remove(u.nick);
}

public void addUserChat(String nu, String ncr){
try{
User u = (User)users.get(nu);
ChatRoom cr = (ChatRoom)chatrooms.get(ncr);
cr.addUser(u);
}catch(Exception e){}
}

public void delUserChat(String nu, String ncr){
try{
User u = (User)users.get(nu);
ChatRoom cr = (ChatRoom)chatrooms.get(ncr);
//comprobaremos que ese usuario pertenece a ese chatroom
if (cr.users.exists(u)){
//disminuimos la presencia
u.exitRoom();
//eliminamos el enlace desde el chatroom
cr.removeUser(u);
//si el usuario ya no se encuentra en ninguna sala lo eliminamos
if (!u.isInRooms()){
users.remove(u);
}
}
}catch(Exception e){}
}

public User existsUser(String nick){
return (User)users.get(nick);//puede devolver null
}
}


No hay comentarios: