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