// Ajetaan omassa säikeessään public void ServeClient() { // Avataan yhteydet // Avataan streamit SocketUtilities.SocketUtilityClass su = new SocketUtilities.SocketUtilityClass(client); su.Open(); bool jatka = true; while (jatka) { // Viimeisimmän komennon vastaanottamisen ajankohta: DateTime timeLastCommandReceived = DateTime.Now; // Tarkistetaan, onko dataa syötettäväksi if (su.DataAvailable()) { // Luetaan ja käsitellään komennot string command = su.ReadMessage(); string answer = ""; switch (command) { case SocketUtilities.Commands.TIME: answer = DateTime.Now.ToString(); break; case SocketUtilities.Commands.NUMBER_OF_CLIENTS: answer = "1"; // 1000 break; case SocketUtilities.Commands.QUIT: answer = "lopetus"; jatka = false; break; } su.WriteMessage(answer); Console.WriteLine(answer); } else // if (su.DataAvailable()) { // Lopetetaan, jos viimeisestä komennosta on kulunut yli minuutti: DateTime timeNow = DateTime.Now; TimeSpan erotus = timeNow - timeLastCommandReceived; if (erotus.TotalSeconds > 60) { jatka = false; } else { Thread.Sleep(500); } } } // Suljetaan yhteydet su.Close(); }
// ajetaan omassa säikeessään public void ServeClient() { // avataan yhteydet // avataan streamit SocketUtilities.SocketUtilityClass su = new SocketUtilities.SocketUtilityClass(client); su.Open(); bool jatka = true; // luetaan ja käsitellään komennot while (jatka) { DateTime viimeinenKomento = DateTime.Now; if (su.DataAvailable()) { string komento = su.ReadMessage(); string vastaus = ""; // päivitetään aika switch (komento) { case SocketUtilities.Commands.TIME: vastaus = DateTime.Now.ToString(); break; case SocketUtilities.Commands.NUMBER_OF_CLIENTS: vastaus = "1"; // TODO break; case SocketUtilities.Commands.QUIT: vastaus = "lopetus"; break; } su.WriteMessage(vastaus); Console.WriteLine(vastaus); } else { // lopetetaan jos viimeisestä komennosta on kulunut yli min DateTime nyt = DateTime.Now; TimeSpan erotus = nyt - viimeinenKomento; if (erotus.TotalSeconds > 60) { jatka = false; } else { Thread.Sleep(500); } } } // suljetaan yhteydet su.Close(); }