private static SingleReadResponse GetReadData(GXDLMSSettings settings, ValueEventArgs[] list, GXByteBuffer data)
{
object value;
bool first = true;
SingleReadResponse type = SingleReadResponse.Data;
foreach (ValueEventArgs e in list)
{
if (e.Handled)
{
value = e.Value;
}
else
{
//If action.
if (e.action)
{
value = ((IGXDLMSBase)e.Target).Invoke(settings, e);
}
else
{
value = (e.Target as IGXDLMSBase).GetValue(settings, e);
}
}
if (e.Error == 0)
{
if (!first && list.Length != 1)
{
data.SetUInt8(SingleReadResponse.Data);
}
//If action.
if (e.action)
{
GXCommon.SetData(settings, data, GXCommon.GetValueType(value), value);
}
else
{
GXDLMS.AppendData(settings, e.Target, e.Index, data, value);
}
}
else
{
if (!first && list.Length != 1)
{
data.SetUInt8(SingleReadResponse.DataAccessError);
}
data.SetUInt8(e.Error);
type = SingleReadResponse.DataAccessError;
}
first = false;
}
return type;
}
}