Pregunta

Estoy escribiendo una biblioteca de mensajería instantánea. Actualmente, cuando se plantea una SocketException mientras lee o escribo en el socket, comienzo la rutina de cierre de sesión desde el interior de la aplicación, pasando la SocketException al Enduser como un argumento de lo LoguteVentargs. Esto le da al usuario final una forma de ver qué excepción subyacente realmente causó el cierre de cierre de sesión sin remontación.

Mi pregunta es lo que debo hacer si durante una llamada de usuario a la función de cierre de sesión, el socket en realidad lanza una excepción.

Ejemplo: el usuario final llama la función de inicio de sesión, y mientras la función de inicio de sesión está esperando que las solicitudes existentes terminen con gracia, el socket lanza una excepción en el hilo de lectura.

Tengo dos opciones como lo veo -

  1. Finge que el error no ocurriera, y simplemente actúe como el enchufe desconectado como parte de nuestro cierre de sesión.

  2. Cuando se plantee la excepción del socket, vea si se está realizando una solicitud de cierre de sesión y, de ser así, anularla. Dando como resultado la solicitud de cierre de sesión original que lanza una AnylogGelgedOutException, así como un evento de cierre de sesión separado que pasa la excepción en LoguteeVentargs.

Además, ligeramente relacionado: ¿qué debo hacer si el servidor inicia un cierre que no se solicitó (es decir ... la llamada de lectura devuelve nulo)? no le gusta. ¿Trato esto como una excepción en sí misma?

He descubierto que toda la desconexión/sesión de la sesión de mi biblioteca es una gran espina en mi lado. Parece que no puedo entenderlo. ¿Alguien sabe de alguna aplicación de código de código abierto que maneje esta situación maravillosamente?

He estado tratando de abordar esto en mi cabeza durante tanto tiempo, me está volviendo loco.

¿Fue útil?

Solución

Decidí no pasar la SocketException al usuario final, ya que una desconexión no es realmente una excepción y debe esperarse y tratarse. En su lugar, hay una propiedad de logotra temporada en los loguteVentargs que especifica por qué ocurrió el cierre de sesión.

Decidí que si la desconexión ocurre durante el cierre de sesión, entonces eso no es realmente una excepción, ya que el cierre de sesión iba a desconectar de todos modos. Simplemente ignoro la excepción en este caso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top