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);
}
}
|