/// <summary> /// Initializes a new instance of the <see cref="MapPartialDescriptionPacket"/> class. /// </summary> /// <param name="mapDescriptionType">The type of map description.</param> /// <param name="descriptionBytes">The description bytes.</param> public MapPartialDescriptionPacket(OutgoingGamePacketType mapDescriptionType, ReadOnlySequence <byte> descriptionBytes) { if (mapDescriptionType != OutgoingGamePacketType.MapSliceEast && mapDescriptionType != OutgoingGamePacketType.MapSliceNorth && mapDescriptionType != OutgoingGamePacketType.MapSliceSouth && mapDescriptionType != OutgoingGamePacketType.MapSliceWest && mapDescriptionType != OutgoingGamePacketType.FloorChangeUp && mapDescriptionType != OutgoingGamePacketType.FloorChangeDown) { throw new ArgumentException(nameof(mapDescriptionType)); } this.PacketType = (byte)mapDescriptionType; this.DescriptionBytes = descriptionBytes; }
/// <summary> /// Registers a packet writer to this protocol. /// </summary> /// <param name="forType">The type of packet to register for.</param> /// <param name="packetWriter">The packet writer to register.</param> public void RegisterPacketWriter(byte forType, IPacketWriter packetWriter) { packetWriter.ThrowIfNull(nameof(packetWriter)); if (!Enum.IsDefined(typeof(OutgoingGamePacketType), forType)) { throw new InvalidOperationException($"Unsupported packet type {forType:x2}. Check the types defined in {nameof(OutgoingGamePacketType)}."); } OutgoingGamePacketType packetType = (OutgoingGamePacketType)forType; if (this.packetWritersMap.ContainsKey(packetType)) { throw new InvalidOperationException($"There is already a writer registered for the packet type: {packetType}."); } this.logger.Verbose($"Registered packet writer for type {packetType}."); this.packetWritersMap[packetType] = packetWriter; }