Example #1
0
        /// <summary>
        /// Generates a <code>HLARecordFieldAttribute</code>.
        /// </summary>
        private void GenerateHLARecordFieldAttribute(int localIndentLevel, System.IO.StreamWriter ps, HLARecordField field)
        {
            string indentStr = GenerateIndentString(localIndentLevel);
            string newLine   = "," + Environment.NewLine + indentStr + "                ";

            ps.Write(indentStr + "[HLARecordField(Name = \"" + field.Name + "\"");
            if (!String.IsNullOrEmpty(field.DataType))
            {
                ps.Write(newLine);
                ps.Write("DataType = \"" + field.DataType + "\"");
            }
            if (!String.IsNullOrEmpty(field.DataTypeNotes))
            {
                ps.Write(newLine);
                ps.Write("DataTypeNotes = \"" + field.DataTypeNotes + "\"");
            }
            if (!String.IsNullOrEmpty(field.Semantics))
            {
                ps.Write(newLine);
                ps.Write("Semantics = \"" + field.Semantics + "\"");
            }
            if (!String.IsNullOrEmpty(field.SemanticsNotes))
            {
                ps.Write(newLine);
                ps.Write("SemanticsNotes = \"" + field.SemanticsNotes + "\"");
            }
            if (!String.IsNullOrEmpty(field.NameNotes))
            {
                ps.Write(newLine);
                ps.Write("NameNotes = \"" + field.NameNotes + "\"");
            }
            ps.WriteLine(")]");
        }
Example #2
0
        /// <summary>
        /// Generates a fixed record data type class.
        /// </summary>
        private void GenerateFixedRecordDataType(System.IO.StreamWriter stream, HLAFixedRecordData fixedRecord)
        {
            int    indentLevel = 0;
            string indentStr   = GenerateIndentString(indentLevel);

            System.String typeName = fixedRecord.Name;
            try
            {
                System.IO.StreamWriter ps;
                if (stream == null)
                {
                    String             qualifiedTypeName = packagePrefix + typeName;
                    String             path       = qualifiedTypeName.Replace('.', Path.DirectorySeparatorChar) + ".cs";
                    System.IO.FileInfo sourceFile = new System.IO.FileInfo(targetDirectory.FullName + Path.DirectorySeparatorChar + path);
                    System.IO.Directory.CreateDirectory(new System.IO.FileInfo(sourceFile.DirectoryName).FullName);

                    System.IO.FileStream fos = new System.IO.FileStream(sourceFile.FullName, System.IO.FileMode.Create);
                    ps = new System.IO.StreamWriter(fos);

                    System.String packageName = GetPackageName(qualifiedTypeName);

                    if (packageName != null)
                    {
                        ps.WriteLine(indentStr + "namespace " + packageName);
                    }
                    else
                    {
                        ps.WriteLine(indentStr + "namespace Sxta.Rti1516.Proxies");
                    }

                    ps.WriteLine(indentStr + "{");
                    indentLevel++;
                    indentStr = GenerateIndentString(indentLevel);

                    ps.WriteLine(indentStr + "using System;");
                    ps.WriteLine(indentStr + "using System.IO;");
                    ps.WriteLine();
                    ps.WriteLine(indentStr + "using Sxta.Rti1516.Reflection;");
                }
                else
                {
                    ps = stream;
                }

                ps.WriteLine();

                if (!string.IsNullOrEmpty(fixedRecord.Semantics))
                {
                    PrintClassComment(ps, fixedRecord.Semantics, indentLevel);
                }
                else
                {
                    PrintClassComment(ps, "Autogenerated fixed record data type.", indentLevel);
                }

                ps.WriteLine(indentStr + "[Serializable]");
                GenerateHLAFixedRecordDataAttribute(indentLevel, ps, fixedRecord);
                ps.WriteLine(indentStr + "public struct " + typeName);
                ps.WriteLine(indentStr + "{");

                indentLevel++;
                indentStr = GenerateIndentString(indentLevel);

                IList <HLARecordField> fields = fixedRecord.RecordFields;
                bool first = true;

                for (int i = 0; i < fields.Count; i++)
                {
                    HLARecordField field = fields[i];
                    if (NativeTypeForDataType(field.DataType) != null)
                    {
                        if (!string.IsNullOrEmpty(field.Semantics))
                        {
                            PrintVariableComment(ps, field.Semantics, indentLevel);
                        }
                        else
                        {
                            PrintVariableComment(ps, "Field #" + i + ".", indentLevel);
                        }
                        string propertyRecordFieldName = BuildRecordFieldPropertyName(field.Name, typeName);
                        string nativeFieldName         = BuildRecordFieldName(field.Name, typeName, propertyRecordFieldName);
                        ps.WriteLine(indentStr + "private " + NativeTypeForDataType(field.DataType) + " " + nativeFieldName + ";");
                        ps.WriteLine();
                    }
                }


                //----------------------------------------
                // FixedRecordDataType.constructor
                //----------------------------------------

                /* Structs dont have parameterless constructors
                 * ps.WriteLine(indentStr + "///<summary>Default constructor.</summary>");
                 * ps.WriteLine(indentStr + "public " + typeName + "()");
                 * ps.WriteLine(indentStr + "{");
                 *
                 * indentLevel++;
                 * indentStr = GenerateIndentString(indentLevel);
                 *
                 * indentLevel--;
                 * indentStr = GenerateIndentString(indentLevel);
                 * ps.WriteLine(indentStr + "}");
                 * ps.WriteLine();
                 */

                //----------------------------------------
                // FixedRecordDataType.ToString
                //----------------------------------------

                ps.WriteLine(indentStr + "///<summary> Returns a string representation of this " + typeName + ". </summary>");
                ps.WriteLine(indentStr + "///<returns> a string representation of this " + typeName + "</returns>");
                ps.WriteLine(indentStr + "public override String ToString()");
                ps.WriteLine(indentStr + "{");
                indentLevel++;
                indentStr = GenerateIndentString(indentLevel);

                ps.WriteLine(indentStr + "return \"" + typeName + "(\" +");

                first = true;

                for (int i = 0; i < fields.Count; i++)
                {
                    HLARecordField field = fields[i];

                    System.String nativeType = NativeTypeForDataType(field.DataType);
                    string        propertyRecordFieldName = BuildRecordFieldPropertyName(field.Name, typeName);
                    string        nativefieldName         = BuildRecordFieldName(field.Name, typeName, propertyRecordFieldName);

                    if (nativeType != null)
                    {
                        if (!first)
                        {
                            ps.WriteLine(" + \", \" +");
                        }
                        else
                        {
                            first = false;
                        }

                        ps.Write(indentStr + "         \"" + field.Name + ": \" + " + nativefieldName);
                    }
                }

                ps.WriteLine(" + ");
                ps.WriteLine(indentStr + "       \")\";");
                indentLevel--;
                indentStr = GenerateIndentString(indentLevel);
                ps.WriteLine(indentStr + "}");

                //----------------------------------------
                // FixedRecordDataType.Attributes (Gets/Sets)
                //----------------------------------------

                for (int i = 0; i < fields.Count; i++)
                {
                    HLARecordField field = fields[i];

                    System.String propertyRecordFieldName = BuildRecordFieldPropertyName(field.Name, typeName);
                    System.String fieldName       = BuildRecordFieldName(field.Name, typeName, propertyRecordFieldName);
                    System.String fieldType       = field.DataType;
                    System.String fieldNativeType = NativeTypeForDataType(fieldType);


                    if (fieldNativeType != null)
                    {
                        ps.WriteLine();
                        ps.WriteLine(indentStr + "///<summary>");
                        ps.WriteLine(indentStr + "/// Gets/Sets the value of the " + field.Name + " field.");
                        ps.WriteLine(indentStr + "///</summary>");
                        GenerateHLARecordFieldAttribute(indentLevel, ps, field);
                        ps.WriteLine(indentStr + "public " + fieldNativeType + " " + propertyRecordFieldName);
                        ps.WriteLine(indentStr + "{");
                        ps.WriteLine(indentStr + "    set {" + fieldName + " = value; }");
                        ps.WriteLine(indentStr + "    get { return " + fieldName + "; }");
                        ps.WriteLine(indentStr + "}");
                        ps.WriteLine();
                    }
                }

                indentLevel--;
                indentStr = GenerateIndentString(indentLevel);
                ps.WriteLine(indentStr + "}");

                if (stream == null)
                {
                    indentLevel--;
                    indentStr = GenerateIndentString(indentLevel);
                    ps.WriteLine(indentStr + "}");

                    ps.Flush();
                    ps.Close();
                }
            }
            catch (System.IO.IOException ioe)
            {
                System.Console.Error.WriteLine("Error generating fixed record data type: " + ioe);
            }
        }
Example #3
0
        /// <summary>
        /// Generates a serializer class for the fixed record data type class.
        /// </summary>
        private void GenerateFixedRecordDataTypeSerializers(System.IO.StreamWriter stream, HLAFixedRecordData fixedRecord, int indentLevel)
        {
            string indentStr = GenerateIndentString(indentLevel);

            String typeName           = fixedRecord.Name;
            String typeNameSerializer = typeName + "XrtiSerializer";

            try
            {
                System.IO.StreamWriter ps;
                if (stream == null)
                {
                    String             qualifiedTypeName = packagePrefix + typeNameSerializer;
                    String             path       = qualifiedTypeName.Replace('.', Path.DirectorySeparatorChar) + ".cs";
                    System.IO.FileInfo sourceFile = new System.IO.FileInfo(targetDirectory.FullName + Path.DirectorySeparatorChar + path);
                    System.IO.Directory.CreateDirectory(new System.IO.FileInfo(sourceFile.DirectoryName).FullName);

                    System.IO.FileStream fos = new System.IO.FileStream(sourceFile.FullName, System.IO.FileMode.Create);
                    ps = new System.IO.StreamWriter(fos);

                    System.String packageName = GetPackageName(qualifiedTypeName);

                    if (packageName != null)
                    {
                        ps.WriteLine(indentStr + "namespace " + packageName);
                    }
                    else
                    {
                        ps.WriteLine(indentStr + "namespace Sxta.Rti1516.Proxies");
                    }

                    ps.WriteLine(indentStr + "{");
                    indentLevel++;
                    indentStr = GenerateIndentString(indentLevel);

                    ps.WriteLine(indentStr + "using System;");
                    ps.WriteLine(indentStr + "using System.IO;");
                    ps.WriteLine();
                    ps.WriteLine(indentStr + "using HlaEncodingReader = Sxta.Rti1516.Serializers.XrtiEncoding.HlaEncodingReader;");
                    ps.WriteLine(indentStr + "using HlaEncodingWriter = Sxta.Rti1516.Serializers.XrtiEncoding.HlaEncodingWriter;");
                }
                else
                {
                    ps = stream;
                }

                ps.WriteLine(); ps.WriteLine();

                PrintClassComment(ps, "Serializes and deserializes " + typeName + " objects into and from HLA formats.", indentLevel);
                ps.WriteLine(indentStr + "public sealed class " + typeNameSerializer);
                ps.WriteLine(indentStr + "{");
                indentLevel++;
                indentStr = GenerateIndentString(indentLevel);

                //----------------------------------------
                // FixedRecordDataType.Serializer.Serialize
                //----------------------------------------
                ps.WriteLine(indentStr + "///<summary>");
                ps.WriteLine(indentStr + "/// Writes this " + typeName + " to the specified stream.");
                ps.WriteLine(indentStr + "///</summary>");
                ps.WriteLine(indentStr + "///<param name=\"writer\"> the output stream to write to</param>");
                ps.WriteLine(indentStr + "///<param name=\"obj\"> the object to serialize</param>");
                ps.WriteLine(indentStr + "///<exception cref=\"IOException\"> if an error occurs</exception>");
                ps.WriteLine(indentStr + "public static void Serialize(HlaEncodingWriter writer, " + typeName + " obj)");
                ps.WriteLine(indentStr + "{");
                indentLevel++;
                indentStr = GenerateIndentString(indentLevel);

                IList <HLARecordField> fields = fixedRecord.RecordFields;
                for (int i = 0; i < fields.Count; i++)
                {
                    HLARecordField field = fields[i];

                    if (NativeTypeForDataType(field.Name) != null)
                    {
                        PrintSerializationBlock(ps, indentLevel, 'i', field.DataType, "obj." + BuildRecordFieldPropertyName(field.Name, typeNameSerializer), "writer");
                    }
                }
                indentLevel--;
                indentStr = GenerateIndentString(indentLevel);
                ps.WriteLine(indentStr + "}");
                ps.WriteLine();

                //----------------------------------------
                // FixedRecordDataType.Serializer.Deserialize
                //----------------------------------------

                ps.WriteLine();
                ps.WriteLine(indentStr + "///<summary>");
                ps.WriteLine(indentStr + "/// Reads and returns a " + typeName + " from the specified stream.");
                ps.WriteLine(indentStr + "///</summary>");
                ps.WriteLine(indentStr + "///<param name=\"reader\"> the input stream to read from</param>");
                ps.WriteLine(indentStr + "///<returns> the decoded value</returns>");
                ps.WriteLine(indentStr + "///<exception cref=\"IOException\"> if an error occurs</exception>");
                ps.WriteLine(indentStr + "public static " + typeName + " Deserialize(HlaEncodingReader reader)");
                ps.WriteLine(indentStr + "{");

                indentLevel++;
                indentStr = GenerateIndentString(indentLevel);

                ps.WriteLine(indentStr + typeName + " decodedValue = new " + typeName + "();");
                ps.WriteLine();

                for (int i = 0; i < fields.Count; i++)
                {
                    HLARecordField field = fields[i];

                    if (NativeTypeForDataType(field.Name) != null)
                    {
                        PrintDeserializationBlock(ps, indentLevel, 'i', field.DataType, "decodedValue." + BuildRecordFieldPropertyName(field.Name, typeNameSerializer), "reader");
                    }
                }

                ps.WriteLine(indentStr + "return decodedValue;");
                indentLevel--;
                indentStr = GenerateIndentString(indentLevel);
                ps.WriteLine(indentStr + "}");
                ps.WriteLine();

                indentLevel--;
                indentStr = GenerateIndentString(indentLevel);
                ps.WriteLine(indentStr + "}");
                ps.WriteLine();

                if (stream == null)
                {
                    indentLevel--;
                    indentStr = GenerateIndentString(indentLevel);
                    ps.WriteLine(indentStr + "}");

                    ps.Flush();
                    ps.Close();
                }
            }
            catch (System.IO.IOException ioe)
            {
                System.Console.Error.WriteLine("Error generating fixed record data type: " + ioe);
            }
        }