Para ello, después de realizar una inserción de un mensaje, tengo la siguiente función de notificar.
Cita:
Es decir, los bucles, saben correctamente cuántas notificaciones tienen que realizar, el problema, es que las realiza mal.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");
}
}
// 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");
}
}
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!