Método finalize() o parecido

Iniciado por Debci, 19 Septiembre 2009, 11:07 AM

0 Miembros y 1 Visitante están viendo este tema.

Debci

Hola amigos, se me presenta un nuevo problema, estoy desarrollando una sala de chat y de momento todo ha salido bien pero para dinamizar la lista de usuarios conectados que hay, cuando un cliente cierra el usuario de eset cliente sigue en la lista entonces lo que quiero hacer que al finalizar el programa este envie por socket algun dato y el servidor lo quite de la lista.
Leí por ahi que se puede hacer con finalize() pero al declararlo y meterle alguna función para probar, al finalizar mi programa no ocurre la funcion que esta dentro de finalize (en mi caso para probar un System.out.println("Programa finalizado");)
En consola no imprime tal mensaje al finalizar mi programa.

Saludos

-Ramc-

Si tu programa es gráfico, podrías hacer lo que vas a hacer cuando se cierre la ventana y antes de cancelar su ejecución.

El método finalize() se llama cuando se va a eliminar un objeto, no se como usas tú finalize, pero, para que sea llamado debes primero eliminar cualquier referencia de tu objeto, así será marcado como eliminable, después cuando pase el recolector de basura se lo llevará y si quieres que sea al momento debes llamar explicitamente al recolector de basura, pero, eso no es muy eficiente, normalmente no tendrías que llamar a finalize, hay otras formas, si un usuario se desconecta, el servidor también se da cuenta de que ya no tiene ese hilo con una conexión y al eliminar el hilo también podrías, hay varias maneras.

Saludos.

Shhh... be vewy, vewy, quiet!  I'm hunting wabbits...
LA PANDILLA MAS GRANDE DE MI CIUDAD, SE LLAMA POLICIA NACIONAL.

Debci

Cita de: -Ramc- en 19 Septiembre 2009, 17:53 PM
Si tu programa es gráfico, podrías hacer lo que vas a hacer cuando se cierre la ventana y antes de cancelar su ejecución.

El método finalize() se llama cuando se va a eliminar un objeto, no se como usas tú finalize, pero, para que sea llamado debes primero eliminar cualquier referencia de tu objeto, así será marcado como eliminable, después cuando pase el recolector de basura se lo llevará y si quieres que sea al momento debes llamar explicitamente al recolector de basura, pero, eso no es muy eficiente, normalmente no tendrías que llamar a finalize, hay otras formas, si un usuario se desconecta, el servidor también se da cuenta de que ya no tiene ese hilo con una conexión y al eliminar el hilo también podrías, hay varias maneras.

Saludos.
ya se que hay varias maneras pero .... alguna en concreto xD?

Saludos

-Ramc-

Como te dije, cuando ya no tengas respuesta del cliente es cuando cierras el socket y eliminas el hilo, ese es un buen momento para actualizar la lista.

Saludos.

Shhh... be vewy, vewy, quiet!  I'm hunting wabbits...
LA PANDILLA MAS GRANDE DE MI CIUDAD, SE LLAMA POLICIA NACIONAL.

Debci

Cita de: -Ramc- en 19 Septiembre 2009, 18:33 PM
Como te dije, cuando ya no tengas respuesta del cliente es cuando cierras el socket y eliminas el hilo, ese es un buen momento para actualizar la lista.

Saludos.
Haber si he comrpendido, puedo abrir un thread que este enviando todo el tiempo datos y al que no responda de los que el servidor tiene en su lista lo elimina?
Seria ese el algoritmo básico?

Saludos

-Ramc-

O sea, eso es lo que haces ¿no?

Porque sino ¿cómo manejas varios usuarios conectados?

Shhh... be vewy, vewy, quiet!  I'm hunting wabbits...
LA PANDILLA MAS GRANDE DE MI CIUDAD, SE LLAMA POLICIA NACIONAL.

Debci

Cita de: -Ramc- en 19 Septiembre 2009, 22:40 PM
O sea, eso es lo que haces ¿no?

Porque sino ¿cómo manejas varios usuarios conectados?
Mi problema ha sido de interpretación xD tuve de dado por hecho que el manejo , era imprescindible que los clientes fuesen avisando de lo que ivan a hacer, ahora ya lo veo claro.

Saludos

quatreduros

Me gustaría saber como has completado tu codigo fuente.
La base que sería declarar un nuevo hilo "threat" aparte de los que tengan cada cliente??¿?
¿Y ese threat como almacenara los nombres de todos lo clientes?

Debci

Cita de: quatreduros en 13 Octubre 2009, 23:01 PM
Me gustaría saber como has completado tu codigo fuente.
La base que sería declarar un nuevo hilo "threat" aparte de los que tengan cada cliente??¿?
¿Y ese threat como almacenara los nombres de todos lo clientes?

Mediante un array activo y dinamico que recibe datos y ofrece lectura de estos continuamente, en caso de que se desconecte, se borra el cliente guardado.
En contre lo que buscaba con un evento de window closing (leer el api lo saca todo xD)

Saludos