//
// Copyright (c) 2002
// Ronald Kevin Burton
//
// Z poniższym kodem nie jest związana żadna gwarancja poprawności działania.
// Program został dołączony do książki ".NET CLR. Księga eksperta" w celu
// ilustracji koncepcji i zasad przedstawionych w tej książce. Program może być 
// używany na własne ryzyko.
//
// Przyznaje się prawo do użycia lub kopiowania tego oprogramowania do dowolnego celu
// bez konieczności ponoszenia żadnych opłat pod warunkiem, że powyższe uwagi zostaną 
// zachowane we wszystkich kopiach. Przyznaje się także prawo do modyfikacji kodu
// i dystrybucji zmodyfikowanego kodu pod warunkiem zachowania powyższych uwag
// oraz dołączenia informacji mówiącej o modyfikacji kodu.
//
// 
using System;
using System.Text;
using System.Net;
using System.Net.Sockets;

class Listener
{
	public static void Main()
	{
		Console.WriteLine("Gotowy do przetwarzania żądań...");
		ProcessRequests();	
	}

	public static void ProcessRequests()
	{
		TcpListener client = new TcpListener(5000);
		client.Start();
		// Socket s = client.AcceptSocket();
		TcpClient s = client.AcceptTcpClient();

		byte[] responseData = new byte[128];
		bool continueProcessing = true;

		NetworkStream stream = s.GetStream();
		string message;
		int bytesRead;

		while(continueProcessing)
		{	
			try
			{
				bytesRead = stream.Read(responseData, 0, responseData.Length);
				if(bytesRead == 0)
				{
					// Klient rozłączył się
					continueProcessing = false;
					break;
				}
				else
				{
					message = Encoding.Unicode.GetString(responseData, 0, bytesRead);

					if(message == "quit")
					{
						continueProcessing = false;
						break;
					}
					else
					{
						Console.WriteLine("Otrzymana wiadomość to " + message);
					}
				}
			}
			catch(Exception ex)
			{
				Console.WriteLine(ex.ToString());
			}
		}

		client.Stop();
	}
}
