/// <summary>
        /// 将一个 <see cref="IDataReader"/> 转换为一个 <typeparamref name="T"/> 的对象。
        /// </summary>
        /// <param name="database">当前的 <see cref="IDatabase"/> 对象。</param>
        /// <param name="reader">一个 <see cref="IDataReader"/> 对象。</param>
        /// <returns>由当前 <see cref="IDataReader"/> 对象中的数据转换成的 <typeparamref name="T"/> 对象实例。</returns>
        public virtual T Map(IDatabase database, IDataReader reader)
        {
            var value = RecordWrapper == null ? reader[0] :
                        RecordWrapper.GetValue(reader, 0);

            var converter = ConvertManager.GetConverter(typeof(T));

            return(converter != null ? (T)converter.ConvertFrom(value, reader.GetFieldType(0).GetDbType()) :
                   value.To <object, T>());
        }
Exemplo n.º 2
0
        protected override bool IsValid(RecordWrapper wrapper)
        {
            bool valid = false;

            if (wrapper.Record is DamageRecord damage)
            {
                valid = DamageType == 0 || (DamageType == 1 && TankingStatsManager.IsMelee(damage)) || (DamageType == 2 && !TankingStatsManager.IsMelee(damage));
            }
            return(valid);
        }
Exemplo n.º 3
0
        private PropertyValue GetSupportedValue(bool isNull, PropertyMapping mapper, IDataReader reader)
        {
            try
            {
                if (mapper.Property.Type == typeof(Guid))
                {
                    return(isNull ? new Guid?() : new Guid(reader.GetValue(mapper.Index).ToString()));
                }

                var typeCode = Type.GetTypeCode(mapper.Property.Type.GetNonNullableType());
                switch (typeCode)
                {
                case TypeCode.Boolean:
                    return(isNull ? new bool?() : RecordWrapper.GetBoolean(reader, mapper.Index));

                case TypeCode.Char:
                    return(isNull ? new char?() : RecordWrapper.GetChar(reader, mapper.Index));

                case TypeCode.Byte:
                    return(isNull ? new byte?() : RecordWrapper.GetByte(reader, mapper.Index));

                case TypeCode.Int16:
                    return(isNull ? new short?() : RecordWrapper.GetInt16(reader, mapper.Index));

                case TypeCode.Int32:
                    return(isNull ? new int?() : RecordWrapper.GetInt32(reader, mapper.Index));

                case TypeCode.Int64:
                    return(isNull ? new long?() : RecordWrapper.GetInt64(reader, mapper.Index));

                case TypeCode.Decimal:
                    return(isNull ? new decimal?() : RecordWrapper.GetDecimal(reader, mapper.Index));

                case TypeCode.Double:
                    return(isNull ? new double?() : RecordWrapper.GetDouble(reader, mapper.Index));

                case TypeCode.String:
                    return(isNull ? string.Empty : RecordWrapper.GetString(reader, mapper.Index));

                case TypeCode.DateTime:
                    return(isNull ? new DateTime?() : RecordWrapper.GetDateTime(reader, mapper.Index));

                case TypeCode.Single:
                    return(isNull ? new float?() : RecordWrapper.GetFloat(reader, mapper.Index));

                default:
                    return(PropertyValue.NewValue(RecordWrapper.GetValue(reader, mapper.Index)));
                }
            }
            catch (Exception ex)
            {
                throw new RowMapperCastException(mapper.Property.Name, mapper.Property.Type, ex);
            }
        }
Exemplo n.º 4
0
        override protected DataPoint Create(RecordWrapper wrapper)
        {
            DataPoint dataPoint = null;

            if (wrapper?.Record is DamageRecord record)
            {
                dataPoint = new DataPoint()
                {
                    Total = record.Total, ModifiersMask = record.ModifiersMask, Name = record.Defender, CurrentTime = wrapper.BeginTime
                };
            }

            return(dataPoint);
        }
Exemplo n.º 5
0
        /// <summary>
        /// 将一个 <see cref="IDataReader"/> 转换为一个 <typeparamref name="T"/> 的对象。
        /// </summary>
        /// <param name="reader">一个 <see cref="IDataReader"/> 对象。</param>
        /// <returns>由当前 <see cref="IDataReader"/> 对象中的数据转换成的 <typeparamref name="T"/> 对象实例。</returns>
        public virtual T Map(IDataReader reader)
        {
            var index = reader.FieldCount != 1 ? 1 : 0;
            var value = RecordWrapper == null ? reader[index] :
                        RecordWrapper.GetValue(reader, index);

            var converter = ConvertManager.GetConverter(typeof(T));

            if (converter != null)
            {
                return((T)converter.ConvertFrom(value, reader.GetFieldType(index).GetDbType()));
            }

            return(value.To <object, T>());
        }
Exemplo n.º 6
0
        override protected DataPoint Create(RecordWrapper wrapper)
        {
            DataPoint dataPoint = null;

            if (wrapper?.Record is DamageRecord record)
            {
                string origName = null;
                string pname    = PlayerManager.Instance.GetPlayerFromPet(record.Attacker);
                if (pname != null || (!string.IsNullOrEmpty(record.AttackerOwner) && !string.IsNullOrEmpty(pname = record.AttackerOwner)))
                {
                    origName = pname;
                }

                dataPoint = new DataPoint()
                {
                    Total = record.Total, ModifiersMask = record.ModifiersMask, Name = record.Attacker, PlayerName = origName, CurrentTime = wrapper.BeginTime
                };
            }

            return(dataPoint);
        }
Exemplo n.º 7
0
        private RecordWrapper GetRecord()
        {
            RecordWrapper wrapper = StopWrapper;

            if (RecordGroups.Count > CurrentGroup)
            {
                var blocks = RecordGroups[CurrentGroup];

                if (blocks.Count > CurrentBlock)
                {
                    var block = blocks[CurrentBlock];

                    if (block.Actions.Count > CurrentRecord)
                    {
                        wrapper = new RecordWrapper()
                        {
                            Record = block.Actions[CurrentRecord], BeginTime = block.BeginTime
                        };
                        CurrentRecord++;
                    }
                    else
                    {
                        CurrentRecord = 0;
                        CurrentBlock++;
                        wrapper = null;
                    }
                }
                else
                {
                    CurrentBlock  = 0;
                    CurrentRecord = 0;
                    CurrentGroup++;
                    wrapper = null;
                }
            }

            return(wrapper);
        }
Exemplo n.º 8
0
 override protected bool IsValid(RecordWrapper wrapper)
 {
     return(true); // validated when damage groups are initially built in the manager
 }
Exemplo n.º 9
0
 protected virtual DataPoint Create(RecordWrapper wrapper)
 {
     return(null);
 }
Exemplo n.º 10
0
 protected virtual bool IsValid(RecordWrapper wrapper)
 {
     return(false);
 }
Exemplo n.º 11
0
        override protected bool IsValid(RecordWrapper wrapper)
        {
            DamageRecord record = wrapper?.Record as DamageRecord;

            return(record.Type != Labels.BANE || MainWindow.IsBaneDamageEnabled);
        }