//
// 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.IO;
using System.Net;
using System.Net.Sockets;
using System.Reflection;

class Sender
{

	public static void Main(string[] args)
	{	
		string address = "localhost";
		if(args.Length == 1)
			address = args[0];

		SendMessage(address);
	}

	public static void SendMessage(string server)
	{
		TcpClient client = new TcpClient();
		client.Connect(server, 5000);
		NetworkStream stream = client.GetStream();

		bool continueSending = true;
		while(continueSending)
		{		
			Console.WriteLine("Wprowadź wiadomość do wysłania. Wpisz 'quit', aby przerwać.");
			string message = Console.ReadLine();
			// byte[] buffer = Encoding.ASCII.GetBytes(message);
			byte[] buffer = Encoding.Unicode.GetBytes(message);
			stream.Write(buffer, 0, buffer.Length);
			if(message == "quit")
			{
				continueSending = false;
			}	
		}
				
		client.Close();

		// Od: Buksbaum, David [SMTP:david.buksbaum@CSFB.COM]  
		PropertyInfo pi = typeof(TcpClient).GetProperty("Client", 
			BindingFlags.Instance|BindingFlags.NonPublic);
		// mSock to obiekt TcpClient.
		Socket so = (Socket)pi.GetValue(client, null); 
		if((so != null) && (so.Connected)) 
			so.Shutdown(SocketShutdown.Both);

	}
}
