public void NewValueTestMethod() { ProducerBindingFactory _pr = new ProducerBindingFactory(); Assert.IsNotNull(_pr); IProducerBinding _bn = _pr.GetProducerBinding("ProducerBinding", "variableName", new UATypeInfo(BuiltInType.String)); Assert.IsNotNull(_bn); int _changeCounter = 0; _bn.PropertyChanged += (x, y) => _changeCounter++; Assert.IsFalse(_bn.NewValue); Assert.AreEqual <int>(0, _changeCounter); _pr.Modify("654321"); Assert.IsTrue(_bn.NewValue); Assert.AreEqual <int>(1, _changeCounter); string _testValue = "1231221431423421"; _pr.Modify(_testValue); Assert.IsTrue(_bn.NewValue); Assert.AreEqual <int>(1, _changeCounter); Assert.AreEqual <string>(_testValue, (string)_bn.GetFromRepository()); Assert.IsFalse(_bn.NewValue); Assert.AreEqual <int>(1, _changeCounter); Assert.AreEqual <string>(_testValue, (string)_bn.GetFromRepository()); Assert.IsFalse(_bn.NewValue); _pr.Modify(_testValue); Assert.IsFalse(_bn.NewValue); Assert.AreEqual <int>(1, _changeCounter); _testValue = "987654321"; _pr.Modify(_testValue); Assert.IsTrue(_bn.NewValue); Assert.AreEqual <int>(2, _changeCounter); Assert.AreEqual <string>(_testValue, (string)_bn.GetFromRepository()); }
private void WriteValueVariant(IProducerBinding producerBinding) { object value = producerBinding.GetFromRepository(); Variant _variant = new Variant(producerBinding.Encoding, value); m_UAEncoder.Write(this, _variant); }
/// <summary> /// Gets the consumer binding for data member. /// </summary> /// <param name="member">The field description captured bu object of type <see cref="FieldMetaData"/> .</param> /// <param name="repositoryGroup">The repository group.</param> /// <param name="bindingFactory">The binding factory.</param> /// <param name="encodingFactory">The encoding factory.</param> /// <returns>An instance of <see cref="IProducerBinding" /> type.</returns> internal static IProducerBinding GetProducerBinding4DataMember(this FieldMetaData member, string repositoryGroup, IBindingFactory bindingFactory, IEncodingFactory encodingFactory) { IProducerBinding _binding = bindingFactory.GetProducerBinding(repositoryGroup, member.ProcessValueName, member.TypeInformation); encodingFactory.UpdateValueConverter(_binding, repositoryGroup, member.TypeInformation); return(_binding); }
public void CorrectInitializationTestMethod() { ProducerBindingFactory _pr = new ProducerBindingFactory(); Assert.IsNotNull(_pr); IProducerBinding _bn = _pr.GetProducerBinding("ProducerBindingMonitoredValue", "variableName", new UATypeInfo(BuiltInType.String)); Assert.IsNotNull(_bn); Assert.IsFalse(_bn.NewValue); _pr.Modify("654321"); Assert.IsTrue(_bn.NewValue); _bn.GetFromRepository(); Assert.IsFalse(_bn.NewValue); int _changeCounter = 0; _bn.PropertyChanged += (x, y) => _changeCounter++; Assert.AreEqual <int>(0, _changeCounter); _pr.Modify("1234567"); Assert.IsTrue(_bn.NewValue); Assert.AreEqual <int>(1, _changeCounter); _bn.GetFromRepository(); _pr.Modify("654321"); _pr.Modify("1234567"); Assert.AreEqual <int>(2, _changeCounter); }
public void CreatorTestMethod1() { ProducerBindingFactory _pr = new ProducerBindingFactory(); Assert.IsNotNull(_pr); IProducerBinding _bn = _pr.GetProducerBinding("ProducerBinding", "variableName", new UATypeInfo(BuiltInType.String)); Assert.IsNotNull(_bn); }
public void GetProducerBindingTypesMismatchTest() { BoilersSetFixture _boiler = new BoilersSetFixture(); using (DataGenerator _generator = new DataGenerator(_boiler)) { IBindingFactory _bindingFactory = _generator; IProducerBinding _binding = _bindingFactory.GetProducerBinding("repositoryGroup", "processValueName", new UATypeInfo(BuiltInType.Int16)); } }
public void GetNewValueTestMethod() { ProducerBindingFactory _pr = new ProducerBindingFactory(); Assert.IsNotNull(_pr); IProducerBinding _bn = _pr.GetProducerBinding("ProducerBinding", "variableName", new UATypeInfo(BuiltInType.String)); Assert.IsNotNull(_bn); string _testValue = "1231221431423421"; _pr.Modify(_testValue); Assert.IsTrue(_bn.NewValue); Assert.AreEqual <string>(_testValue, (string)_bn.GetFromRepository()); Assert.IsFalse(_bn.NewValue); }
/// <summary> /// Initializes a new instance of the <see cref="ProducerAssociation"/> class. /// </summary> /// <param name="data">The semantic data description.</param> /// <param name="aliasName">Name of the alias - .</param> /// <param name="dataSet">The data set configuration.</param> /// <param name="bindingFactory">The binding factory.</param> /// <param name="encodingFactory">The encoding factory.</param> internal ProducerAssociation(ISemanticData data, string aliasName, DataSetConfiguration dataSet, IBindingFactory bindingFactory, IEncodingFactory encodingFactory) : base(data, dataSet.AssociationName) { m_ConfigurationVersion = dataSet.ConfigurationVersion; m_DataSetBindings = dataSet.DataSet.Select <FieldMetaData, IProducerBinding> ((_fieldMetadata) => { IProducerBinding _ret = _fieldMetadata.GetProducerBinding4DataMember(dataSet.RepositoryGroup, bindingFactory, encodingFactory); _ret.PropertyChanged += ProducerBinding_PropertyChanged; return(_ret); }).ToArray <IProducerBinding>(); m_Timer = new Timer(1000) { AutoReset = true }; m_Timer.Elapsed += M_Timer_Elapsed; m_Timer.Start(); }
/// <summary> /// Sends the data described by a data set collection to remote destination. /// </summary> /// <param name="producerBinding">Encapsulates functionality used by the <see cref="IMessageWriter" /> to collect all the data (data set items) required to prepare new message and send it over the network.</param> /// <param name="length">Number of items to be send used to calculate the length of the message.</param> /// <param name="contentMask">The content mask represented as unsigned number <see cref="UInt64" />. The order of the bits starting from the least significant /// bit matches the order of the data items within the data set.</param> /// <param name="encoding">The encoding.</param> /// <param name="dataSelector">The data selector.</param> /// <param name="messageSequenceNumber">The message sequence number. A monotonically increasing sequence number assigned by the publisher to each message sent.</param> /// <param name="timeStamp">The time stamp - the time the Data was collected.</param> /// <param name="configurationVersion">The configuration version.</param> /// <exception cref="System.ArgumentOutOfRangeException">Impossible to convert null value /// or</exception> void IMessageWriter.Send (Func <int, IProducerBinding> producerBinding, ushort length, ulong contentMask, FieldEncodingEnum encoding, DataSelector dataSelector, ushort messageSequenceNumber, DateTime timeStamp, ConfigurationVersionDataType configurationVersion) { lock (this) { if (State.State != HandlerState.Operational) { return; } ContentMask = contentMask; CreateMessage(encoding, dataSelector.PublisherId, dataSelector.DataSetWriterId, length, messageSequenceNumber, timeStamp, configurationVersion); //UInt64 _mask = 0x1; for (int i = 0; i < length; i++) { //TODO: Implement ContentMask https://github.com/mpostol/OPC-UA-OOI/issues/89 //if ((ContentMask & _mask) > 0) //{ IProducerBinding _pb = producerBinding(i); switch (encoding) { case FieldEncodingEnum.VariantFieldEncoding: WriteValueVariant(_pb); break; case FieldEncodingEnum.CompressedFieldEncoding: WriteValue(_pb); break; case FieldEncodingEnum.DataValueFieldEncoding: WriteDataValue(_pb); break; } //} //_mask = _mask << 1; } SendMessage(); } }
public void GetProducerBindingTest() { BoilersSetFixture _boiler = new BoilersSetFixture(); using (DataGenerator _generator = new DataGenerator(_boiler)) { IBindingFactory _bindingFactory = _generator; IProducerBinding _binding = _bindingFactory.GetProducerBinding("repositoryGroup", "processValueName", new UATypeInfo(BuiltInType.Boolean)); Assert.IsNotNull(_binding); _binding.Encoding.IsEqual(new UATypeInfo(BuiltInType.Boolean)); Assert.IsFalse(_binding.NewValue); Assert.IsNull(_binding.Parameter); int _newValueInvocationCount = 0; _binding.PropertyChanged += (x, evetArgs) => _newValueInvocationCount++; _boiler.Variable.Change(); Assert.AreEqual <int>(1, _newValueInvocationCount); Assert.IsTrue(_binding.NewValue); Assert.IsTrue((bool)_binding.GetFromRepository()); Assert.IsFalse(_binding.NewValue); Assert.AreEqual <int>(1, _newValueInvocationCount); } Assert.AreEqual <int>(1, _boiler.DisposeCount); }
private void WriteDataValue(IProducerBinding _pb) { throw new NotImplementedException(); }
private void WriteDataValue(IProducerBinding _pb) { throw new NotImplementedException(); }
private void WriteValue(IProducerBinding producerBinding) { object value = producerBinding.GetFromRepository(); switch (producerBinding.Encoding.BuiltInType) { case BuiltInType.Boolean: if (producerBinding.Encoding.ValueRank < 0) { Write((bool)value); } else { m_UAEncoder.WriteArray <bool>(this, (Array)value, Write, BuiltInType.Boolean); } break; case BuiltInType.SByte: if (producerBinding.Encoding.ValueRank < 0) { Write((sbyte)value); } else { m_UAEncoder.WriteArray <sbyte>(this, (Array)value, Write, BuiltInType.SByte); } break; case BuiltInType.Byte: if (producerBinding.Encoding.ValueRank < 0) { Write((byte)value); } else { m_UAEncoder.WriteArray <byte>(this, (Array)value, Write, BuiltInType.Byte); } break; case BuiltInType.DateTime: if (producerBinding.Encoding.ValueRank < 0) { m_UAEncoder.Write(this, (DateTime)value); } else { m_UAEncoder.WriteArray <DateTime>(this, (Array)value, Write, BuiltInType.DateTime); } break; case BuiltInType.Double: if (producerBinding.Encoding.ValueRank < 0) { Write((double)value); } else { m_UAEncoder.WriteArray <double>(this, (Array)value, Write, BuiltInType.Double); } break; case BuiltInType.Int16: if (producerBinding.Encoding.ValueRank < 0) { Write((short)value); } else { m_UAEncoder.WriteArray <short>(this, (Array)value, Write, BuiltInType.Int16); } break; case BuiltInType.Enumeration: case BuiltInType.Int32: if (producerBinding.Encoding.ValueRank < 0) { Write((int)value); } else { m_UAEncoder.WriteArray <int>(this, (Array)value, Write, BuiltInType.Int32); } break; case BuiltInType.Int64: if (producerBinding.Encoding.ValueRank < 0) { Write((long)value); } else { m_UAEncoder.WriteArray <long>(this, (Array)value, Write, BuiltInType.Int64); } break; case BuiltInType.Float: if (producerBinding.Encoding.ValueRank < 0) { Write((float)value); } else { m_UAEncoder.WriteArray <float>(this, (Array)value, Write, BuiltInType.Float); } break; case BuiltInType.String: if (producerBinding.Encoding.ValueRank < 0) { m_UAEncoder.Write(this, (string)value); } else { m_UAEncoder.WriteArray <string>(this, (Array)value, x => m_UAEncoder.Write(this, x), BuiltInType.String); } break; case BuiltInType.UInt16: if (producerBinding.Encoding.ValueRank < 0) { Write((ushort)value); } else { m_UAEncoder.WriteArray <ushort>(this, (Array)value, Write, BuiltInType.UInt16); } break; case BuiltInType.UInt32: if (producerBinding.Encoding.ValueRank < 0) { Write((uint)value); } else { m_UAEncoder.WriteArray <uint>(this, (Array)value, Write, BuiltInType.UInt32); } break; case BuiltInType.UInt64: if (producerBinding.Encoding.ValueRank < 0) { Write((ulong)value); } else { m_UAEncoder.WriteArray <ulong>(this, (Array)value, Write, BuiltInType.UInt64); } break; case BuiltInType.Guid: if (producerBinding.Encoding.ValueRank < 0) { m_UAEncoder.Write(this, (Guid)value); } else { m_UAEncoder.WriteArray <Guid>(this, (Array)value, x => m_UAEncoder.Write(this, x), BuiltInType.Guid); } break; case BuiltInType.ByteString: if (producerBinding.Encoding.ValueRank < 0) { m_UAEncoder.Write(this, (byte[])value); } else { m_UAEncoder.WriteArray <byte[]>(this, (Array)value, x => m_UAEncoder.Write(this, x), BuiltInType.ByteString); } break; case BuiltInType.XmlElement: if (producerBinding.Encoding.ValueRank < 0) { m_UAEncoder.Write(this, (XmlElement)value); } else { m_UAEncoder.WriteArray <XmlElement>(this, (Array)value, x => m_UAEncoder.Write(this, x), BuiltInType.XmlElement); } break; case BuiltInType.NodeId: if (producerBinding.Encoding.ValueRank < 0) { m_UAEncoder.Write(this, (INodeId)value); } else { m_UAEncoder.WriteArray <INodeId>(this, (Array)value, x => m_UAEncoder.Write(this, x), BuiltInType.NodeId); } break; case BuiltInType.ExpandedNodeId: if (producerBinding.Encoding.ValueRank < 0) { m_UAEncoder.Write(this, (IExpandedNodeId)value); } else { m_UAEncoder.WriteArray <IExpandedNodeId>(this, (Array)value, x => m_UAEncoder.Write(this, x), BuiltInType.ExpandedNodeId); } break; case BuiltInType.StatusCode: if (producerBinding.Encoding.ValueRank < 0) { m_UAEncoder.Write(this, (IStatusCode)value); } else { m_UAEncoder.WriteArray <IStatusCode>(this, (Array)value, x => m_UAEncoder.Write(this, x), BuiltInType.StatusCode); } break; case BuiltInType.QualifiedName: if (producerBinding.Encoding.ValueRank < 0) { m_UAEncoder.Write(this, (IQualifiedName)value); } else { m_UAEncoder.WriteArray <IQualifiedName>(this, (Array)value, x => m_UAEncoder.Write(this, x), BuiltInType.QualifiedName); } break; case BuiltInType.LocalizedText: if (producerBinding.Encoding.ValueRank < 0) { m_UAEncoder.Write(this, (ILocalizedText)value); } else { m_UAEncoder.WriteArray <ILocalizedText>(this, (Array)value, x => m_UAEncoder.Write(this, x), BuiltInType.LocalizedText); } break; case BuiltInType.ExtensionObject: if (producerBinding.Encoding.ValueRank < 0) { m_UAEncoder.Write(this, (IExtensionObject)value); } else { m_UAEncoder.WriteArray <IExtensionObject>(this, (Array)value, x => m_UAEncoder.Write(this, x), BuiltInType.ExtensionObject); } break; case BuiltInType.DataValue: if (producerBinding.Encoding.ValueRank < 0) { m_UAEncoder.Write(this, (IDataValue)value); } else { m_UAEncoder.WriteArray <IDataValue>(this, (Array)value, x => m_UAEncoder.Write(this, x), BuiltInType.DataValue); } break; case BuiltInType.Variant: if (producerBinding.Encoding.ValueRank < 0) { m_UAEncoder.Write(this, (IVariant)value); } else { m_UAEncoder.WriteArray <IVariant>(this, (Array)value, x => m_UAEncoder.Write(this, x), BuiltInType.Variant); } break; case BuiltInType.DiagnosticInfo: if (producerBinding.Encoding.ValueRank < 0) { m_UAEncoder.Write(this, (IDiagnosticInfo)value); } else { m_UAEncoder.WriteArray <IDiagnosticInfo>(this, (Array)value, x => m_UAEncoder.Write(this, x), BuiltInType.DiagnosticInfo); } break; case BuiltInType.Null: default: throw new ArgumentOutOfRangeException($"Impossible to convert {value} of type {producerBinding.Encoding}"); } }
private void WriteValue(IProducerBinding producerBinding) { object value = producerBinding.GetFromRepository(); switch (producerBinding.Encoding.BuiltInType) { case BuiltInType.Boolean: if (producerBinding.Encoding.ValueRank < 0) Write((Boolean)value); else m_UAEncoder.WriteArray<Boolean>(this, (Array)value, Write, BuiltInType.Boolean); break; case BuiltInType.SByte: if (producerBinding.Encoding.ValueRank < 0) Write((SByte)value); else m_UAEncoder.WriteArray<SByte>(this, (Array)value, Write, BuiltInType.SByte); break; case BuiltInType.Byte: if (producerBinding.Encoding.ValueRank < 0) Write((Byte)value); else m_UAEncoder.WriteArray<Byte>(this, (Array)value, Write, BuiltInType.Byte); break; case BuiltInType.DateTime: if (producerBinding.Encoding.ValueRank < 0) m_UAEncoder.Write(this, (DateTime)value); else m_UAEncoder.WriteArray<DateTime>(this, (Array)value, Write, BuiltInType.DateTime); break; case BuiltInType.Double: if (producerBinding.Encoding.ValueRank < 0) Write((Double)value); else m_UAEncoder.WriteArray<Double>(this, (Array)value, Write, BuiltInType.Double); break; case BuiltInType.Int16: if (producerBinding.Encoding.ValueRank < 0) Write((Int16)value); else m_UAEncoder.WriteArray<Int16>(this, (Array)value, Write, BuiltInType.Int16); break; case BuiltInType.Enumeration: case BuiltInType.Int32: if (producerBinding.Encoding.ValueRank < 0) Write((Int32)value); else m_UAEncoder.WriteArray<Int32>(this, (Array)value, Write, BuiltInType.Int32); break; case BuiltInType.Int64: if (producerBinding.Encoding.ValueRank < 0) Write((Int64)value); else m_UAEncoder.WriteArray<Int64>(this, (Array)value, Write, BuiltInType.Int64); break; case BuiltInType.Float: if (producerBinding.Encoding.ValueRank < 0) Write((Single)value); else m_UAEncoder.WriteArray<Single>(this, (Array)value, Write, BuiltInType.Float); break; case BuiltInType.String: if (producerBinding.Encoding.ValueRank < 0) m_UAEncoder.Write(this, (String)value); else m_UAEncoder.WriteArray<String>(this, (Array)value, x => m_UAEncoder.Write(this, x), BuiltInType.String); break; case BuiltInType.UInt16: if (producerBinding.Encoding.ValueRank < 0) Write((UInt16)value); else m_UAEncoder.WriteArray<UInt16>(this, (Array)value, Write, BuiltInType.UInt16); break; case BuiltInType.UInt32: if (producerBinding.Encoding.ValueRank < 0) Write((UInt32)value); else m_UAEncoder.WriteArray<UInt32>(this, (Array)value, Write, BuiltInType.UInt32); break; case BuiltInType.UInt64: if (producerBinding.Encoding.ValueRank < 0) Write((UInt64)value); else m_UAEncoder.WriteArray<UInt64>(this, (Array)value, Write, BuiltInType.UInt64); break; case BuiltInType.Guid: if (producerBinding.Encoding.ValueRank < 0) m_UAEncoder.Write(this, (Guid)value); else m_UAEncoder.WriteArray<Guid>(this, (Array)value, x => m_UAEncoder.Write(this, x), BuiltInType.Guid); break; case BuiltInType.ByteString: if (producerBinding.Encoding.ValueRank < 0) m_UAEncoder.Write(this, (byte[])value); else m_UAEncoder.WriteArray<byte[]>(this, (Array)value, x => m_UAEncoder.Write(this, x), BuiltInType.ByteString); break; case BuiltInType.XmlElement: if (producerBinding.Encoding.ValueRank < 0) m_UAEncoder.Write(this, (XmlElement)value); else m_UAEncoder.WriteArray<XmlElement>(this, (Array)value, x => m_UAEncoder.Write(this, x), BuiltInType.XmlElement); break; case BuiltInType.NodeId: if (producerBinding.Encoding.ValueRank < 0) m_UAEncoder.Write(this, (INodeId)value); else m_UAEncoder.WriteArray<INodeId>(this, (Array)value, x => m_UAEncoder.Write(this, x), BuiltInType.NodeId); break; case BuiltInType.ExpandedNodeId: if (producerBinding.Encoding.ValueRank < 0) m_UAEncoder.Write(this, (IExpandedNodeId)value); else m_UAEncoder.WriteArray<IExpandedNodeId>(this, (Array)value, x => m_UAEncoder.Write(this, x), BuiltInType.ExpandedNodeId); break; case BuiltInType.StatusCode: if (producerBinding.Encoding.ValueRank < 0) m_UAEncoder.Write(this, (IStatusCode)value); else m_UAEncoder.WriteArray<IStatusCode>(this, (Array)value, x => m_UAEncoder.Write(this, x), BuiltInType.StatusCode); break; case BuiltInType.QualifiedName: if (producerBinding.Encoding.ValueRank < 0) m_UAEncoder.Write(this, (IQualifiedName)value); else m_UAEncoder.WriteArray<IQualifiedName>(this, (Array)value, x => m_UAEncoder.Write(this, x), BuiltInType.QualifiedName); break; case BuiltInType.LocalizedText: if (producerBinding.Encoding.ValueRank < 0) m_UAEncoder.Write(this, (ILocalizedText)value); else m_UAEncoder.WriteArray<ILocalizedText>(this, (Array)value, x => m_UAEncoder.Write(this, x), BuiltInType.LocalizedText); break; case BuiltInType.ExtensionObject: if (producerBinding.Encoding.ValueRank < 0) m_UAEncoder.Write(this, (IExtensionObject)value); else m_UAEncoder.WriteArray<IExtensionObject>(this, (Array)value, x => m_UAEncoder.Write(this, x), BuiltInType.ExtensionObject); break; case BuiltInType.DataValue: if (producerBinding.Encoding.ValueRank < 0) m_UAEncoder.Write(this, (IDataValue)value); else m_UAEncoder.WriteArray<IDataValue>(this, (Array)value, x => m_UAEncoder.Write(this, x), BuiltInType.DataValue); break; case BuiltInType.Variant: if (producerBinding.Encoding.ValueRank < 0) m_UAEncoder.Write(this, (IVariant)value); else m_UAEncoder.WriteArray<IVariant>(this, (Array)value, x => m_UAEncoder.Write(this, x), BuiltInType.Variant); break; case BuiltInType.DiagnosticInfo: if (producerBinding.Encoding.ValueRank < 0) m_UAEncoder.Write(this, (IDiagnosticInfo)value); else m_UAEncoder.WriteArray<IDiagnosticInfo>(this, (Array)value, x => m_UAEncoder.Write(this, x), BuiltInType.DiagnosticInfo); break; case BuiltInType.Null: default: throw new ArgumentOutOfRangeException($"Impossible to convert {value} of type {producerBinding.Encoding}"); } }
private void WriteValueVariant(IProducerBinding producerBinding) { object value = producerBinding.GetFromRepository(); Variant _variant = new Variant(producerBinding.Encoding, value); m_UAEncoder.Write(this, _variant); }
/// <summary> /// Gets the producer binding. /// </summary> /// <param name="repositoryGroup">The repository group.</param> /// <param name="processValueName">The name of a variable that is the source of the values forwarded by a message over the network. /// Must be unique in the context of the group named by <paramref name="repositoryGroup" /></param> /// <param name="fieldTypeInfo">The <see cref="T:UAOOI.Configuration.Networking.Serialization.BuiltInType" />of the message field encoding.</param> /// <returns>IProducerBinding.</returns> /// <exception cref="System.ArgumentNullException">repositoryGroup</exception> /// <exception cref="System.ArgumentOutOfRangeException">encoding</exception> IProducerBinding IBindingFactory.GetProducerBinding(string repositoryGroup, string processValueName, UATypeInfo fieldTypeInfo) { string _name = CreateKey(repositoryGroup, processValueName); m_TraceSource.TraceData(TraceEventType.Information, 60, $"Starting {nameof(IBindingFactory.GetProducerBinding)} for the process variable {_name}"); IProducerBinding _return = null; switch (fieldTypeInfo.BuiltInType) { case BuiltInType.Boolean: _return = AddBinding <Boolean>(_name, fieldTypeInfo); break; case BuiltInType.SByte: _return = AddBinding <SByte>(_name, fieldTypeInfo); break; case BuiltInType.Byte: _return = AddBinding <Byte>(_name, fieldTypeInfo); break; case BuiltInType.Int16: _return = AddBinding <Int16>(_name, fieldTypeInfo); break; case BuiltInType.UInt16: _return = AddBinding <UInt16>(_name, fieldTypeInfo); break; case BuiltInType.Int32: _return = AddBinding <Int32>(_name, fieldTypeInfo); break; case BuiltInType.UInt32: _return = AddBinding <UInt32>(_name, fieldTypeInfo); break; case BuiltInType.Int64: _return = AddBinding <Int64>(_name, fieldTypeInfo); break; case BuiltInType.UInt64: _return = AddBinding <UInt64>(_name, fieldTypeInfo); break; case BuiltInType.Float: _return = AddBinding <float>(_name, fieldTypeInfo); break; case BuiltInType.Double: _return = AddBinding <Double>(_name, fieldTypeInfo); break; case BuiltInType.String: _return = AddBinding <String>(_name, fieldTypeInfo); break; case BuiltInType.DateTime: _return = AddBinding <DateTime>(_name, fieldTypeInfo); break; case BuiltInType.Guid: _return = AddBinding <Guid>(_name, fieldTypeInfo); break; case BuiltInType.ByteString: _return = AddBinding <byte[]>(_name, fieldTypeInfo); break; case BuiltInType.Null: case BuiltInType.XmlElement: case BuiltInType.NodeId: case BuiltInType.ExpandedNodeId: case BuiltInType.StatusCode: case BuiltInType.QualifiedName: case BuiltInType.LocalizedText: case BuiltInType.ExtensionObject: case BuiltInType.DataValue: case BuiltInType.Variant: case BuiltInType.DiagnosticInfo: case BuiltInType.Enumeration: default: { m_TraceSource.TraceData(TraceEventType.Error, 60, $"Cannot get binding for {_name}"); throw new ArgumentOutOfRangeException($"{_name}"); } } m_TraceSource.TraceData(TraceEventType.Information, 60, $"Created binding for the process variable {_name}"); return(_return); }
/// <summary> /// Gets the producer binding. /// </summary> /// <param name="repositoryGroup">The repository group.</param> /// <param name="variableName">Name of the variable.</param> /// <param name="encoding">The encoding.</param> /// <returns>IProducerBinding.</returns> /// <exception cref="System.ArgumentNullException">repositoryGroup</exception> /// <exception cref="System.ArgumentOutOfRangeException">variableName</exception> /// <exception cref="System.NotImplementedException"></exception> IProducerBinding IBindingFactory.GetProducerBinding(string repositoryGroup, string processValueName, UATypeInfo fieldTypeInfo) { if (repositoryGroup != m_RepositoryGroup) { throw new ArgumentNullException("repositoryGroup"); } string _name = $"{ repositoryGroup}.{ processValueName}"; IProducerBinding _return = null; if (m_NodesDictionary.ContainsKey(processValueName)) { _return = m_NodesDictionary[processValueName]; } else { switch (fieldTypeInfo.BuiltInType) { case BuiltInType.Boolean: _return = fieldTypeInfo.ValueRank < 0 ? AddBinding <Boolean>(_name, Inc, false, fieldTypeInfo) : AddBinding <Boolean[]>(_name, x => Inc(y => (y & 1) == 0, x.Length), new bool[] { false }, fieldTypeInfo); break; case BuiltInType.SByte: _return = fieldTypeInfo.ValueRank < 0 ? AddBinding <SByte>(_name, Inc, sbyte.MinValue, fieldTypeInfo) : AddBinding <sbyte[]>(_name, x => Inc(y => (sbyte)y, x.Length), new sbyte[] { sbyte.MinValue }, fieldTypeInfo); break; case BuiltInType.Byte: _return = fieldTypeInfo.ValueRank < 0 ? AddBinding <Byte>(_name, Inc, Byte.MinValue, fieldTypeInfo) : AddBinding <Byte[]>(_name, x => Inc(y => (Byte)y, x.Length), new Byte[] { Byte.MinValue }, fieldTypeInfo); break; case BuiltInType.Int16: _return = fieldTypeInfo.ValueRank < 0 ? AddBinding <Int16>(_name, Inc, Int16.MinValue, fieldTypeInfo) : AddBinding <Int16[]>(_name, x => Inc(y => (Int16)y, x.Length), new Int16[] { Int16.MinValue }, fieldTypeInfo); break; case BuiltInType.UInt16: _return = fieldTypeInfo.ValueRank < 0 ? AddBinding <UInt16>(_name, Inc, UInt16.MinValue, fieldTypeInfo) : AddBinding <UInt16[]>(_name, x => Inc(y => (UInt16)y, x.Length), new UInt16[] { UInt16.MinValue }, fieldTypeInfo); break; case BuiltInType.Int32: _return = fieldTypeInfo.ValueRank < 0 ? AddBinding <Int32>(_name, Inc, Int32.MinValue, fieldTypeInfo) : AddBinding <Int32[]>(_name, x => Inc(y => (Int32)y, x.Length), new Int32[] { Int32.MinValue }, fieldTypeInfo); break; case BuiltInType.UInt32: _return = fieldTypeInfo.ValueRank < 0 ? AddBinding <UInt32>(_name, Inc, UInt32.MinValue, fieldTypeInfo) : AddBinding <UInt32[]>(_name, x => Inc(y => (UInt32)y, x.Length), new UInt32[] { UInt32.MinValue }, fieldTypeInfo); break; case BuiltInType.Int64: _return = fieldTypeInfo.ValueRank < 0 ? AddBinding <Int64>(_name, Inc, Int64.MinValue, fieldTypeInfo) : AddBinding <Int64[]>(_name, x => Inc(y => (Int64)y, x.Length), new Int64[] { 0 }, fieldTypeInfo); break; case BuiltInType.UInt64: _return = fieldTypeInfo.ValueRank < 0 ? AddBinding <UInt64>(_name, Inc, UInt64.MinValue, fieldTypeInfo) : AddBinding <UInt64[]>(_name, x => Inc(y => (UInt64)y, x.Length), new UInt64[] { 0 }, fieldTypeInfo); break; case BuiltInType.Float: _return = fieldTypeInfo.ValueRank < 0 ? AddBinding <float>(_name, Inc, -10.12345678f, fieldTypeInfo) : AddBinding <float[]>(_name, x => Inc(y => (float)y, x.Length), new float[] { -10.12345678f }, fieldTypeInfo); break; case BuiltInType.Double: _return = fieldTypeInfo.ValueRank < 0 ? AddBinding <Double>(_name, Inc, -10.12345678, fieldTypeInfo) : AddBinding <Double[]>(_name, x => Inc(y => (Double)y, x.Length), new Double[] { 0 }, fieldTypeInfo); break; case BuiltInType.String: _return = fieldTypeInfo.ValueRank < 0 ? AddBinding <String>(_name, Inc, String.Empty, fieldTypeInfo) : AddBinding <String[]>(_name, x => Inc(y => $"#{y}", x.Length), new String[] { }, fieldTypeInfo); break; case BuiltInType.DateTime: _return = fieldTypeInfo.ValueRank < 0 ? AddBinding <DateTime>(_name, Inc, DateTime.Now, fieldTypeInfo) : AddBinding <DateTime[]>(_name, x => Inc(y => DateTime.Now, x.Length), new DateTime[] { }, fieldTypeInfo); break; case BuiltInType.Guid: _return = fieldTypeInfo.ValueRank < 0 ? AddBinding <Guid>(_name, Inc, Guid.NewGuid(), fieldTypeInfo) : AddBinding <Guid[]>(_name, x => Inc(y => Guid.NewGuid(), x.Length), new Guid[] { }, fieldTypeInfo); break; case BuiltInType.ByteString: _return = fieldTypeInfo.ValueRank < 0 ? AddBinding <byte[]>(_name, Inc, new byte[] { 0 }, fieldTypeInfo) : AddBinding <byte[][]>(_name, x => Inc(y => new byte[] { 0, 1, 2, 3, 4 }, x.Length), new byte[][] { new byte[] { } }, fieldTypeInfo); break; case BuiltInType.Null: case BuiltInType.XmlElement: case BuiltInType.NodeId: case BuiltInType.ExpandedNodeId: case BuiltInType.StatusCode: case BuiltInType.QualifiedName: case BuiltInType.LocalizedText: case BuiltInType.ExtensionObject: case BuiltInType.DataValue: case BuiltInType.Variant: case BuiltInType.DiagnosticInfo: case BuiltInType.Enumeration: default: throw new ArgumentOutOfRangeException("encoding"); } } return(_return); }