using System; using System.Collections.Generic; using System.Reflection; public class vp_Message : vp_Event { public delegate void Sender(); public Sender Send; public vp_Message(string name) : base(name) { InitFields(); } protected static void Empty() { } protected override void InitFields() { m_Fields = new FieldInfo[1] { GetType().GetField("Send") }; StoreInvokerFieldNames(); m_DefaultMethods = new MethodInfo[1] { GetType().GetMethod("Empty") }; m_DelegateTypes = new Type[1] { typeof(Sender) }; Prefixes = new Dictionary { { "OnMessage_", 0 } }; Send = Empty; } public override void Register(object t, string m, int v) { Send = (Sender)Delegate.Combine(Send, (Sender)Delegate.CreateDelegate(m_DelegateTypes[v], t, m)); Refresh(); } public override void Unregister(object t) { RemoveExternalMethodFromField(t, m_Fields[0]); Refresh(); } } public class vp_Message : vp_Message { public new delegate void Sender(T value); public new Sender Send; public vp_Message(string name) : base(name) { } protected static void Empty(T value) { } protected override void InitFields() { m_Fields = new FieldInfo[1] { GetType().GetField("Send") }; StoreInvokerFieldNames(); m_DefaultMethods = new MethodInfo[1] { GetStaticGenericMethod(GetType(), "Empty", m_ArgumentType, typeof(void)) }; m_DelegateTypes = new Type[1] { typeof(Sender<>) }; Prefixes = new Dictionary { { "OnMessage_", 0 } }; Send = Empty; if (m_DefaultMethods[0] != null) { SetFieldToLocalMethod(m_Fields[0], m_DefaultMethods[0], MakeGenericType(m_DelegateTypes[0])); } } public override void Register(object t, string m, int v) { if (m != null) { AddExternalMethodToField(t, m_Fields[v], m, MakeGenericType(m_DelegateTypes[v])); Refresh(); } } public override void Unregister(object t) { RemoveExternalMethodFromField(t, m_Fields[0]); Refresh(); } } public class vp_Message : vp_Message { public new delegate TResult Sender(T value); public new Sender Send; public vp_Message(string name) : base(name) { } protected static TResult Empty(T value) { return default(TResult); } protected override void InitFields() { m_Fields = new FieldInfo[1] { GetType().GetField("Send") }; StoreInvokerFieldNames(); m_DefaultMethods = new MethodInfo[1] { GetStaticGenericMethod(GetType(), "Empty", m_ArgumentType, m_ReturnType) }; m_DelegateTypes = new Type[1] { typeof(Sender<, >) }; Prefixes = new Dictionary { { "OnMessage_", 0 } }; if (m_DefaultMethods[0] != null) { SetFieldToLocalMethod(m_Fields[0], m_DefaultMethods[0], MakeGenericType(m_DelegateTypes[0])); } } public override void Register(object t, string m, int v) { if (m != null) { AddExternalMethodToField(t, m_Fields[0], m, MakeGenericType(m_DelegateTypes[0])); Refresh(); } } public override void Unregister(object t) { RemoveExternalMethodFromField(t, m_Fields[0]); Refresh(); } }