public void Add <T>(ushort messageType, Action <NetworkMessageInfo, T> handler) where T : NetworkMessage { // Pour ne pas avoir à constamment gérer les casts vers les types de message enfants, on fait la conversion ici en // encapsulant le handler donné (qui peut avoir n'importe quel type de message comme paramètre) avec une méthode anonyme // qui elle prend un NetworkMessage en deuxième paramètre et se contente de le convertir en le type voulu puis appel le "vrai" handler. Action <NetworkMessageInfo, NetworkMessage> wrapper = (NetworkMessageInfo info, NetworkMessage m) => { if (m is T) { handler(info, (T)m); } else { Debugger.Log("ERREUR - MAUVAIS TYPE DE MESSAGE ! TYPE : " + m.Type, Color.red); } }; if (Handlers.ContainsKey(messageType)) { Handlers[messageType] += wrapper; } else { Handlers.Add(messageType, wrapper); } MessageReader.AddHandler(messageType, wrapper); }
public static void Initialize() { InputManager.AddHandler("NetCommand", NetworkCommandHandler); MessageReader.AddHandler(60002, NetworkCommandReceiver); SetEntityPositionSecurityLayer positionLayer = new SetEntityPositionSecurityLayer(); AddSecurityLayer(positionLayer); }