Opc.Ua.Com.Client.ComDaClientNodeManager.Write C# (CSharp) Method

Write() protected method

Validates the nodes and writes the value to the underlying system.
protected Write ( ServerSystemContext context, IList nodesToWrite, IList errors, List nodesToValidate, NodeState>.IDictionary cache ) : void
context Opc.Ua.Server.ServerSystemContext The context.
nodesToWrite IList The nodes to write.
errors IList The errors.
nodesToValidate List The nodes to validate.
cache NodeState>.IDictionary The cache.
return void
        protected override void Write(
            ServerSystemContext context,
            IList<WriteValue> nodesToWrite,
            IList<ServiceResult> errors,
            List<NodeHandle> nodesToValidate,
            IDictionary<NodeId, NodeState> cache)
        {
            ComDaClientManager system = (ComDaClientManager)this.SystemContext.SystemHandle;
            ComDaClient client = system.SelectClient((ServerSystemContext)SystemContext, false);

            WriteRequestCollection requests = new WriteRequestCollection();

            // validates the nodes and queues an write requests.
            for (int ii = 0; ii < nodesToValidate.Count; ii++)
            {
                NodeHandle handle = nodesToValidate[ii];

                lock (Lock)
                {
                    // validate node.
                    NodeState source = ValidateNode(context, handle, cache);

                    if (source == null)
                    {
                        continue;
                    }
                    
                    // determine if request can be sent to the server.
                    bool queued = false;
                    WriteValue nodeToWrite = nodesToWrite[handle.Index];
                    errors[handle.Index] = requests.Add(source, nodeToWrite, handle.Index, out queued);

                    if (queued)
                    {
                        continue;
                    }

                    // write the attribute value.
                    errors[handle.Index] = source.WriteAttribute(
                        context,
                        nodeToWrite.AttributeId,
                        nodeToWrite.ParsedIndexRange,
                        nodeToWrite.Value);

                    // updates to source finished - report changes to monitored items.
                    source.ClearChangeMasks(context, false);
                }
            }
            
            // write to the server.
            client.Write(requests);
            
            // get the results from the requests sent to the server.
            for (int ii = 0; ii < requests.Count; ii++)
            {
                WriteRequest request = requests[ii];
                errors[request.Index] = request.GetResult();
            }
        }
        #endregion