using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Http;

public class ChatClient : MarshalByRefObject
{
    private string username = null;
    public override object InitializeLifetimeService()
    {
        return null;
    }
    public ChatClient(string alias)
    {
        this.username = alias;
    }
    public void Run()
    {
        RemotingConfiguration.Configure("Client.config");
        ChatCoordinator chatcenter = new ChatCoordinator();
        chatcenter.Submission += new 
            SubmissionEventHandler(this.SubmissionReceiver);
        String keyState = "";
        while (true)
        {
            Console.WriteLine("Press 0 (zero) and ENTER to Exit:\n\r");
            keyState = Console.ReadLine();
            if(String.Compare(keyState,"0",true)==0)
                break;
            chatcenter.Submit(keyState, username);
        }
        chatcenter.Submission -= new SubmissionEventHandler(this.SubmissionReceiver);
    }
    
    public void SubmissionReceiver(object sender, SubmitEventArgs args)
    {
        if(String.Compare(args.Contributor,username,true)==0)
        {
            Console.WriteLine("Your message was broadcast.");   
        }
        else
        {
            Console.WriteLine(args.Contributor
                + "says: " + args.Contribution);
        }
    }
    
    public static void Main(string[] Args)
    {
        if(Args.Length != 1)
        {
            Console.WriteLine("You need to type an alias.");
            return;
        }
        ChatClient client = new ChatClient(Args[0]);
        client.Run();
    }
}