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);
}
}
}
}