コード例 #1
0
        /// <summary>
        /// Creates the struct packet property.
        /// </summary>
        /// <param name="structType">Type of the struct.</param>
        public StructPacketProperty(Type structType)
        {
            // Add the packet information.
            if (structType.GetCustomAttribute(typeof(PacketStructAttribute)) is PacketStructAttribute packetStruct)
            {
                this.Properties.Add(new PacketInformation(packetStruct.MessageIdentifier, packetStruct.RemoteConnectionType, packetStruct.PacketId));
            }

            // Convert the properties to PacketProperties.
            foreach (var property in structType?.GetProperties())
            {
                // Create the base packet property.
                IPacketProperty packetProperty = null;
                if (property.PropertyType == typeof(string))
                {
                    packetProperty = new StringPacketProperty(property);
                }
                else if (property.PropertyType == typeof(Quaternion) && property.GetCustomAttribute <NiQuaternionAttribute>() != null)
                {
                    packetProperty = new NiQuaternionProperty(property);
                }
                else if (property.PropertyType.IsValueType && property.PropertyType.GetCustomAttribute <StructAttribute>() != null)
                {
                    packetProperty = new StructPacketProperty(property);
                }
                else
                {
                    packetProperty = new PacketProperty(property);
                }
                if ((property.GetCustomAttribute(typeof(DefaultAttribute)) is DefaultAttribute defaultAttribute))
                {
                    packetProperty = new FlagPacketProperty(packetProperty, defaultAttribute.ValueToIgnore);
                }

                // Wrap the required properties.
                var requiredProperties = new Dictionary <string, RequiredPacketProperty>();
                foreach (var requiredAttribute in property.GetCustomAttributes <RequiresAttribute>())
                {
                    if (!requiredProperties.ContainsKey(requiredAttribute.PropertyName))
                    {
                        var requiredPacketProperty = new RequiredPacketProperty(packetProperty, requiredAttribute.PropertyName);
                        requiredProperties.Add(requiredAttribute.PropertyName, requiredPacketProperty);
                        packetProperty = requiredPacketProperty;
                    }
                    requiredProperties[requiredAttribute.PropertyName].RequiredValues.Add(requiredAttribute.ValueToRequire);
                }

                // Add the packet property.
                this.Properties.Add(packetProperty);
            }
        }
コード例 #2
0
ファイル: FlagPacketProperty.cs プロジェクト: UchuServer/Uchu
 /// <summary>
 /// Creates the flag packet property.
 /// </summary>
 /// <param name="packetProperty">Packet property to wrap.</param>
 /// <param name="valueToIgnore">Value that results in the flag being read/written as false.</param>
 public FlagPacketProperty(IPacketProperty packetProperty, object valueToIgnore) : base(packetProperty)
 {
     this._valueToIgnore = valueToIgnore;
     this._defaultValue  = this.StructProperty.PropertyType.IsValueType ? Activator.CreateInstance(this.StructProperty.PropertyType) : null;
 }
コード例 #3
0
 /// <summary>
 /// Creates the wrapped packet property.
 /// </summary>
 /// <param name="packetProperty">Packet property to wrap.</param>
 public WrappedPacketProperty(IPacketProperty packetProperty)
 {
     this.WrappedProperty = packetProperty;
 }
コード例 #4
0
 /// <summary>
 /// Creates the required packet property.
 /// </summary>
 /// <param name="packetProperty">Packet property to wrap.</param>
 /// <param name="propertyToCheck">Property that is checked.</param>
 public RequiredPacketProperty(IPacketProperty packetProperty, string propertyToCheck) : base(packetProperty)
 {
     this._propertyToCheck = propertyToCheck;
 }