Swapper.NET Logo

Source Code Interfaces ~ IMessage.cs


using System;
using RevolutionaryStuff.JBT;

namespace RevolutionaryStuff.P2P.Basics
{
	public interface IMessage : IFieldApplicator
	{
		string ProtocolName { get; }
		string MessageName { get; }
		byte[] Header { get; }
		byte[] Payload { get; }
		string HeaderToString();
		string PayloadToString();
	}

	public interface IMessageProvider
	{
		string[] ProtocolDotMessageNames { get; }
		event MessageEventHandler MessageOccurred;
	}

	public class MessageEventArgs : EventArgs
	{
		public readonly DateTime When;
		public readonly IMessage Message;
		public readonly bool Incoming;
		public IConnection[] Connections;

		#region Constructors
		public MessageEventArgs(IMessage message, bool incoming, IConnection[] connections) : this(message, incoming, connections, DateTime.Now)
		{}
		public MessageEventArgs(IMessage message, bool incoming, IConnection[] connections, DateTime when)
		{
			if (message==null) throw new ArgumentNullException("message");
			if (connections==null) throw new ArgumentNullException("connections");
			if (connections.Length==0) throw new ArgumentException("connections.Length must be > 0");
			this.Message = message;
			this.Incoming = incoming;
			this.Connections = connections;
			this.When = when;
		}
		#endregion
	}

	public delegate void MessageEventHandler(object sender, MessageEventArgs e);

	public interface IMessageGun
	{
		void FireMessageOccurred(IConnection[] connections, IMessage message, bool incoming);
	}
}