/// <summary> /// Generates Interactions Class serializers. /// </summary> private void GenerateInteractionsSerializers(System.IO.StreamWriter stream, List <string> generatedInteractiontList, InteractionClassDescriptor interactionClassDescriptor, string superInteractionName, int originalIndentLevel) { if (interactionClassDescriptor == null) { return; } else if (interactionClassDescriptor.ParentDescriptors.Count != 0) { InteractionClassDescriptor parentDescriptor = interactionClassDescriptor.ParentDescriptors[0]; if (!generatedInteractiontList.Contains(parentDescriptor.Name)) { GenerateInteractionsMessages(stream, generatedInteractiontList, parentDescriptor, superInteractionName); } } generatedInteractiontList.Add(interactionClassDescriptor.Name); try { System.IO.StreamWriter sw; int indentLevel = originalIndentLevel; string indentStr = GenerateIndentString(indentLevel); HLAinteractionClass interactionClass = interactionClassDescriptor.interactionClass; String interaction = interactionClass.Name; List <ParameterDescriptor> parametersDescriptor = interactionClassDescriptor.ParameterDescriptors; String interactionMessageName = GetInteractionMessageName(interaction); String qualifiedInteractionName = packagePrefix + interactionMessageName + "XrtiSerializer"; bool hasParent = true; if (stream == null) { String path = qualifiedInteractionName.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); sw = new System.IO.StreamWriter(fos); System.String packageName = GetPackageName(qualifiedInteractionName); if (packageName != null) { sw.WriteLine(indentStr + "namespace " + packageName + ";"); } else { sw.WriteLine(indentStr + "namespace Sxta.Rti1516.Proxies"); } sw.WriteLine(indentStr + "{"); indentLevel++; indentStr = GenerateIndentString(indentLevel); sw.WriteLine(indentStr + "using System;"); sw.WriteLine(); sw.WriteLine(indentStr + "using Hla.Rti1516;"); sw.WriteLine(indentStr + "using Sxta.Rti1516.Reflection;"); sw.WriteLine(indentStr + "using Sxta.Rti1516.Serializers.XrtiEncoding;"); } else { sw = stream; } sw.WriteLine(); //------------------------------------------ Generation of MessageSerializer ----------------------------------- sw.WriteLine(); sw.WriteLine(indentStr + "///<summary>"); sw.Write(FormatCommentBody(indentLevel, "A HLA serializer for " + interactionMessageName + ".")); sw.WriteLine(indentStr + "///</summary>"); if (!String.IsNullOrEmpty(superInteractionName)) { sw.Write(indentStr + "public class " + interactionMessageName + "XrtiSerializer : " + GetInteractionMessageName(superInteractionName) + "XrtiSerializer"); if (interactionClassDescriptor.ParentDescriptors.Count > 0) { foreach (InteractionClassDescriptor parent in interactionClassDescriptor.ParentDescriptors) { if (!parent.Name.Equals(superInteractionName)) { sw.WriteLine(","); sw.Write(" " + Spacer(interactionMessageName) + " " + GetInteractionMessageName(parent.Name) + "XrtiSerializer"); } } } } else { sw.Write(indentStr + "public class " + interactionMessageName + "XrtiSerializer"); if (interactionClassDescriptor.ParentDescriptors.Count > 0) { sw.Write(" : "); InteractionClassDescriptor parent; int length = interactionClassDescriptor.ParentDescriptors.Count; for (int i = 0; i < length; i++) { parent = interactionClassDescriptor.ParentDescriptors[i]; sw.Write(GetInteractionMessageName(parent.Name) + "XrtiSerializer"); if (i < length - 1) { sw.WriteLine(","); sw.Write(" " + Spacer(interactionMessageName + "XrtiSerializer") + " "); } } } else { sw.WriteLine(": BaseInteractionMessageXrtiSerializer"); hasParent = false; } } sw.WriteLine(); sw.WriteLine(indentStr + "{"); indentLevel += 1; indentStr = GenerateIndentString(indentLevel); sw.WriteLine(indentStr + "///<summary> Constructor </summary>"); sw.WriteLine(indentStr + "public " + interactionMessageName + "XrtiSerializer(XrtiSerializerManager manager)"); sw.WriteLine(indentStr + ": base(manager)"); sw.WriteLine(indentStr + "{"); sw.WriteLine(indentStr + "}"); sw.WriteLine(); sw.WriteLine(indentStr + "///<summary> Writes this " + interactionMessageName + " to the specified stream.</summary>"); sw.WriteLine(indentStr + "///<param name=\"writer\"> the output stream to write to</param>"); sw.WriteLine(indentStr + "///<param name=\"obj\"> the object to serialize</param>"); sw.WriteLine(indentStr + "///<exception cref=\"System.IO.IOException\"> if an error occurs</exception>"); sw.WriteLine(indentStr + "public override void Serialize(HlaEncodingWriter writer, object obj)"); sw.WriteLine(indentStr + "{"); indentStr = GenerateIndentString(indentLevel + 1); if (parametersDescriptor.Count > 0) { sw.WriteLine(indentStr + "try"); sw.WriteLine(indentStr + "{"); if (hasParent) { sw.WriteLine(GenerateIndentString(indentLevel + 2) + "base.Serialize(writer, obj);"); } foreach (ParameterDescriptor parameter in interactionClassDescriptor.ParameterDescriptors) { System.String parameterName = parameter.Name; System.String parameterType = parameter.DataType; PrintSerializationBlock(sw, indentLevel + 2, 'i', parameterType, "((" + interactionMessageName + ") obj)." + BuildPropertyName(parameter.Name, interactionMessageName), "writer"); } sw.WriteLine(indentStr + "}"); sw.WriteLine(indentStr + "catch(System.IO.IOException ioe)"); sw.WriteLine(indentStr + "{"); sw.WriteLine(GenerateIndentString(indentLevel + 2) + "throw new RTIinternalError(ioe.ToString());"); sw.WriteLine(indentStr + "}"); } indentStr = GenerateIndentString(indentLevel); sw.WriteLine(indentStr + "}"); sw.WriteLine(); sw.WriteLine(indentStr + "///<summary> Reads this " + interactionMessageName + " from the specified stream.</summary>"); sw.WriteLine(indentStr + "///<param name=\"reader\"> the input stream to read from</param>"); sw.WriteLine(indentStr + "///<returns> the object</returns>"); sw.WriteLine(indentStr + "///<exception cref=\"System.IO.IOException\"> if an error occurs</exception>"); sw.WriteLine(indentStr + "public override object Deserialize(HlaEncodingReader reader, ref object msg)"); sw.WriteLine(indentStr + "{"); indentStr = GenerateIndentString(indentLevel + 1); sw.WriteLine(indentStr + interactionMessageName + " decodedValue;"); sw.WriteLine(indentStr + "if (!(msg is " + interactionMessageName + "))"); sw.WriteLine(indentStr + "{"); string indent2 = GenerateIndentString(indentLevel + 2); sw.WriteLine(indent2 + "decodedValue = new " + interactionMessageName + "();"); sw.WriteLine(indent2 + "BaseInteractionMessage baseMsg = msg as BaseInteractionMessage;"); sw.WriteLine(indent2 + "decodedValue.InteractionClassHandle = baseMsg.InteractionClassHandle;"); sw.WriteLine(indent2 + "decodedValue.FederationExecutionHandle = baseMsg.FederationExecutionHandle;"); sw.WriteLine(indent2 + "decodedValue.UserSuppliedTag = baseMsg.UserSuppliedTag;"); sw.WriteLine(indentStr + "}"); sw.WriteLine(indentStr + "else"); sw.WriteLine(indentStr + "{"); sw.WriteLine(indent2 + "decodedValue = msg as " + interactionMessageName + ";"); sw.WriteLine(indentStr + "}"); if (hasParent) { sw.WriteLine(indentStr + "object tmp = decodedValue;"); sw.WriteLine(indentStr + "decodedValue = base.Deserialize(reader, ref tmp) as " + interactionMessageName + ";"); //sw.WriteLine(indentStr + interactionMessageName + " msg = (" + interactionMessageName + ") base.Deserialize(reader);"); } else { sw.WriteLine(); //sw.WriteLine(indentStr + interactionMessageName + " msg = new " + interactionMessageName + "();"); } if (parametersDescriptor.Count > 0) { sw.WriteLine(indentStr + "try"); sw.WriteLine(indentStr + "{"); foreach (ParameterDescriptor parameter in parametersDescriptor) { System.String parameterName = parameter.Name; System.String parameterType = parameter.DataType; PrintDeserializationBlock(sw, indentLevel + 2, 'i', parameterType, "decodedValue." + BuildPropertyName(parameter.Name, interactionMessageName), "reader"); } sw.WriteLine(indentStr + "}"); sw.WriteLine(indentStr + "catch(System.IO.IOException ioe)"); sw.WriteLine(indentStr + "{"); sw.WriteLine(GenerateIndentString(indentLevel + 2) + "throw new RTIinternalError(ioe.ToString());"); sw.WriteLine(indentStr + "}"); } sw.WriteLine(indentStr + "return decodedValue;"); indentStr = GenerateIndentString(indentLevel); sw.WriteLine(indentStr + "}"); indentLevel--; indentStr = GenerateIndentString(indentLevel); sw.WriteLine(indentStr + "}"); if (stream == null) { indentLevel--; indentStr = GenerateIndentString(indentLevel); sw.WriteLine(indentStr + "}"); sw.Flush(); sw.Close(); } } catch (System.IO.IOException ioe) { if (log.IsErrorEnabled) { log.Error("Error generating object instance interface: " + ioe); } } }
/// <summary> /// Generates Interactions Class. /// </summary> private void GenerateInteractionsMessages(System.IO.StreamWriter stream, List <string> generatedInteractiontList, InteractionClassDescriptor interactionClassDescriptor, string superInteractionName) { if (interactionClassDescriptor == null) { return; } else if (interactionClassDescriptor.ParentDescriptors.Count != 0) { InteractionClassDescriptor parentDescriptor = interactionClassDescriptor.ParentDescriptors[0]; if (!generatedInteractiontList.Contains(parentDescriptor.Name)) { GenerateInteractionsMessages(stream, generatedInteractiontList, parentDescriptor, superInteractionName); } } generatedInteractiontList.Add(interactionClassDescriptor.Name); try { System.IO.StreamWriter sw; int indentLevel = 0; string indentStr = GenerateIndentString(indentLevel); HLAinteractionClass interactionClass = interactionClassDescriptor.interactionClass; String interaction = interactionClass.Name; List <ParameterDescriptor> parametersDescriptor = interactionClassDescriptor.ParameterDescriptors; String interactionMessageName = GetInteractionMessageName(interaction); String qualifiedInteractionName = packagePrefix + interactionMessageName; if (stream == null) { String path = qualifiedInteractionName.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); sw = new System.IO.StreamWriter(fos); System.String packageName = GetPackageName(qualifiedInteractionName); if (packageName != null) { sw.WriteLine(indentStr + "namespace " + packageName + ";"); } else { sw.WriteLine(indentStr + "namespace Sxta.Rti1516.Proxies"); } sw.WriteLine(indentStr + "{"); indentLevel++; indentStr = GenerateIndentString(indentLevel); sw.WriteLine(indentStr + "using System;"); sw.WriteLine(); sw.WriteLine(indentStr + "using Hla.Rti1516;"); sw.WriteLine(indentStr + "using Sxta.Rti1516.Reflection;"); sw.WriteLine(indentStr + "using Sxta.Rti1516.Serializers.XrtiEncoding;"); } else { sw = stream; } sw.WriteLine(); //------------------------------------------ Generation of Message ----------------------------------- sw.WriteLine(); bool hasParent = true; if (!string.IsNullOrEmpty(interactionClass.Semantics)) { sw.WriteLine(indentStr + "///<summary>"); sw.Write(FormatCommentBody(indentLevel, "Message for " + interaction + " iteraction : " + interactionClass.Semantics)); sw.WriteLine(indentStr + "///</summary>"); } else { sw.WriteLine(indentStr + "///<summary> Message for " + interaction + " iteraction : " + interaction + " classSerializerHelperName.</summary>"); } GenerateHLAInteractionClassAttribute(indentLevel, sw, interactionClassDescriptor); if (!String.IsNullOrEmpty(superInteractionName)) { sw.Write(indentStr + "public class " + interactionMessageName + " : " + GetInteractionMessageName(superInteractionName)); if (interactionClassDescriptor.ParentDescriptors.Count > 0) { foreach (InteractionClassDescriptor parent in interactionClassDescriptor.ParentDescriptors) { if (!parent.Name.Equals(superInteractionName)) { sw.Write(", " + GetInteractionMessageName(parent.Name)); } } sw.WriteLine(); } else { hasParent = false; } } else { sw.Write(indentStr + "public class " + interactionMessageName); if (interactionClassDescriptor.ParentDescriptors.Count > 0) { sw.Write(" : "); InteractionClassDescriptor parent; int length = interactionClassDescriptor.ParentDescriptors.Count; for (int i = 0; i < length; i++) { parent = interactionClassDescriptor.ParentDescriptors[i]; sw.Write(GetInteractionMessageName(parent.Name)); if (i < length - 1) { sw.Write(", "); } } sw.WriteLine(); } else { sw.WriteLine(": BaseInteractionMessage"); } } sw.WriteLine(); sw.WriteLine(indentStr + "{"); indentLevel += 1; indentStr = GenerateIndentString(indentLevel); foreach (ParameterDescriptor parameter in parametersDescriptor) { System.String parameterName = BuildFieldName(parameter.Name, interaction + "Message"); System.String parameterPropertyName = BuildPropertyName(parameter.Name, interaction + "Message"); System.String parameterType = parameter.DataType; System.String parameterNativeType = NativeTypeForDataType(parameterType); sw.WriteLine(indentStr + parameterNativeType + " " + parameterName + ";"); sw.WriteLine(); if (!string.IsNullOrEmpty(parameter.Semantics)) { sw.Write(FormatCommentBody(indentLevel, "<summary>" + parameter.Semantics + "</summary>")); } else { sw.WriteLine(indentStr + "///<summary> Gets/Sets the value of the " + parameter.Name + " parameter </summary>"); } GenerateHLAInteractionParameterAttribute(indentLevel, sw, parameter); sw.WriteLine(indentStr + "public " + parameterNativeType + " " + parameterPropertyName); sw.WriteLine(indentStr + "{"); sw.WriteLine(GenerateIndentString(indentLevel + 1) + "get { return " + parameterName + ";}"); sw.WriteLine(GenerateIndentString(indentLevel + 1) + "set { " + parameterName + " = value;}"); sw.WriteLine(indentStr + "}"); sw.WriteLine(); } sw.WriteLine(indentStr + "///<summary> Returns a string representation of this " + interactionMessageName + ". </summary>"); sw.WriteLine(indentStr + "///<returns> a string representation of this " + interactionMessageName + "</returns>"); sw.WriteLine(indentStr + "public override string ToString()"); sw.WriteLine(indentStr + "{"); if (!hasParent) { sw.WriteLine(indentStr + " return \"" + interactionMessageName + "();"); } else { sw.Write(indentStr + " return \"" + interactionMessageName + "(\" + base.ToString()"); } foreach (ParameterDescriptor parameter in parametersDescriptor) { System.String parameterName = parameter.Name; System.String parameterType = parameter.DataType; sw.WriteLine(); sw.Write(indentStr + " + \", " + Capitalize(parameterName) + ": \" + " + BuildPropertyName(parameter.Name, interactionMessageName)); } if (hasParent) { sw.WriteLine(" + \")\";"); } sw.WriteLine(indentStr + "}"); indentLevel--; indentStr = GenerateIndentString(indentLevel); sw.WriteLine(indentStr + "}"); if (stream == null) { indentLevel--; indentStr = GenerateIndentString(indentLevel); sw.WriteLine(indentStr + "}"); sw.Flush(); sw.Close(); } } catch (System.IO.IOException ioe) { if (log.IsErrorEnabled) { log.Error("Error generating object instance interface: " + ioe); } } }
/// <summary> /// Creates a new instance. /// </summary> public HLAInteractionClassPropertiesInformation(HLAinteractionClass interactionClass, System.Reflection.MethodInfo method) { interactionInfo = interactionClass; methodInfo = method; }
/// <summary> /// Creates a new instance. /// </summary> public HLAInteractionClassPropertiesInformation(HLAinteractionClass interactionClass, System.Reflection.MethodInfo method) { interactionInfo = interactionClass; methodInfo = method; }
/// <summary> /// Creates a new instance. /// </summary> public HLAInteractionClassAttribute() { baseInfo = new HLAinteractionClass(); }