/// <summary> /// Registers SMSG Opcodes /// </summary> /// <param name="obj"></param> void RegisterHandler(object obj) { BindingFlags flags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance; IEnumerable <PacketHandlerAttribute> attributes; foreach (var method in obj.GetType().GetMethods(flags)) { if (!method.TryGetAttributes(false, out attributes)) { continue; } PacketHandler handler = (PacketHandler)PacketHandler.CreateDelegate(typeof(PacketHandler), obj, method); foreach (var attribute in attributes) { PacketHandlers[attribute.Opcode] = handler; } } }
void RegisterHandlersFrom(object obj) { // create binding flags to discover all non-static methods BindingFlags flags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance; IEnumerable <PacketHandlerAttribute> attributes; foreach (var method in obj.GetType().GetMethods(flags)) { if (!method.TryGetAttributes(false, out attributes)) { continue; } PacketHandler handler = (PacketHandler)PacketHandler.CreateDelegate(typeof(PacketHandler), obj, method); foreach (var attribute in attributes) { Game.UI.LogDebug(string.Format("Registered '{0}.{1}' to '{2}'", obj.GetType().Name, method.Name, attribute.Command)); PacketHandlers[attribute.Command] = handler; } } }