Ver Mensaje Individual
  #1 (permalink)  
Antiguo 17/07/2012, 06:41
Avatar de RsG
RsG
 
Fecha de Ingreso: febrero-2008
Mensajes: 16
Antigüedad: 16 años, 3 meses
Puntos: 0
Problema con envío de notificaciones a sockets

Estoy realizando el código de un Servidor de Noticias, en ese Servidor, he de notificar a todos aquellos que estén registrados en un canal, que ha sido introducido un nuevo mensaje en el canal en el que está inscrito.

Para ello, después de realizar una inserción de un mensaje, tengo la siguiente función de notificar.

Cita:
public void NotificacionFinal(String opcion) throws IOException{

// De la cadena opción, tomo el nombre del canal en el que escribo
String PartesOp[]=opcion.split("-");
String buzon = PartesOp[1];

// Me hago una copia del buzón
Buzon copia;
copia = dat.DevuelveBuzon(buzon);

// ME HAGO UNA COPIA DE LOS LECTORES QUE ESTÁN REGISTRADOS EN ESE CANAL
Vector<String> copialectores = null;
copialectores = dat.DevuelveLectoresBuzon(copia);

// CREO UN VECTOR CON TODOS LOS USUARIOS REGISTRADOS EN EL SERVIDOR

Vector<Usuario> copiaregistrados = null;
copiaregistrados = dat.DevuelveUsuariosRegistradosServidor();

// Este bucle comentado, busca las coincidencias, el bucle está bien y detecta el número de notificaciones que tengo que realizar
/*
enviarAlCliente("Buscamos lectores registrados");
for (int i = 0; i < copiaregistrados.size(); i++){
for ( int j = 0; j < copialectores.size(); j++){
if ( copialectores.elementAt(j).compareTo(copiaregistra dos.elementAt(i).getNick().toString()) == 0)
enviarAlCliente("Una NOTIFICACION");
}
*/

// AQUÍ VIENE EL PROBLEMA

// CON EL MISMO BUCLE DE ANTES, SIGUE ENCONTRANDO EL NÚMERO DE NOTIFICACIONES CORRECTAS, PERO ESTÁ MANDANDO A TODOS LOS USUARIOS TANTAS CADENAS DE TEXTO COMO NOTIFICACIONES TENGO QUE HACER


for (int i = 0; i < copiaregistrados.size(); i++){
for ( int j = 0; j < copialectores.size(); j++){
String n1 = null;
Socket sock = null;
if ( copialectores.elementAt(j).compareTo(copiaregistra dos.elementAt(i).getNick().toString()) == 0)
n1 = copiaregistrados.elementAt(i).getNick();
sock = copiaregistrados.elementAt(i).getSocket();
PrintWriter notificador = new PrintWriter(sock.getOutputStream(),true);
notificador.println("NUEVOS MENSAJES EN LOS BUZONES");
}
}
Es decir, los bucles, saben correctamente cuántas notificaciones tienen que realizar, el problema, es que las realiza mal.

Por ejemplo.

Tengo registrados los usuarios A,B,C,D,E y F

Y en el Canal 1 tengo registrados como lectores a A y B.

En el momento que salta esta función tras añadir un mensaje al Canal 1, detecta perfectamente que hay que realizar DOS notificaciones. El problema, es que a A le llega que hay que hacer DOS notificaciones y como a A, a todos los usuarios registrados del servidor aunque no estén apuntados a ese canal.

¿Alguna idea de donde puede estar el problema?

Lo ideal seria que al usuario A solo le llegase su notificación, a el usuario B la suya, y el resto no tuviesen ninguna noticia sobre los cambios realizados en un canal en el que no están registrados.

Gracias

Un Saludo!