Pergunta

Estou escrevendo uma biblioteca de mensagens instantâneas. Atualmente, quando uma demora é aumentada ao ler ou escrever no soquete, inicio a rotina de logout de dentro do aplicativo, passando a demora para o EndUser como um argumento do logoutEventargs. Isso dá ao usuário final uma maneira de ver o que a exceção subjacente realmente causou o logout não solicitado.

Minha pergunta, é o que devo fazer, se durante uma chamada de usuário para a função de logout, o soquete realmente lança uma exceção.

Exemplo - o usuário final chama a função de logout e, embora a função de logout esteja aguardando as solicitações existentes terminarem graciosamente, o soquete lança uma exceção no thread de leitura.

Eu tenho duas opções como vejo -

  1. Finja o erro não ocorreu e apenas age como o soquete desconectado como parte do nosso logout.

  2. Quando a exceção do soquete for aumentada, veja se uma solicitação de logout está ocorrendo e, se assim for, substitua -a. Resultando na solicitação de logout original lançando uma exceção jáloggedoutOutException, bem como em um evento de logout separado que passa a exceção no LogouTEventArgs.

Além disso, ligeiramente relacionado - o que devo fazer se o servidor iniciar um desligamento que não foi solicitado (ou seja, a chamada de leitura retorna nulo) .. o servidor .NET Messenger tem uma tendência a fazer isso se você enviar uma solicitação não gosta. Eu trato isso como uma exceção em si?

Eu achei que toda a parte de desconexão/login parte da minha biblioteca é um grande espinho no meu lado. Eu simplesmente não consigo entender minha cabeça. Alguém conhece algum aplicativo de código de código aberto que lida com essa situação lindamente?

Eu tenho tentado enfrentar essa coisa na minha cabeça há tanto tempo, está me deixando louco.

Foi útil?

Solução

Decidi não passar a demora para o usuário final, pois uma desconexão não é realmente uma exceção e deve ser esperada e tratada. Em vez disso, existe uma propriedade LogouTeason nos LogouteVentArgs que especifica por que o logout ocorreu.

Decidi que, se a desconexão ocorrer durante o logout, isso não é realmente uma exceção, pois o logout se desconectaria de qualquer maneira. Eu simplesmente desconsidero a exceção neste caso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top