using System;
using System.Runtime.Remoting;
using System.Collections;

[Serializable]
public class SubmitEventArgs : EventArgs
{
    private string _string = null;
    private string _alias = null;
    
    public SubmitEventArgs(string contribution, string contributor)
    {
        this._string = contribution;
        this._alias = contributor;
    }
    
    public string Contribution
    {
        get
        {
            return _string;
        }
    }
    
    public string Contributor
    {
        get
        {
            return _alias;
        }
    }
}

public delegate void SubmissionEventHandler(object sender, SubmitEventArgs submitArgs);

public class ChatCoordinator : MarshalByRefObject
{
    public ChatCoordinator()
    {
        Console.WriteLine("ChatCoordinator created.  Instance: "+
            this.GetHashCode().ToString());
    }
    
    public override object InitializeLifetimeService()
    {
        return null;
    }
    
    public event SubmissionEventHandler Submission;
    
    public void Submit(string contribution, string contributor)
    {
        Console.WriteLine("{0} sent: {1}.",contributor, contribution);
        SubmitEventArgs e = new SubmitEventArgs(contribution, contributor);
        
        if(Submission != null)
        {
            Console.WriteLine("Broadcasting...");
            Submission(this, e);
        }
    }
}