using DevExpress.Utils.Html; using DevExpress.XtraEditors; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.Entity; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Forms; using XdCxRhDW.App.Controllers; using XdCxRhDW.App.EditForms; using XdCxRhDW.App.Model; using XdCxRhDW.Dto; namespace XdCxRhDW.App.UserControl { public partial class CtrlSvrs : DevExpress.XtraEditors.XtraUserControl { List list = new List(); public CtrlSvrs() { InitializeComponent(); gridSvrs.UseDefault(list).UseGroup().UseRowNumber(); gridSvrs.UseEdit(); var linkEdit = new DevExpress.XtraEditors.Repository.RepositoryItemHyperLinkEdit(); this.gridSvrs.RepositoryItems.Add(linkEdit); gridView1.Columns[nameof(ModelSvrs.SwaggerAddr)].ColumnEdit = linkEdit; gridView1.Columns[nameof(ModelSvrs.SwaggerAddr)].OptionsColumn.AllowEdit = true; TaskSvr.EventTaskSvr += TaskSvr_EventTaskSvr; } private ItemSvrEventArgs TaskSvr_EventTaskSvr() { ItemSvrEventArgs itemSvr = new ItemSvrEventArgs(); itemSvr.code = -1; itemSvr.msg = "没有服务"; if (list.Count == 0) { return itemSvr; } itemSvr.code = 1; itemSvr.msg = string.Empty; itemSvr.modelSvrs = list.OrderByDescending(s => s.ReportTime).First(); return itemSvr; } private async void CtrlSat_Load(object sender, EventArgs e) { Messenger.Defalut.Sub("服务状态改变", dto => { try { if (dto.ReportType == 0) { var find = list.Find(p => p.BaseHttpAddr == dto.BaseHttpAddr); if (find == null) { list.Add(new ModelSvrs() { SvrType = dto.SvrType, SvrID = dto.SvrID, BaseHttpAddr = dto.BaseHttpAddr, SwaggerAddr = dto.SwaggerAddr, ReportTime = DateTime.Now, }); } else { find.BaseHttpAddr = dto.BaseHttpAddr; find.SwaggerAddr = dto.SwaggerAddr; find.SvrType = dto.SvrType; find.SvrID = dto.SvrID; find.ReportTime = DateTime.Now; } } else { var find = list.Find(p => p.BaseHttpAddr == dto.BaseHttpAddr); if (find == null) return; list.Remove(find); } this.BeginInvoke(new Action(() => { gridView1.RefreshData(); })); } catch (Exception ex) { Serilog.Log.Error(ex, "处理服务状态上报异常"); } }); while (true) { try { List tmp = new List(); list.ForEach(t => { if ((DateTime.Now - t.ReportTime).TotalSeconds > 20) { tmp.Add(t.BaseHttpAddr); } }); var count = list.RemoveAll(p => tmp.Contains(p.BaseHttpAddr)); if (count > 0) { gridView1.RefreshData(); } } catch (Exception ex) { Serilog.Log.Error(ex, "Error"); } await Task.Delay(10000); } } } }