using NEIntelligentControl2.Models.Datas;
using NEIntelligentControl2.Models.Messages;
using NEIntelligentControl2.Service.Station;
using NEIntelligentControl2.Service.WebSocket;
using SVGViewer.Models.Info;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
namespace NEIntelligentControl2.Windows.BoostStation
{
///
/// 升压站二次图窗口
///
public partial class SubStationWindow : Window
{
///
/// 二次图id
///
private string _SubId;
private StationManager _StationManager;
private UrlManager _UrlManager;
private WEBHelper _WEBHelper;
private Dictionary> _TagInfos = new Dictionary>();
private string _Url;
private bool _IsLoaded;
private Dictionary _CustomizeShapes;
public SubStationWindow(string subid)
{
InitializeComponent();
_SubId = subid;
_StationManager = App.ServiceProvider.GetService(typeof(StationManager)) as StationManager;
_UrlManager = App.ServiceProvider.GetService(typeof(UrlManager)) as UrlManager;
_WEBHelper = App.ServiceProvider.GetService(typeof(WEBHelper)) as WEBHelper;
Init();
}
private async void Init()
{
if (string.IsNullOrWhiteSpace(_SubId)) return;
ShapeInfo si = await _StationManager.GetSubBoostStation(_SubId);
if (si == null) return;
_CustomizeShapes = _StationManager.GetCustomizeShapesDic();
_svg.InitInfo(si, _CustomizeShapes);
this.Title = si.Name;
var taginfos = si.GetAllTagInfos();
_TagInfos = taginfos.GroupBy(v => v.Tag).ToDictionary(v => v.Key, v => v.ToList());
var keys = string.Join(",", _TagInfos.Keys);
_Url = _UrlManager.DataServicePath + $"/ts/latest?keys={keys}";
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
_IsLoaded = true;
Task.Factory.StartNew(RefreshData);
}
private async void RefreshData()
{
while (_IsLoaded)
{
try
{
var vs = _WEBHelper.HttpGetJSON>(_Url);
if (vs != null && vs.Count > 0)
{
Dispatcher?.Invoke(() =>
{
foreach (var v in vs)
{
if (!_TagInfos.ContainsKey(v.Key)) continue;
var tgs = _TagInfos[v.Key];
foreach (var tg in tgs)
{
tg.Value = v.Value.Value;
}
}
});
}
}
catch { }
await Task.Delay(2000);
}
}
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
_IsLoaded = false;
}
}
}