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);
        }
示例#3
0
        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);
        }