ParsePush(Object[] data)
{
int index;
GXDLMSObject obj;
object value;
DataType dt;
List<KeyValuePair<GXDLMSObject, int>> items = new List<KeyValuePair<GXDLMSObject, int>>();
if (data != null)
{
GXDLMSConverter c = new GXDLMSConverter();
GXDLMSObjectCollection objects = new GXDLMSObjectCollection();
foreach (Object it in (Object[])data[0])
{
Object[] tmp = (Object[])it;
int classID = ((UInt16)(tmp[0])) & 0xFFFF;
if (classID > 0)
{
GXDLMSObject comp;
comp = this.Objects.FindByLN((ObjectType)classID, GXDLMSObject.ToLogicalName(tmp[1] as byte[]));
if (comp == null)
{
comp = GXDLMSClient.CreateDLMSObject(classID, 0, 0, tmp[1], null);
c.UpdateOBISCodeInformation(comp);
objects.Add(comp);
}
if ((comp is IGXDLMSBase))
{
items.Add(new KeyValuePair<GXDLMSObject, int>(comp, (sbyte)tmp[2]));
}
else
{
System.Diagnostics.Debug.WriteLine(string.Format("Unknown object : {0} {1}",
classID, GXDLMSObject.ToLogicalName((byte[])tmp[1])));
}
}
}
for (int pos = 0; pos < data.Length; ++pos)
{
obj = items[pos].Key as GXDLMSObject;
value = data[pos];
index = items[pos].Value;
if (value is byte[] && (dt = obj.GetUIDataType(index)) != DataType.None)
{
value = GXDLMSClient.ChangeType(value as byte[], dt);
}
ValueEventArgs e = new ValueEventArgs(Settings, obj, index, 0, null);
e.Value = value;
(obj as IGXDLMSBase).SetValue(Settings, e);
}
}
return items;
}
}