private static CodeMemberMethod CreateDeserializeCodeMemberMethod(TypeInfo messageBaseClass, Message message) { string readerParamName = "reader"; string messageVariableName = "message"; string ns = "MavLink4Net.Messages.Common"; TypeInfo typeInfo = TypeInfoHelper.GetTypeInfo(ns, message); CodeMemberMethod codeMemberMethod = new CodeMemberMethod(); codeMemberMethod.Attributes = MemberAttributes.Public | MemberAttributes.Final; codeMemberMethod.Name = "Deserialize"; codeMemberMethod.ReturnType = new CodeTypeReference(messageBaseClass.FullName); codeMemberMethod.Parameters.Add(new CodeParameterDeclarationExpression(typeof(BinaryReader), readerParamName)); CodeTypeReference classTypeReference = new CodeTypeReference(typeInfo.FullName); codeMemberMethod.Statements.Add(new CodeVariableDeclarationStatement( classTypeReference, messageVariableName, new CodeObjectCreateExpression(classTypeReference))); AddReadPropertyStatements(codeMemberMethod, message, readerParamName, messageVariableName, ns); codeMemberMethod.Statements.Add(new CodeMethodReturnStatement(new CodeVariableReferenceExpression(messageVariableName))); return(codeMemberMethod); }
private static CodeMemberMethod CreateSerializeCodeMemberMethod(TypeInfo messageBaseClass, Message message, string messagesNamespace) { string writerParamName = "writer"; string messageParamName = "message"; CodeMemberMethod codeMemberMethod = new CodeMemberMethod(); codeMemberMethod.Attributes = MemberAttributes.Public | MemberAttributes.Final; codeMemberMethod.Name = "Serialize"; codeMemberMethod.Parameters.Add(new CodeParameterDeclarationExpression(typeof(BinaryWriter), writerParamName)); codeMemberMethod.Parameters.Add(new CodeParameterDeclarationExpression(messageBaseClass.FullName, messageParamName)); string messageVariableName = "tMessage"; TypeInfo messageTypeInfo = TypeInfoHelper.GetTypeInfo(messagesNamespace, message); codeMemberMethod.Statements.Add(new CodeVariableDeclarationStatement( new CodeTypeReference(messageTypeInfo.FullName), messageVariableName, new CodeSnippetExpression($"{messageParamName} as {messageTypeInfo.FullName}"))); AddWritePropertyStatements(codeMemberMethod, message, writerParamName, messageVariableName); return(codeMemberMethod); }
private static void GenerateMessageClassFile(MessageGenerationParams pParams, MessageDefinitions.Data.Message message, CodeGeneratorOptions options, CodeDomProvider codeProvider, IDictionary <MessageDefinitions.Data.Enum, TypeInfo> enumTypeInfoByName) { TypeInfo typeInfo = TypeInfoHelper.GetTypeInfo(pParams.Namespace, message); string filename = TypeInfoHelper.GetFilename(typeInfo); String filePath = Path.Combine(pParams.OutputPath, filename); CodeCompileUnit unit = MessageGeneratorHelper.CreateCodeCompileUnit(typeInfo, message, pParams.BaseClassTypeInfo, pParams.MessageTypeEnumTypeInfo, enumTypeInfoByName); codeProvider.GenerateCodeFromCompileUnit(unit, options, filePath); }