/// <summary> /// Register a packet for the given ID. /// </summary> /// <param name="packetId">The server packet ID.</param> /// <param name="handler">The handler for the data.</param> /// <typeparam name="T">The type of the packet data passed as parameter to the handler.</typeparam> public void RegisterServerPacketHandler <T>( ServerPacketId packetId, GenericServerPacketHandler <T> handler ) where T : IPacketData => RegisterServerPacketHandler( packetId, (id, iPacket) => handler(id, (T)iPacket) );
public void RegisterServerPacketHandler <T>(ServerPacketId packetId, GenericServerPacketHandler <T> packetHandler) where T : IPacketData { if (_serverPacketHandlers.ContainsKey(packetId)) { Logger.Get().Error(this, $"Tried to register already existing server packet handler: {packetId}"); return; } // We can't store these kinds of generic delegates in a dictionary, // so we wrap it in a function that casts it _serverPacketHandlers[packetId] = (id, iPacket) => { packetHandler(id, (T)iPacket); }; }
/// <inheritdoc/> public void RegisterPacketHandler <TPacketData>(TPacketId packetId, GenericServerPacketHandler <TPacketData> handler) where TPacketData : IPacketData { if (!PacketIdLookup.TryGetValue(packetId, out var idValue)) { throw new InvalidOperationException( InvalidPacketIdMsg); } if (!_serverAddon.Id.HasValue) { throw new InvalidOperationException(NoAddonIdMsg); } _packetManager.RegisterServerAddonPacketHandler( _serverAddon.Id.Value, idValue, (id, iPacketData) => handler(id, (TPacketData)iPacketData) ); }