示例#1
0
        /// <summary>
        /// Write out all of the fields for the current packet
        /// </summary>
        /// <param name="definition">The definition that was used to persist the packet.</param>
        /// <param name="packet">The serialized packet to populate with data</param>
        void IPacket.WriteFields(PacketDefinition definition, SerializedPacket packet)
        {
            if (m_BasePacket != null)
            {
                ((IPacket)m_BasePacket).WriteFields(definition, packet);
            }

            for (int index = 0; index < m_Definition.Fields.Count; index++)
            {
                FieldDefinition fieldDefinition = m_Definition.Fields[index];
                switch (fieldDefinition.FieldType)
                {
                case FieldType.Bool:
                    packet.SetField(fieldDefinition.Name, (bool)m_FieldValues[index]);
                    break;

                case FieldType.BoolArray:
                    packet.SetField(fieldDefinition.Name, (bool[])m_FieldValues[index]);
                    break;

                case FieldType.String:
                    packet.SetField(fieldDefinition.Name, (string)m_FieldValues[index]);
                    break;

                case FieldType.StringArray:
                    packet.SetField(fieldDefinition.Name, (string[])m_FieldValues[index]);
                    break;

                case FieldType.Int32:
                    packet.SetField(fieldDefinition.Name, (Int32)m_FieldValues[index]);
                    break;

                case FieldType.Int32Array:
                    packet.SetField(fieldDefinition.Name, (Int32[])m_FieldValues[index]);
                    break;

                case FieldType.Int64:
                    packet.SetField(fieldDefinition.Name, (Int64)m_FieldValues[index]);
                    break;

                case FieldType.Int64Array:
                    packet.SetField(fieldDefinition.Name, (Int64[])m_FieldValues[index]);
                    break;

                case FieldType.UInt32:
                    packet.SetField(fieldDefinition.Name, (UInt32)m_FieldValues[index]);
                    break;

                case FieldType.UInt32Array:
                    packet.SetField(fieldDefinition.Name, (UInt32[])m_FieldValues[index]);
                    break;

                case FieldType.UInt64:
                    packet.SetField(fieldDefinition.Name, (UInt64)m_FieldValues[index]);
                    break;

                case FieldType.UInt64Array:
                    packet.SetField(fieldDefinition.Name, (UInt64[])m_FieldValues[index]);
                    break;

                case FieldType.Double:
                    packet.SetField(fieldDefinition.Name, (double)m_FieldValues[index]);
                    break;

                case FieldType.DoubleArray:
                    packet.SetField(fieldDefinition.Name, (double[])m_FieldValues[index]);
                    break;

                case FieldType.TimeSpan:
                    packet.SetField(fieldDefinition.Name, (TimeSpan)m_FieldValues[index]);
                    break;

                case FieldType.TimeSpanArray:
                    packet.SetField(fieldDefinition.Name, (TimeSpan[])m_FieldValues[index]);
                    break;

                case FieldType.DateTime:
                    packet.SetField(fieldDefinition.Name, (DateTime)m_FieldValues[index]);
                    break;

                case FieldType.DateTimeArray:
                    packet.SetField(fieldDefinition.Name, (DateTime[])m_FieldValues[index]);
                    break;

                case FieldType.Guid:
                    packet.SetField(fieldDefinition.Name, (Guid)m_FieldValues[index]);
                    break;

                case FieldType.GuidArray:
                    packet.SetField(fieldDefinition.Name, (Guid[])m_FieldValues[index]);
                    break;

                case FieldType.DateTimeOffset:
                    packet.SetField(fieldDefinition.Name, (DateTimeOffset)m_FieldValues[index]);
                    break;

                case FieldType.DateTimeOffsetArray:
                    packet.SetField(fieldDefinition.Name, (DateTimeOffset[])m_FieldValues[index]);
                    break;

                default:
#if DEBUG
                    if (Debugger.IsAttached)
                    {
                        Debugger.Break();
                    }
#endif
                    throw new InvalidOperationException(string.Format("The field type {0} is unknown so we can't serialize the packet ", definition.Fields[index].FieldType));
                }
            }
        }