| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 | using System;using System.Collections.Generic;using System.Configuration;using System.Diagnostics;using System.IO;using System.Linq;using System.Reflection;using System.Threading.Tasks;using System.Windows.Forms;using XdCxRhDW.Dto;using XdCxRhDW.WebApi;namespace X2LeoTaskServer54{    public partial class MainForm : Form    {        public MainForm()        {            InitializeComponent();            LogHelper.Logger = info =>            {                try                {                    this.Invoke(new Action(() =>                    {                        this.listBox1.Items.Insert(0, $"{info.LogTime:yyyyMMddHHmmss.fff}--{info.Msg}");                        if (this.listBox1.Items.Count > 1000)                            this.listBox1.Items.RemoveAt(this.listBox1.Items.Count - 1);                    }));                }                catch                { }            };        }        private async void MainForm_LoadAsync(object sender, EventArgs e)        {            if (Debugger.IsAttached)//结束已启动的进程,方便调试            {                var pros = Process.GetProcessesByName(Assembly.GetExecutingAssembly().GetName().Name).OrderBy(p => p.StartTime).ToList();                pros.RemoveAt(pros.Count - 1);                foreach (var item in pros)                {                    try                    {                        item.Kill();                    }                    catch                    { }                }            }            try            {                if (Directory.Exists("tmp"))                    Directory.Delete("tmp");            }            catch            { }            var port = Convert.ToInt32(ConfigurationManager.AppSettings["LocalHttpPort"].Trim());            var svrID = ConfigurationManager.AppSettings["SvrID"].Trim();            var posPlatformAddr = ConfigurationManager.AppSettings["PosPlatformAddr"].Trim();            LogHelper.BaseUrl = posPlatformAddr + "/api/";            this.Text = EnumSvrType.LeoX2Task54.GetEnumDisplayName() + "-" + svrID;            string localIp;            string getIpUrl = $"{posPlatformAddr}/api/task/getclientip";            while (true)            {                try                {                    var rsp = await HttpHelper.GetRequestAsync<string>(getIpUrl, 10);                    if (rsp.code == 0)                    {                        await LogHelper.Error(rsp.msg);                        return;                    }                    else                    {                        localIp = rsp.data;                    }                    break;                }                catch (Exception ex)                {                    await LogHelper.Error($"无法连接到平台{getIpUrl},请检测地址是否正确并确保平台防火墙允许端口通过", ex);                    await Task.Delay(5000);                }            }            await LogHelper.Info($"本机IP={localIp}");            Startup.Start(port, $"{System.Reflection.Assembly.GetExecutingAssembly().GetName().Name}.xml", "XdCxRhDW.Dto.xml");            await LogHelper.Info($"服务启动成功.接口地址http://{localIp}:{port}/swagger");            string url;            if (posPlatformAddr.EndsWith("/"))                url = posPlatformAddr + "api/SvrReport/Report";            else                url = posPlatformAddr + "/api/SvrReport/Report";            bool preSucceed = false;            while (!this.Disposing)            {                try                {                    var res = await HttpHelper.PostRequestAsync<object>(url, new SvrStateReportDto()                    {                        SvrType = EnumSvrType.LeoX2Task54,                        SvrID = svrID,                        ReportType = 0,                        BaseHttpAddr = $"http://{localIp}:{port}",                        SwaggerAddr = $"http://{localIp}:{port}/Swagger",                    });                    if (res.code != 200)                    {                        await LogHelper.Error($"状态上报异常[url={url}].{res.msg}");                        preSucceed = false;                    }                    else                    {                        if (!preSucceed)                            await LogHelper.Info($"状态上报成功![url={url}]");                        preSucceed = true;                    }                }                catch (Exception ex)                {                    await LogHelper.Error($"状态上报异常[url={url}]", ex);                    preSucceed = false;                }                await Task.Delay(6000);            }        }        private void MainForm_FormClosed(object sender, FormClosedEventArgs e)        {            try            {                var port = Convert.ToInt32(ConfigurationManager.AppSettings["LocalHttpPort"].Trim());                var svrID = ConfigurationManager.AppSettings["SvrID"].Trim();                var posPlatformAddr = ConfigurationManager.AppSettings["PosPlatformAddr"].Trim();                string url;                if (posPlatformAddr.EndsWith("/"))                    url = posPlatformAddr + "api/SvrReport/Report";                else                    url = posPlatformAddr + "/api/SvrReport/Report";                var localIp = IpHelper.GetLocalIp();                _ = HttpHelper.PostRequestAsync<object>(url, new SvrStateReportDto()                {                    SvrID = svrID,                    SvrType = EnumSvrType.LeoX2Task54,                    ReportType = 1,                    BaseHttpAddr = $"http://{localIp}:{port}",                });            }            catch (Exception ex)            {                _ = LogHelper.Error("状态上报异常", ex);            }        }    }}
 |