void AddHandlers() { var methods = GetType().GetMethods(BindingFlags.Instance | BindingFlags.NonPublic); for (var i = 0; i < methods.Length; i++) { if (methods[i].ReturnType != typeof(void)) { continue; } var attribute = methods[i].GetCustomAttributes(typeof(HandlesPacketAttribute), false).FirstOrDefault() as HandlesPacketAttribute; if (attribute == null) { continue; } var parameters = methods[i].GetParameters(); if (parameters.Length != 1 || parameters[0].ParameterType != typeof(NetworkPacket)) { throw new Exception(string.Format("Method {0} requires exactly 1 parameter of type {1}", methods[i].Name, typeof(NetworkPacket).Name)); } var handler = (PacketHandlerDelegate)Delegate.CreateDelegate(typeof(PacketHandlerDelegate), this, methods[i]); dispatcher.Add(attribute.HeaderType, handler); } }
void AddHandlers() { dispatcher.Add(LoginHeader.C2L_QUERY_UNIVERSE_LIST, HandleQueryUniverseList); dispatcher.Add(LoginHeader.C2L_UNIVERSE_SELECTED, HandleUniverseSelection); }