//
// 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.Threading;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;

namespace RemotingSamples
{
	public class Client
	{
		public static int Main(string [] args)
		{
			try
			{
				TcpChannel chan = new TcpChannel();
				ChannelServices.RegisterChannel(chan);
				HelloServer obj = (HelloServer)Activator.GetObject(typeof(RemotingSamples.HelloServer),
					"tcp://localhost:8085/SayHello");
				while(true)
				{
					Console.WriteLine(obj.HelloMethod("Klient mówi: witaj."));
					Thread.Sleep(500);
				}
			}
			catch(Exception e)
			{
				System.Console.WriteLine("Nie można odnaleźć serwera");
				Console.WriteLine(e);
			} 
			return 0;
		}
	}
}

// Wyjątek zgłaszany jeśli nie można uruchomić serwera:
// Unhandled Exception: System.Net.Sockets.SocketException: No connection could be
// made because the target machine actively refused it
//
//ServerStackTrace:
//   at System.Net.Sockets.Socket.Connect(EndPoint remoteEP)
//   at System.Runtime.Remoting.Channels.RemoteConnection.CreateNewSocket()
//   at System.Runtime.Remoting.Channels.RemoteConnection.GetSocket()
//   at System.Runtime.Remoting.Channels.SocketCache.GetSocket(String machineAndPort)
//   at System.Runtime.Remoting.Channels.Tcp.TcpClientTransportSink.SendRequestWithRetry(IMessage msg, ITransportHeaders requestHeaders, Stream requestStream)
//   at System.Runtime.Remoting.Channels.Tcp.TcpClientTransportSink.ProcessMessage(IMessage msg, ITransportHeaders requestHeaders, Stream requestStream, ITransportHeaders& responseHeaders, Stream& responseStream)
//   at System.Runtime.Remoting.Channels.BinaryClientFormatterSink.SyncProcessMessage(IMessage msg)
//
//Exception rethrown at [0]:
//   at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
//   at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
//   at RemotingSamples.HelloServer.HelloMethod(String name) in C:\Program Files\Microsoft.NET\FrameworkSDK\Samples\quickstart\howto\samples\remoting\hello\cs\object.cs:line 14
//   at RemotingSamples.Client.Main(String[] args) in C:\Program Files\Microsoft.NET\FrameworkSDK\Samples\quickstart\howto\samples\remoting\hello\cs\client.cs:line 15