RealtimeProvider.cs 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Collections.ObjectModel;
  4. using System.Linq;
  5. using Aitex.Core.RT.Log;
  6. using MECF.Framework.Common.DataCenter;
  7. using OpenSEMI.ClientBase.ServiceProvider;
  8. namespace CyberX8_MainPages.Unity
  9. {
  10. public class RealtimeProvider : IProvider
  11. {
  12. //private static RealtimeProvider _Instance = null;
  13. //public static RealtimeProvider Instance
  14. //{
  15. // get
  16. // {
  17. // if (_Instance == null)
  18. // _Instance = new RealtimeProvider();
  19. // return _Instance;
  20. // }
  21. //}
  22. ObservableCollection<ParameterNode> _rootNode = new ObservableCollection<ParameterNode>();
  23. Dictionary<string, ParameterNode> _indexer = new Dictionary<string, ParameterNode>();
  24. public void Create()
  25. {
  26. }
  27. public ObservableCollection<ParameterNode> GetParameters()
  28. {
  29. try
  30. {
  31. List<string> dataList = (List<string>)QueryDataClient.Instance.Service.GetConfig("System.NumericDataList");
  32. dataList.Sort();
  33. List<string> removeList = _indexer.Keys.ToList();
  34. foreach (string dataName in dataList)
  35. {
  36. string[] nodeName = dataName.Split('.');
  37. ParameterNode parentNode = null;
  38. string pathName="";
  39. for (int i = 0; i < nodeName.Length; i++)
  40. {
  41. pathName = (i == 0) ? nodeName[i] : (pathName + "." + nodeName[i]);
  42. removeList.Remove(pathName);
  43. if (!_indexer.ContainsKey(pathName))
  44. {
  45. _indexer[pathName] = new ParameterNode() {Name = pathName, ChildNodes = new ObservableCollection<ParameterNode>(), ParentNode = parentNode};
  46. if (parentNode == null)
  47. {
  48. _rootNode.Add(_indexer[pathName]);
  49. }
  50. else
  51. {
  52. parentNode.ChildNodes.Add(_indexer[pathName]);
  53. }
  54. }
  55. parentNode = _indexer[pathName];
  56. removeList.Remove(pathName);
  57. }
  58. }
  59. foreach (var key in removeList)
  60. {
  61. if (_indexer[key].ParentNode == null)
  62. _rootNode.Remove(_indexer[key]);
  63. else
  64. {
  65. _indexer[key].ParentNode.ChildNodes.Remove(_indexer[key]);
  66. }
  67. }
  68. return _rootNode;
  69. }
  70. catch
  71. {
  72. }
  73. #region Test code
  74. ObservableCollection<ParameterNode> result = new ObservableCollection<ParameterNode>();
  75. ParameterNode node1 = new ParameterNode() { Name = "Para Node 1", Selected = false, ChildNodes = new ObservableCollection<ParameterNode>() };
  76. ParameterNode node2 = new ParameterNode() { Name = "Para Node 2", Selected = false, ChildNodes = new ObservableCollection<ParameterNode>() };
  77. ParameterNode node3 = new ParameterNode() { Name = "Para Node 3", Selected = false, ChildNodes = new ObservableCollection<ParameterNode>() };
  78. for (int i = 0; i < 5; i++)
  79. {
  80. ParameterNode node = new ParameterNode() { Name = node1.Name + "_" + i.ToString(), Selected = false, ChildNodes = new ObservableCollection<ParameterNode>() };
  81. node1.ChildNodes.Add(node);
  82. }
  83. for (int i = 0; i < 3; i++)
  84. {
  85. ParameterNode node = new ParameterNode() { Name = node2.Name + "_" + i.ToString(), Selected = false, ChildNodes = new ObservableCollection<ParameterNode>() };
  86. node2.ChildNodes.Add(node);
  87. }
  88. for (int i = 0; i < 4; i++)
  89. {
  90. ParameterNode node = new ParameterNode() { Name = node3.Name + "_" + i.ToString(), Selected = false, ChildNodes = new ObservableCollection<ParameterNode>() };
  91. node3.ChildNodes.Add(node);
  92. }
  93. result.Add(node1);
  94. result.Add(node2);
  95. result.Add(node3);
  96. return result;
  97. #endregion
  98. }
  99. }
  100. }