using System; using System.Collections.Generic; using System.Dynamic; namespace Framework.Shared.Abstraction { public static class EventHelper { public static Action CreateHandler(Action handler) where T1 : Packet, new() { return (obj1) => { handler.Invoke(ConvertToPacket(obj1)); }; } public static Action> CreateHandlerList(Action> handler) where T1 : Packet, new() { return (obj1) => { handler.Invoke(ConvertToPacketList(obj1)); }; } public static Action CreateHandler(Action handler) where T2 : Packet, new() { return (obj1, obj2) => { handler.Invoke(obj1, ConvertToPacket(obj2)); }; } public static Action> CreateHandlerList(Action> handler) where T2 : Packet, new() { return (obj1, obj2) => { handler.Invoke(obj1, ConvertToPacketList(obj2)); }; } private static T ConvertToPacket(ExpandoObject data) where T : Packet, new() { var packet = new T(); packet.LoadData(data); return packet; } private static List ConvertToPacketList(List data) where T : Packet, new() { var packets = new List(); foreach (var element in data) { var packet = new T(); packet.LoadData((ExpandoObject)element); packets.Add(packet); } return packets; } } }