package Microsoft.Samples;
//-----------------------------------------------------------------------
//  This file is part of the Microsoft .NET Framework SDK Code Samples.
// 
//  Copyright (C) Microsoft Corporation.  All rights reserved.
// 
// This source code is intended only as a supplement to Microsoft
// Development Tools and/or on-line documentation.  See these other
// materials for detailed information regarding Microsoft code samples.
// 
// THIS CODE AND INFORMATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY
// KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
// PARTICULAR PURPOSE.
//-----------------------------------------------------------------------
import System.*;
import System.Threading.*;
import System.Runtime.Remoting.*;
import System.Runtime.Remoting.Messaging.*;
import System.Runtime.Remoting.Channels.*;
import System.Runtime.Remoting.Channels.Tcp.*;

public class Client
{
    public static ManualResetEvent e;

    /** @delegate 
     */
    public delegate String MyDelegate(String name);

    public static void main(String[] args)
    {
        e = new ManualResetEvent(false);
        TcpChannel chan = new TcpChannel();
        ChannelServices.RegisterChannel(chan, true);
        HelloServer obj = (HelloServer)(Activator.GetObject(HelloServer.
            class.ToType(), "tcp://localhost:8085/SayHello"));
        if (obj == null) {
            System.Console.WriteLine("Could not locate server");
        }
        else {
            AsyncCallback cb = new AsyncCallback(Client.MyCallBack);
            MyDelegate d = new MyDelegate(obj.HelloMethod);
            d.BeginInvoke("Caveman", cb, null);
        }
        e.WaitOne();
	Console.ReadLine();
    } //main

    public static void MyCallBack(IAsyncResult ar)
    {
        MyDelegate d = (MyDelegate)((AsyncResult)ar).get_AsyncDelegate();        
        Console.WriteLine(d.EndInvoke(ar));
        e.Set();
    } //MyCallBack
} //Client