public int[] SetDataTypes(int[] serverHandles, short[] dataTypes)
{
TraceState("SetDataTypes", serverHandles.Length);
ThrowIfDisposed();
lock (m_lock)
{
int[] results = new int[serverHandles.Length];
ComDaGroupItem[] items = new ComDaGroupItem[serverHandles.Length];
for (int ii = 0; ii < serverHandles.Length; ii++)
{
ComDaGroupItem item = null;
if (!m_itemsByHandle.TryGetValue(serverHandles[ii], out item))
{
results[ii] = ResultIds.E_INVALIDHANDLE;
continue;
}
// validate the datatype.
if (dataTypes[ii] != 0)
{
NodeId dataTypeId = ComUtils.GetDataTypeId(dataTypes[ii]);
if (NodeId.IsNull(dataTypeId))
{
results[ii] = ResultIds.E_BADTYPE;
continue;
}
bool reqTypeIsArray = (dataTypes[ii] & (short)VarEnum.VT_ARRAY) != 0;
bool actualTypeIsArray = (item.CanonicalDataType & (short)VarEnum.VT_ARRAY) != 0;
if (reqTypeIsArray != actualTypeIsArray)
{
results[ii] = ResultIds.E_BADTYPE;
continue;
}
}
item.RequestedDataType = dataTypes[ii];
results[ii] = ResultIds.S_OK;
}
return results;
}
}