using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using WCS.Entity.Protocol.BCR;
using WCS.Entity.Protocol.RGV;
using WCS.Entity.Protocol.Robot;
using WCS.Entity.Protocol.SRM;
using WCS.Entity.Protocol.Station;
using WCS.Entity.Protocol.Truss;
namespace WCS.Entity.Protocol.DataStructure
{
///
/// 设备数据包
///
[DataContract]
public class DeviceDataPack
{
[DataMember(Order = 0)] public ProtocolData[] BCR80 { get; set; }
[DataMember(Order = 1)] public ProtocolData[] BCR81 { get; set; }
[DataMember(Order = 2)] public ProtocolData[] BCR83 { get; set; }
[DataMember(Order = 3)] public ProtocolData[] RGV520 { get; set; }
[DataMember(Order = 4)] public ProtocolData[] RGV521 { get; set; }
[DataMember(Order = 5)] public ProtocolData[] Robot520 { get; set; }
[DataMember(Order = 6)] public ProtocolData[] Robot521 { get; set; }
[DataMember(Order = 7)] public ProtocolData[] Robot522 { get; set; }
[DataMember(Order = 8)] public ProtocolData[] Robot530 { get; set; }
[DataMember(Order = 9)] public ProtocolData[] Robot531 { get; set; }
[DataMember(Order = 10)] public ProtocolData[] SRM520 { get; set; }
[DataMember(Order = 11)] public ProtocolData[] SRM521 { get; set; }
[DataMember(Order = 12)] public ProtocolData[] SRM523 { get; set; }
[DataMember(Order = 13)] public ProtocolData[] Station520 { get; set; }
[DataMember(Order = 14)] public ProtocolData[] Station521 { get; set; }
[DataMember(Order = 15)] public ProtocolData[] Station523 { get; set; }
[DataMember(Order = 16)] public ProtocolData[] Station524 { get; set; }
[DataMember(Order = 17)] public ProtocolData[] Station525 { get; set; }
[DataMember(Order = 18)] public ProtocolData[] Station90 { get; set; }
[DataMember(Order = 19)] public ProtocolData[] Station91 { get; set; }
[DataMember(Order = 20)] public ProtocolData[] Truss520 { get; set; }
[DataMember(Order = 21)] public ProtocolData[] Truss521 { get; set; }
[DataMember(Order = 22)] public ProtocolData[] Truss523 { get; set; }
[DataMember(Order = 23)] public ProtocolData[] Truss530 { get; set; }
[DataMember(Order = 24)] public ProtocolData[] Truss531 { get; set; }
///
/// 时间
///
[DataMember(Order = 25)]
public DateTime Frame { get; set; }
///
/// 回放最早时间
///
[DataMember(Order = 26)]
public int PlaybackSeconds { get; set; }
[DataMember(Order = 27)] public ProtocolData[] RGV523 { get; set; }
[DataMember(Order = 28)] public ProtocolData[] Station222 { get; set; }
[DataMember(Order = 29)] public ProtocolData[] Station5 { get; set; }
public Dictionary GetDeviceData()
{
var list = new List>();
foreach (var p in GetType().GetProperties())
if (p.PropertyType.IsArray)
{
var arr = p.GetValue(this) as Array;
foreach (var a in arr)
{
var code = a.GetType().GetProperty("Code").GetValue(a).ToString();
//var data = a.GetType().GetProperty("Data").GetValue(a);
list.Add(new Tuple(code, a as ProtocolData));
}
}
var res = list.GroupBy(v => v.Item1).ToDictionary(v => v.Key, v => v.Select(d => d.Item2).ToArray());
return res;
}
}
[DataContract]
public class ProtocolData
{
[DataMember(Order = 0)] public string Code { get; set; }
[DataMember(Order = 1)] public DateTime Frame { get; set; }
}
[DataContract]
public class ProtocolData : ProtocolData
{
[DataMember(Order = 2)] public T Data { get; set; }
}
}