Avevo pensato di utilizzare un thread che controlla se l'utente non scrive messaggi da più di 60 secondi e se questa condizione è verificata, l'utente viene disconnesso e la classe dell'utente viene eliminata con il garbage collection ...
con questo codice:
codice:
internal void ThreadedCheckEachPacketTiming()
{
double TimeToAdd = 60;
while (true)
{
Console.WriteLine("Ricerca utenti inattivi");
System.Threading.Thread.Sleep(60000);
System.Collections.Hashtable TmpHashtable = (System.Collections.Hashtable)SocketManager.activeSockets.Clone();
System.Collections.IEnumerator myEnum = TmpHashtable.GetEnumerator();
while (myEnum.MoveNext())
{
System.Collections.DictionaryEntry de = (System.Collections.DictionaryEntry)myEnum.Current;
Client user = (Client)de.Value;
DateTime dtWhenItRunsOut = user._TimeLastPacket.AddSeconds(TimeToAdd);
if (DateTime.Now.CompareTo(dtWhenItRunsOut) == 1) // Timed out!
{
Console.WriteLine("User on socket ID '" + user._MySocketID + "' timed out");
try
{
user.DropConnection();
}
catch { }
}
}
TmpHashtable = null;
GC.Collect();
}
}
Ma non mi funziona
La classe non viene eliminata
La funzione:
codice:
~Client()
{
Log.Write("Woo Class Destroyed! :)");
}
Non viene eseguita quindi credo che la classe non venga eliminata
E cosa più importante non viene liberata memoria