Domanda

Sto scrivendo una biblioteca di messaggistica istantanea. Attualmente, quando una SocketException viene sollevata durante la lettura o la scrittura sul socket, inizio la routine di logout dall'interno dell'applicazione, passando la SocketException all'Enduser come argomento del logoutEventArgs. Ciò offre all'utente finale un modo di vedere quale eccezione sottostante ha effettivamente causato il logout non richiesto.

La mia domanda è cosa devo fare, se durante una chiamata utente alla funzione di logout, la presa effettivamente lancia un'eccezione.

Esempio: la funzione di logout chiama l'utente finale e mentre la funzione di logout è in attesa che le richieste esistenti finiscano con grazia, la presa lancia un'eccezione nel thread di lettura.

Ho due opzioni come lo vedo -

  1. Finge che l'errore non si sia verificato e agisci come la presa disconnessa come parte del nostro logout.

  2. Quando viene sollevata l'eccezione socket, vedere se si verifica una richiesta di logout e, in tal caso, prevalerla. Risultante nella richiesta di logout originale che lancia un giàloggetException, nonché un evento di logout separato che passa l'eccezione nei logoutEventArgs.

Inoltre, leggermente correlato - cosa devo fare se il server avvia un arresto che non è stato richiesto (cioè .. la chiamata di lettura restituisce null). Il server di messenger .NET ha la tendenza a farlo se si invia una richiesta non piace. Lo tratto come un'eccezione in sé?

Ho trovato l'intera disconnessione/disconnessione parte della mia biblioteca come una spina importante al mio fianco. Non riesco proprio a avvolgere la testa. Qualcuno sa di applicazioni di codice open source che gestiscono questa situazione magnificamente?

Ho cercato di affrontare questa cosa nella mia testa per così tanto tempo, mi sta facendo impazzire.

È stato utile?

Soluzione

Ho deciso di non passare la SocketException all'utente finale, poiché una disconnessione non è davvero un'eccezione e dovrebbe essere prevedibile e affrontata. Invece è presente una proprietà logouTreason sui logoUteventArgs che specifica il motivo per cui si è verificato il logout.

Ho deciso che se la disconnessione si verifica durante il logout, in realtà non è un'eccezione, poiché il logout si sarebbe comunque disconnesso. In questo caso, ignoro semplicemente l'eccezione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top