예제 #1
0
        /// <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;
        }
예제 #2
0
        /// <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;
        }