internal static CodeMemberProperty CreateSignalEventProperty(IDLSignal idlSignal) { CodeTypeReference typerefEvent = new CodeTypeReference(typeof(System.EventHandler <>)); typerefEvent.TypeArguments.Add(new CodeTypeReference(CodeBuilderCommon.GetSignalEventTypeName(idlSignal.Name))); CodeMemberProperty propEventSignal = new CodeMemberProperty(); propEventSignal.Name = CodeBuilderCommon.GetSignalEventPropertyName(idlSignal.Name); propEventSignal.Type = typerefEvent; return(propEventSignal); }
internal static CodeMemberEvent CreateSignalEvent(IDLSignal idlSignal) { string eventPropertyName = CodeBuilderCommon.GetSignalEventName(idlSignal.Name); CodeMemberEvent eventSignal = new CodeMemberEvent(); eventSignal.Attributes = MemberAttributes.Private; eventSignal.Name = CodeBuilderCommon.GetSignalEventName(idlSignal.Name); CodeTypeReference typerefEvent = new CodeTypeReference(typeof(System.EventHandler <>)); typerefEvent.TypeArguments.Add(new CodeTypeReference(CodeBuilderCommon.GetSignalEventTypeName(idlSignal.Name))); eventSignal.Type = typerefEvent; return(eventSignal); }
override protected void PostHandleSignal(IDLInterface idlIntf, IDLSignal idlSignal, CodeCompileUnit unit, CodeNamespace ns, CodeTypeDeclaration typeInterface) { CodeMemberProperty propEventSignal = CodeBuilderCommon.CreateSignalEventProperty(idlSignal); typeInterface.Members.Add(propEventSignal); propEventSignal.HasGet = true; propEventSignal.HasSet = true; // * public class <signal_as_type>Args : EventArgs this.typeSignalArgs.Name = CodeBuilderCommon.GetSignalEventTypeName(idlSignal.Name); this.typeSignalArgs.CustomAttributes.Add(CodeBuilderCommon.attribDataContract); ns.Types.Add(this.typeSignalArgs); // Prepare for next signal. this.typeSignalArgs = new CodeTypeDeclaration(CodeBuilderCommon.GetSignalEventTypeName(idlSignal.Name)); this.constructorSignalArgs = new CodeConstructor(); this.InitFields(); }
protected abstract void PostHandleSignal(IDLInterface idlIntf, IDLSignal idlSignal, CodeCompileUnit unit, CodeNamespace ns, CodeTypeDeclaration typeInterface);
protected virtual ParamCodeTypeFactory HandleSignalArgument(IDLInterface idlIntf, IDLSignal idlSignal, IDLSignalArgument idlSignalArg) { // Parse the type string for the argument, creating required structs as we go, and returning a type for the argument. Udbus.Parsing.IDLArgumentTypeNameBuilderBase nameBuilder = new IDLSignalArgumentTypeNameBuilder(idlIntf, idlSignal); ParamCodeTypeFactory paramtypeHolder = this.CreateParamCodeTypeFactoryForMethod("in"); Udbus.Parsing.BuildContext context = new Udbus.Parsing.BuildContext(declarationHolder); Udbus.Parsing.CodeBuilderHelper.BuildCodeParamType(paramtypeHolder, nameBuilder, idlSignalArg.Type, context); // Arguments return(paramtypeHolder); }
protected override ParamCodeTypeFactory HandleSignalArgument(IDLInterface idlIntf, IDLSignal idlSignal, IDLSignalArgument idlSignalArg) { ParamCodeTypeFactory signalArg = base.HandleSignalArgument(idlIntf, idlSignal, idlSignalArg); CodeTypeReference typerefArg = signalArg.paramtype.CodeType; string[] components = CodeBuilderCommon.GetSignalComponents(idlSignalArg.Name); string first = components[0]; components = Array.ConvertAll <string, string>(components, System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase); components[0] = first; string argFieldName = string.Join("", components); CodeFieldReferenceExpression fieldrefArg = new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), argFieldName); CodeMemberField fieldArg = new CodeMemberField(typerefArg, argFieldName); fieldArg.CustomAttributes.Add(CodeBuilderCommon.attribDataMember); this.typeSignalArgs.Members.Add(fieldArg); CodeMemberProperty propArgField = new CodeMemberProperty(); propArgField.Attributes = MemberAttributes.Public | MemberAttributes.Final; propArgField.Type = typerefArg; propArgField.Name = argFieldName[0].ToString().ToUpper() + argFieldName.Substring(1); propArgField.GetStatements.Add(new CodeMethodReturnStatement(fieldrefArg)); this.typeSignalArgs.Members.Add(propArgField); this.constructorSignalArgs.Parameters.Add(new CodeParameterDeclarationExpression(typerefArg, argFieldName)); // * this.<signal_arg> = <signal_arg>; this.constructorSignalArgs.Statements.Add(new CodeAssignStatement(fieldrefArg, new CodeArgumentReferenceExpression(argFieldName))); return(signalArg); }
override protected void PostHandleSignal(IDLInterface idlIntf, IDLSignal idlSignal, CodeCompileUnit unit, CodeNamespace ns, CodeTypeDeclaration typeInterface) { string nsName, intf; int lastDot = idlIntf.Name.LastIndexOf('.'); intf = idlIntf.Name.Substring(lastDot + 1); nsName = CodeBuilderCommon.GetNamespace(idlIntf.Name, new InterfaceVisitor()); CodeFieldReferenceExpression fieldrefCallback = new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), CodeBuilderCommon.callback); CodeFieldReferenceExpression fieldrefTarget = new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), CodeBuilderCommon.targetName); CodeNamespace nsClient = this.GetClientNamespace(unit, idlIntf.Name); CodeNamespace nsClientTypes = nsClient; if (this.typedeclCallbackInterface == null) // If no callback interface yet { CodeTypeReference typerefInterface = new CodeTypeReference(typeInterface.Name); // Declare callback interface and hold onto it in field. // * public interface I<interface>Callback // * { string nsWCFName, intfWCF; nsWCFName = CodeBuilderCommon.GetNamespace(idlIntf.Name, this.visitorType); intfWCF = CodeBuilderCommon.GetName(idlIntf.Name, null); string callbackInterfaceName = CodeBuilderCommon.GetSignalCallbackInterfaceName(intfWCF); typedeclCallbackInterface = new CodeTypeDeclaration(callbackInterfaceName); typedeclCallbackInterface.Attributes = MemberAttributes.Public; typedeclCallbackInterface.IsInterface = true; ns.Types.Add(typedeclCallbackInterface); // * class <interface>CallbackClient : I<interface>Callback string wcfCallbackClientName = CodeBuilderCommon.GetSignalCompilableName(intfWCF) + "CallbackClient"; CodeTypeReference typerefCallbackInterface = new CodeTypeReference(typedeclCallbackInterface.Name); CodeAttributeDeclaration attribdeclServiceContract = new CodeAttributeDeclaration(CodeBuilderCommon.typerefServiceContract, new CodeAttributeArgument("CallbackContract", new CodeTypeOfExpression(typerefCallbackInterface)) ); typeInterface.CustomAttributes.Add(attribdeclServiceContract); //string scopedCallbackInterfaceName = CodeBuilderCommon.GetScopedName(nsWCFName, proxyInterfaceName); //typedeclCallbackClient = new CodeTypeDeclaration(CodeBuilderCommon.GetSignalCallbackName(intf)); typedeclCallbackClient = new CodeTypeDeclaration(wcfCallbackClientName); CodeTypeReference typerefWCFCallbackInterface = new CodeTypeReference(typedeclCallbackInterface.Name); typedeclCallbackClient.BaseTypes.Add(typerefWCFCallbackInterface); nsClientTypes.Types.Add(typedeclCallbackClient); // * public class <interface>Proxy : Udbus.WCF.Client.CallbackProxy< <wcf_contracts.interface>, <interface>CallbackClient > this.typedeclProxy = new CodeTypeDeclaration(CodeBuilderCommon.GetSignalProxyName(intfWCF)); CodeTypeReference typerefCallbackProxy = new CodeTypeReference(typeof(Udbus.WCF.Client.CallbackProxy <,>)); CodeTypeReference typerefCallbackClient = new CodeTypeReference(typedeclCallbackClient.Name); typerefCallbackProxy.TypeArguments.Add(typerefInterface); typerefCallbackProxy.TypeArguments.Add(typerefCallbackClient); this.typedeclProxy.BaseTypes.Add(typerefCallbackProxy); AddProxyConstructors(this.typedeclProxy); nsClientTypes.Types.Add(this.typedeclProxy); } // Ends if no callback interface yet // Add signal property to Proxy. CodeMemberProperty propProxySignal = CodeBuilderCommon.CreateSignalEventProperty(idlSignal); propProxySignal.Attributes = MemberAttributes.Public | MemberAttributes.Final; CodePropertyReferenceExpression proprefProxyInterface = new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), "ProxyInterface"); CodePropertyReferenceExpression proprefProxyCallback = new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), "Callback"); CodePropertyReferenceExpression proprefProxyCallbackEvent = new CodePropertyReferenceExpression(proprefProxyCallback, propProxySignal.Name); propProxySignal.GetStatements.Add(new CodeMethodReturnStatement(proprefProxyCallbackEvent)); propProxySignal.SetStatements.Add(new CodeConditionStatement(new CodeBinaryOperatorExpression(proprefProxyCallbackEvent, CodeBinaryOperatorType.IdentityEquality, new CodePrimitiveExpression(null)) , new CodeExpressionStatement(new CodeMethodInvokeExpression(proprefProxyInterface, CodeBuilderCommon.GetSignalRegisterFunction(idlSignal.Name))) )); propProxySignal.SetStatements.Add(new CodeAssignStatement(proprefProxyCallbackEvent, new CodePropertySetValueReferenceExpression())); this.typedeclProxy.Members.Add(propProxySignal); // Add callback method to callback interface. // * [System.ServiceModel.OperationContract(IsOneWay=true)] // * void On<signal>(<interface_ns>.<signal>Args args); CodeMemberMethod methodOnSignal = new CodeMemberMethod(); methodOnSignal.Name = CodeBuilderCommon.GetSignalCallbackMethodName(idlSignal.Name); string signalArgsTypeName = CodeBuilderCommon.GetSignalEventTypeName(idlSignal.Name); string scopedSignalArgsTypeName = CodeBuilderCommon.GetScopedName(nsName, signalArgsTypeName); CodeParameterDeclarationExpression paramdeclSignalArgs = new CodeParameterDeclarationExpression(scopedSignalArgsTypeName, CodeBuilderCommon.SignalArgsName); methodOnSignal.Parameters.Add(paramdeclSignalArgs); methodOnSignal.CustomAttributes.Add(CodeBuilderCommon.attribOperationContractOneWay); typedeclCallbackInterface.Members.Add(methodOnSignal); // Add registration method to wcf interface. // * [System.ServiceModel.OperationContract] // * void RegisterForStorageSpaceLow(); CodeMemberMethod methodRegister = new CodeMemberMethod(); methodRegister.Name = CodeBuilderCommon.GetSignalRegisterFunction(idlSignal.Name); methodRegister.CustomAttributes.Add(CodeBuilderCommon.attribOperationContract); typeInterface.Members.Add(methodRegister); // Add event to callback client implementation. // * private event System.EventHandler< <signal>Args > <signal>Event; CodeMemberEvent eventSignal = CodeBuilderCommon.CreateSignalEvent(idlSignal); typedeclCallbackClient.Members.Add(eventSignal); // * public virtual System.EventHandler< <signal>Args > <signal> // * { // * get { return this.<signal>Event; } // * set { this.<signal>Event = value; } // * } CodeMemberProperty propSignal = CodeBuilderCommon.CreateSignalEventProperty(idlSignal); propSignal.Attributes = MemberAttributes.Public | MemberAttributes.Final; CodeEventReferenceExpression eventrefSignal = new CodeEventReferenceExpression(new CodeThisReferenceExpression(), eventSignal.Name); propSignal.GetStatements.Add(new CodeMethodReturnStatement(eventrefSignal)); propSignal.SetStatements.Add(new CodeAssignStatement(eventrefSignal, new CodePropertySetValueReferenceExpression())); typedeclCallbackClient.Members.Add(propSignal); // * public void On<signal>(<ns>.<signal>Args args) // * { // * if (this.<signal> != null) // * { // * this.<signal>(this, args); // * } //} CodeMemberMethod methodSignal = new CodeMemberMethod(); methodSignal.Name = CodeBuilderCommon.GetSignalCallbackMethodName(idlSignal.Name); methodSignal.Attributes = MemberAttributes.Public; methodSignal.Parameters.Add(paramdeclSignalArgs); CodePropertyReferenceExpression proprefSignal = new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), propSignal.Name); methodSignal.Statements.Add(new CodeConditionStatement(new CodeBinaryOperatorExpression(eventrefSignal, CodeBinaryOperatorType.IdentityInequality, new CodePrimitiveExpression(null)) , new CodeExpressionStatement(new CodeMethodInvokeExpression(new CodeThisReferenceExpression(), eventrefSignal.EventName, new CodeThisReferenceExpression(), new CodeArgumentReferenceExpression(paramdeclSignalArgs.Name))) )); typedeclCallbackClient.Members.Add(methodSignal); }
protected override void PostHandleSignal(IDLInterface idlIntf, IDLSignal idlSignal, CodeCompileUnit unit, CodeNamespace ns, CodeTypeDeclaration typeInterface) { string nsName, intf; int lastDot = idlIntf.Name.LastIndexOf('.'); intf = idlIntf.Name.Substring(lastDot + 1); nsName = CodeBuilderCommon.GetNamespace(idlIntf.Name, new InterfaceVisitor()); CodeFieldReferenceExpression fieldrefCallback = new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), CodeBuilderCommon.callback); CodeFieldReferenceExpression fieldrefTarget = new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), CodeBuilderCommon.targetName); CodeNamespace nsClient = this.GetClientNamespace(unit, idlIntf.Name); CodeNamespace nsClientTypes = nsClient; if (this.typedeclCallbackInterface == null) // If no callback interface yet { CodeTypeReference typerefInterface = new CodeTypeReference(typeInterface.Name); // Declare callback interface and hold onto it in field. // * public interface I<interface>Callback // * { string nsWCFName, intfWCF; nsWCFName = CodeBuilderCommon.GetNamespace(idlIntf.Name, this.visitorType); intfWCF = CodeBuilderCommon.GetName(idlIntf.Name, null); string callbackInterfaceName = CodeBuilderCommon.GetSignalCallbackInterfaceName(intfWCF); typedeclCallbackInterface = new CodeTypeDeclaration(callbackInterfaceName); typedeclCallbackInterface.Attributes = MemberAttributes.Public; typedeclCallbackInterface.IsInterface = true; ns.Types.Add(typedeclCallbackInterface); // * class <interface>CallbackClient : I<interface>Callback string wcfCallbackClientName = CodeBuilderCommon.GetSignalCompilableName(intfWCF) + "CallbackClient"; CodeTypeReference typerefCallbackInterface = new CodeTypeReference(typedeclCallbackInterface.Name); CodeAttributeDeclaration attribdeclServiceContract = new CodeAttributeDeclaration(CodeBuilderCommon.typerefServiceContract, new CodeAttributeArgument("CallbackContract", new CodeTypeOfExpression(typerefCallbackInterface)) ); typeInterface.CustomAttributes.Add(attribdeclServiceContract); //string scopedCallbackInterfaceName = CodeBuilderCommon.GetScopedName(nsWCFName, proxyInterfaceName); //typedeclCallbackClient = new CodeTypeDeclaration(CodeBuilderCommon.GetSignalCallbackName(intf)); typedeclCallbackClient = new CodeTypeDeclaration(wcfCallbackClientName); CodeTypeReference typerefWCFCallbackInterface = new CodeTypeReference(typedeclCallbackInterface.Name); typedeclCallbackClient.BaseTypes.Add(typerefWCFCallbackInterface); nsClientTypes.Types.Add(typedeclCallbackClient); // * public class <interface>Proxy : Udbus.WCF.Client.CallbackProxy< <wcf_contracts.interface>, <interface>CallbackClient > this.typedeclProxy = new CodeTypeDeclaration(CodeBuilderCommon.GetSignalProxyName(intfWCF)); CodeTypeReference typerefCallbackProxy = new CodeTypeReference(typeof(Udbus.WCF.Client.CallbackProxy<,>)); CodeTypeReference typerefCallbackClient = new CodeTypeReference(typedeclCallbackClient.Name); typerefCallbackProxy.TypeArguments.Add(typerefInterface); typerefCallbackProxy.TypeArguments.Add(typerefCallbackClient); this.typedeclProxy.BaseTypes.Add(typerefCallbackProxy); AddProxyConstructors(this.typedeclProxy); nsClientTypes.Types.Add(this.typedeclProxy); } // Ends if no callback interface yet // Add signal property to Proxy. CodeMemberProperty propProxySignal = CodeBuilderCommon.CreateSignalEventProperty(idlSignal); propProxySignal.Attributes = MemberAttributes.Public | MemberAttributes.Final; CodePropertyReferenceExpression proprefProxyInterface = new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), "ProxyInterface"); CodePropertyReferenceExpression proprefProxyCallback = new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), "Callback"); CodePropertyReferenceExpression proprefProxyCallbackEvent = new CodePropertyReferenceExpression(proprefProxyCallback, propProxySignal.Name); propProxySignal.GetStatements.Add(new CodeMethodReturnStatement(proprefProxyCallbackEvent)); propProxySignal.SetStatements.Add(new CodeConditionStatement(new CodeBinaryOperatorExpression(proprefProxyCallbackEvent, CodeBinaryOperatorType.IdentityEquality, new CodePrimitiveExpression(null)) , new CodeExpressionStatement(new CodeMethodInvokeExpression(proprefProxyInterface, CodeBuilderCommon.GetSignalRegisterFunction(idlSignal.Name))) )); propProxySignal.SetStatements.Add(new CodeAssignStatement(proprefProxyCallbackEvent, new CodePropertySetValueReferenceExpression())); this.typedeclProxy.Members.Add(propProxySignal); // Add callback method to callback interface. // * [System.ServiceModel.OperationContract(IsOneWay=true)] // * void On<signal>(<interface_ns>.<signal>Args args); CodeMemberMethod methodOnSignal = new CodeMemberMethod(); methodOnSignal.Name = CodeBuilderCommon.GetSignalCallbackMethodName(idlSignal.Name); string signalArgsTypeName = CodeBuilderCommon.GetSignalEventTypeName(idlSignal.Name); string scopedSignalArgsTypeName = CodeBuilderCommon.GetScopedName(nsName, signalArgsTypeName); CodeParameterDeclarationExpression paramdeclSignalArgs = new CodeParameterDeclarationExpression(scopedSignalArgsTypeName, CodeBuilderCommon.SignalArgsName); methodOnSignal.Parameters.Add(paramdeclSignalArgs); methodOnSignal.CustomAttributes.Add(CodeBuilderCommon.attribOperationContractOneWay); typedeclCallbackInterface.Members.Add(methodOnSignal); // Add registration method to wcf interface. // * [System.ServiceModel.OperationContract] // * void RegisterForStorageSpaceLow(); CodeMemberMethod methodRegister = new CodeMemberMethod(); methodRegister.Name = CodeBuilderCommon.GetSignalRegisterFunction(idlSignal.Name); methodRegister.CustomAttributes.Add(CodeBuilderCommon.attribOperationContract); typeInterface.Members.Add(methodRegister); // Add event to callback client implementation. // * private event System.EventHandler< <signal>Args > <signal>Event; CodeMemberEvent eventSignal = CodeBuilderCommon.CreateSignalEvent(idlSignal); typedeclCallbackClient.Members.Add(eventSignal); // * public virtual System.EventHandler< <signal>Args > <signal> // * { // * get { return this.<signal>Event; } // * set { this.<signal>Event = value; } // * } CodeMemberProperty propSignal = CodeBuilderCommon.CreateSignalEventProperty(idlSignal); propSignal.Attributes = MemberAttributes.Public | MemberAttributes.Final; CodeEventReferenceExpression eventrefSignal = new CodeEventReferenceExpression(new CodeThisReferenceExpression(), eventSignal.Name); propSignal.GetStatements.Add(new CodeMethodReturnStatement(eventrefSignal)); propSignal.SetStatements.Add(new CodeAssignStatement(eventrefSignal, new CodePropertySetValueReferenceExpression())); typedeclCallbackClient.Members.Add(propSignal); // * public void On<signal>(<ns>.<signal>Args args) // * { // * if (this.<signal> != null) // * { // * this.<signal>(this, args); // * } //} CodeMemberMethod methodSignal = new CodeMemberMethod(); methodSignal.Name = CodeBuilderCommon.GetSignalCallbackMethodName(idlSignal.Name); methodSignal.Attributes = MemberAttributes.Public; methodSignal.Parameters.Add(paramdeclSignalArgs); CodePropertyReferenceExpression proprefSignal = new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), propSignal.Name); methodSignal.Statements.Add(new CodeConditionStatement(new CodeBinaryOperatorExpression(eventrefSignal, CodeBinaryOperatorType.IdentityInequality, new CodePrimitiveExpression(null)) , new CodeExpressionStatement(new CodeMethodInvokeExpression(new CodeThisReferenceExpression(), eventrefSignal.EventName, new CodeThisReferenceExpression(), new CodeArgumentReferenceExpression(paramdeclSignalArgs.Name))) )); typedeclCallbackClient.Members.Add(methodSignal); }
protected virtual ParamCodeTypeFactory HandleSignalArgument(IDLInterface idlIntf, IDLSignal idlSignal, IDLSignalArgument idlSignalArg) { // Parse the type string for the argument, creating required structs as we go, and returning a type for the argument. Udbus.Parsing.IDLArgumentTypeNameBuilderBase nameBuilder = new IDLSignalArgumentTypeNameBuilder(idlIntf, idlSignal); ParamCodeTypeFactory paramtypeHolder = this.CreateParamCodeTypeFactoryForMethod("in"); Udbus.Parsing.BuildContext context = new Udbus.Parsing.BuildContext(declarationHolder); Udbus.Parsing.CodeBuilderHelper.BuildCodeParamType(paramtypeHolder, nameBuilder, idlSignalArg.Type, context); // Arguments return paramtypeHolder; }
public IDLSignalArgumentTypeNameBuilder(IDLInterface intf, IDLSignal signal) { this.intf = intf; this.signal = signal; }
static public CodeMemberMethod MakeSignal(CodeNamespace ns, CodeTypeDeclaration typeMarshal, CodeTypeFactory codetypefactoryOut, Udbus.Parsing.CodeMemberDeferredClassHolder declarationHolder, IDLInterface idlIntf, IDLSignal idlSignal, MarshalBuilderHelper codebuilder) { string signalMethodName = "Handle" + CodeBuilderCommon.GetSignalTypeName(idlSignal.Name); //// * public class <signal_as_type>Args : EventArgs CodeTypeDeclaration typeArgs = new CodeTypeDeclaration(CodeBuilderCommon.GetSignalEventTypeName(idlSignal.Name)); //typeArgs.BaseTypes.Add(typerefSignalEventArgs); // * const string StorageSpaceLowMatchRule = "type=\'signal\',interface=\'<interface>\',member=\'<signal>'"; CodeMemberField fieldMatchRule = new CodeMemberField(typeof(string), CodeBuilderCommon.GetSignalCompilableName(idlSignal.Name) + "MatchRule"); fieldMatchRule.InitExpression = new CodePrimitiveExpression(string.Format("type='signal',interface='{0}',member='{1}'", idlIntf.Name, idlSignal.Name)); fieldMatchRule.Attributes = MemberAttributes.Private | MemberAttributes.Const; typeMarshal.Members.Add(fieldMatchRule); CodeFieldReferenceExpression fieldrefMatchrule = new CodeFieldReferenceExpression(null, fieldMatchRule.Name); // * private Udbus.Core.SignalKey StorageSpaceLowSignalKey { get { return new Udbus.Core.SignalKey(this.ConnectionParameters.Path, this.ConnectionParameters.Interface, "storage_space_low"); } } // * private Udbus.Core.SignalEntry StorageSpaceLowSignalEntry { get { return new Udbus.Core.SignalEntry(this.StorageSpaceLowSignalKey, this.HandleStorageSpaceLow); } } CodeMethodReferenceExpression methodrefSignal = new CodeMethodReferenceExpression(new CodeThisReferenceExpression(), signalMethodName); CodeMemberProperty propSignalKey = new CodeMemberProperty(); propSignalKey.Name = CodeBuilderCommon.GetSignalCompilableName(idlSignal.Name) + "Key"; propSignalKey.Type = typerefSignalKey; propSignalKey.Attributes = MemberAttributes.Private | MemberAttributes.Final; propSignalKey.GetStatements.Add(new CodeMethodReturnStatement(new CodeObjectCreateExpression(typerefSignalKey , proprefConnectionParametersPath, proprefConnectionParametersInterface, new CodePrimitiveExpression(idlSignal.Name) ))); CodeMemberProperty propSignalEntry = new CodeMemberProperty(); propSignalEntry.Name = CodeBuilderCommon.GetSignalCompilableName(idlSignal.Name) + "Entry"; propSignalEntry.Type = typerefSignalEntry; propSignalEntry.Attributes = MemberAttributes.Private | MemberAttributes.Final; propSignalEntry.GetStatements.Add(new CodeMethodReturnStatement(new CodeObjectCreateExpression(typerefSignalEntry , new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), propSignalKey.Name) , methodrefSignal ))); typeMarshal.Members.Add(propSignalKey); typeMarshal.Members.Add(propSignalEntry); // * public virtual void RegisterForStorageSpaceLow() // * { // * this.RegisterForSignal(StorageSpaceLowMatchRule, this.StorageSpaceLowSignalEntry, this.RegisterSignalHandlers); // * } CodeMemberMethod methodRegisterForSpecificSignal = new CodeMemberMethod(); methodRegisterForSpecificSignal.Name = CodeBuilderCommon.GetSignalRegisterFunction(idlSignal.Name); methodRegisterForSpecificSignal.Statements.Add(new CodeMethodInvokeExpression(new CodeThisReferenceExpression(), RegisterForSignal , fieldrefMatchrule , new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), propSignalEntry.Name) , new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), proprefRegisterSignalHandlers.PropertyName) )); typeMarshal.Members.Add(methodRegisterForSpecificSignal); CodeMemberEvent eventSignal = CodeBuilderCommon.CreateSignalEvent(idlSignal); CodeVariableReferenceExpression varrefSignalHandler = new CodeVariableReferenceExpression("signalHandler"); CodeEventReferenceExpression eventrefSignalHandlerSignal = new CodeEventReferenceExpression(varrefSignalHandler, eventSignal.Name); CodeMethodInvokeExpression invokeGetSignalHandler = new CodeMethodInvokeExpression(new CodeThisReferenceExpression(), GetSignalHandler); CodeTypeReference typerefMarshal = new CodeTypeReference(typeMarshal.Name); CodeMemberProperty propEventSignal = new CodeMemberProperty(); propEventSignal.Name = CodeBuilderCommon.GetSignalEventPropertyName(idlSignal.Name); propEventSignal.Attributes = MemberAttributes.Public | MemberAttributes.Final; propEventSignal.Type = eventSignal.Type; // * return this.GetSignalHandler().storageSpaceLowEvent; propEventSignal.GetStatements.Add(new CodeMethodReturnStatement(new CodeEventReferenceExpression(invokeGetSignalHandler, eventSignal.Name))); // * <service> signalHandler = this.GetSignalHandler(); propEventSignal.SetStatements.Add(new CodeVariableDeclarationStatement(typerefMarshal, varrefSignalHandler.VariableName, invokeGetSignalHandler)); // * if (signalHandler.<signal>Event == null) propEventSignal.SetStatements.Add(new CodeConditionStatement(new CodeBinaryOperatorExpression(eventrefSignalHandlerSignal, CodeBinaryOperatorType.IdentityEquality, new CodePrimitiveExpression(null)) // * signalHandler.RegisterFor<signal>(); , new CodeExpressionStatement(new CodeMethodInvokeExpression(varrefSignalHandler, methodRegisterForSpecificSignal.Name)) )); // * signalHandler.<signal>Event = value; propEventSignal.SetStatements.Add( new CodeAssignStatement(eventrefSignalHandlerSignal, new CodePropertySetValueReferenceExpression()) ); // * private event System.EventHandler< <signal>Args > <signal>Event { ... } // * public System.EventHandler< <signal>Args > <signal>; typeMarshal.Members.Add(eventSignal); typeMarshal.Members.Add(propEventSignal); // * public event System.EventHandler< <signal>Args > <signal>; //string eventPropertyName = CodeBuilderCommon.GetSignalEventName(idlSignal.Name); //CodeMemberEvent eventSignal = new CodeMemberEvent(); //eventSignal.Attributes = MemberAttributes.Public; //eventSignal.Name = CodeBuilderCommon.GetSignalEventName(idlSignal.Name); //CodeTypeReference typerefEvent = new CodeTypeReference(typeof(System.EventHandler<>)); //typerefEvent.TypeArguments.Add(new CodeTypeReference(CodeBuilderCommon.GetSignalEventTypeName(idlSignal.Name))); //eventSignal.Type = typerefEvent; //typeMarshal.Members.Add(eventSignal); //// * public void RegisterFor<signal_compilable>() //// * { //// * this.AddMatchInternal("type='signal',interface='<interface>',member='<signal>'"); //// * } //CodeMemberMethod methodRegister = new CodeMemberMethod(); //methodRegister.Attributes = MemberAttributes.Public; //methodRegister.Name = GetSignalRegisterFunctionName(idlSignal.Name); //methodRegister.Statements.Add( // new CodeMethodInvokeExpression(new CodeThisReferenceExpression(), AddMatchInternal.Name // ,new CodePrimitiveExpression(string.Format( // "type='signal',interface='{0}',member='{1}'", idlIntf.Name, idlSignal.Name // )) // ) //); //typeMarshal.Members.Add(methodRegister); //CodeMemberMethod methodRegisterWithInterface = new CodeMemberMethod(); //methodRegisterWithInterface.Attributes = MemberAttributes.Public; //methodRegisterWithInterface.Name = methodRegister.Name; //methodRegisterWithInterface.Parameters.Add(new CodeParameterDeclarationExpression(typerefIRegisterSignalHandlers, register)); //methodRegisterWithInterface.Statements.Add(new CodeMethodInvokeExpression(new CodeThisReferenceExpression(), methodRegister.Name)); //// * new Udbus.Core.SignalEntry(new Udbus.Core.SignalKey(this.ConnectionParameters.Path, this.ConnectionParameters.Interface, "storage_space_low") //methodRegisterWithInterface.Statements.Add(new CodeMethodInvokeExpression(argrefRegister, AddSignalHandler // , new CodeObjectCreateExpression(typerefSignalEntry // , new CodeObjectCreateExpression(typerefSignalKey // , MarshalBuilderHelper.proprefThisConnectionParametersPath // , MarshalBuilderHelper.proprefThisConnectionParametersInterface // , new CodePrimitiveExpression(idlSignal.Name) // ) // , methodrefSignal // ) //)); //typeMarshal.Members.Add(methodRegisterWithInterface); // * Handle<signal>(<signal>Args args) CodeMemberMethod method = new CodeMemberMethod(); CodeComment commentMethod = new CodeComment(idlSignal.Name); method.Comments.Add(new CodeCommentStatement(idlSignal.Name)); method.Name = signalMethodName; method.Attributes = MemberAttributes.Public; method.Parameters.Add(MarshalBuilderHelper.paramdeclMessageResponse); foreach (IDLSignalArgument idlSignalArg in idlSignal.Arguments) { method.Comments.Add(new CodeCommentStatement(string.Format(" {0} \"{1}\"", idlSignalArg.Name, idlSignalArg.Type))); } // Context used for all arguments in method. Udbus.Parsing.BuildContext context = new Udbus.Parsing.BuildContext(declarationHolder); MakeSignalParameters(typeArgs, codetypefactoryOut, declarationHolder, idlIntf, method.Name, idlSignal.Name, idlSignal.Arguments, method.Parameters, method.Statements, context, codebuilder ); //ns.Types.Add(typeArgs); return method; }
static public CodeMemberMethod MakeSignal(CodeNamespace ns, CodeTypeDeclaration typeMarshal, CodeTypeFactory codetypefactoryOut, Udbus.Parsing.CodeMemberDeferredClassHolder declarationHolder, IDLInterface idlIntf, IDLSignal idlMethod) { return MakeSignal(ns, typeMarshal, codetypefactoryOut, declarationHolder, idlIntf, idlMethod, new MarshalBuilderHelperSignal()); }