using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace BCMToolbox { [Serializable] public abstract class LocalMessage { public readonly string MessageType = null; protected LocalMessage(string newType) { MessageType = newType; } public override string ToString() { return MessageType; } } public class LocalMessageEventArgs : EventArgs { LocalMessage __message = null; public LocalMessageEventArgs(LocalMessage newMessage) { __message = newMessage; } public LocalMessage Message { get { return __message; } } } public class LocalPipe { Dictionary __messageCount = new Dictionary(); object __syncRoot = new object(); public object SyncRoot { get { return __syncRoot; } } public void ResetPipe() { __messageCount.Clear(); } public int this[string MessageType] { get { if (!__messageCount.ContainsKey(MessageType)) return 0; return __messageCount[MessageType]; } } public bool SendMessage(LocalMessage theMessage) { lock (__syncRoot) { if (!__messageCount.ContainsKey(theMessage.MessageType)) __messageCount.Add(theMessage.MessageType, 0); int count = __messageCount[theMessage.MessageType]; count++; __messageCount[theMessage.MessageType] = count; } if (this.MessageReceive != null) { this.MessageReceive(this, new LocalMessageEventArgs(theMessage)); return true; } else return false; } public event EventHandler MessageReceive; } }