1
czw
2025-07-04 58c1a87f19a96a1d62df382a01ed0dfd36e2f84b
HnSx/Build/Project/´úÂë/½çÃæÊ¼þ.cs
@@ -23,286 +23,315 @@
using Dapper;
namespace GZ.Projects.HnSx
{
   /// <summary>
   /// äº‹ä»¶
   /// </summary>
   public partial class ViewModel : System.ComponentModel.INotifyPropertyChanged
   {
    /// <summary>
    /// äº‹ä»¶
    /// </summary>
    public partial class ViewModel : System.ComponentModel.INotifyPropertyChanged
    {
        bool IsExitApp = false;
        ConcurrentStack<int> ExitJudgeStack = new ConcurrentStack<int>();
      System.Net.HttpListener HttpSvcHost = null;
      #region View1事件
      /// <summary>
        System.Net.HttpListener HttpSvcHost = null;
        #region View1事件
        /// <summary>
        /// View1打开事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
      public void View1_LoadEvent(object sender, RoutedEventArgs e)
      {
         try
         {
            //HttpSvcHost = new System.Net.HttpListener();
            //HttpSvcHost.AuthenticationSchemes = System.Net.AuthenticationSchemes.Anonymous;
            //HttpSvcHost.Prefixes.Add("http://127.0.0.1:8808/");
            //HttpSvcHost.Start();
            //HttpSvcHost.BeginGetContext(HttpSvcListenerCallback, null);
         }
         catch(Exception ex)
         {
            Conn.log默认日志.Error(ex.ToString());
         }
         View1_Init(sender, e);
         try
         {
            #region    [脚本][20250701110610426][业务逻辑.Program1]
            AutoThread.InvokeMethod(AutoThread.Instance, "TaskEverythingRun");
            #endregion [脚本][20250701110610426][业务逻辑.Program1]
         }
         catch(Exception ex)
         {
            Conn.log默认日志.Error(ex.ToString());
         }
         finally
         {
         }
         /// <summary>
         /// ç¨‹åºç‰‡æ®µ:Program2
         /// æè¿°:
         /// </summary>
         System.Threading.Tasks.Task.Factory.StartNew(() =>
         {
            System.Threading.Thread.CurrentThread.IsBackground = true;
            ExitJudgeStack.Push(0);
         //一直执行,直到满足结束条件
         while(true)
         {
            if (IsExitApp) { break; }
         try
         {
            #region    [脚本][20250704090126015][业务逻辑.Program2]
            AutoThread.InvokeMethod(AutoThread.Instance, "ThreadSettingInit", new object[] { tag });
            #endregion [脚本][20250704090126015][业务逻辑.Program2]
         }
         catch(Exception ex)
         {
            Conn.log默认日志.Error(ex.ToString());
         }
         finally
         {
            System.Threading.Thread.Sleep(10000);
         }
         }
            ExitJudgeStack.TryPop(out int exitJudgeVal);
});
      }
      /// <summary>
        public void View1_LoadEvent(object sender, RoutedEventArgs e)
        {
            try
            {
                //HttpSvcHost = new System.Net.HttpListener();
                //HttpSvcHost.AuthenticationSchemes = System.Net.AuthenticationSchemes.Anonymous;
                //HttpSvcHost.Prefixes.Add("http://127.0.0.1:8808/");
                //HttpSvcHost.Start();
                //HttpSvcHost.BeginGetContext(HttpSvcListenerCallback, null);
            }
            catch (Exception ex)
            {
                Conn.log默认日志.Error(ex.ToString());
            }
            View1_Init(sender, e);
            try
            {
                #region    [脚本][20250701110610426][业务逻辑.Program1]
                AutoThread.InvokeMethod(AutoThread.Instance, "TaskEverythingRun");
                #endregion [脚本][20250701110610426][业务逻辑.Program1]
            }
            catch (Exception ex)
            {
                Conn.log默认日志.Error(ex.ToString());
            }
            finally
            {
            }
            /// <summary>
            /// ç¨‹åºç‰‡æ®µ:Program2
            /// æè¿°:
            /// </summary>
            System.Threading.Tasks.Task.Factory.StartNew(() =>
            {
                System.Threading.Thread.CurrentThread.IsBackground = true;
                ExitJudgeStack.Push(0);
                //一直执行,直到满足结束条件
                while (true)
                {
                    if (IsExitApp) { break; }
                    try
                    {
                        #region    [脚本][20250704090126015][业务逻辑.Program2]
                        AutoThread.InvokeMethod(AutoThread.Instance, "ThreadwebSoc");
                        #endregion [脚本][20250704090126015][业务逻辑.Program2]
                    }
                    catch (Exception ex)
                    {
                        Conn.log默认日志.Error(ex.ToString());
                    }
                    finally
                    {
                        System.Threading.Thread.Sleep(10000);
                    }
                }
                ExitJudgeStack.TryPop(out int exitJudgeVal);
            });
            /// <summary>
            /// ç¨‹åºç‰‡æ®µ:Program2
            /// æè¿°:
            /// </summary>
            System.Threading.Tasks.Task.Factory.StartNew(() =>
            {
                System.Threading.Thread.CurrentThread.IsBackground = true;
                ExitJudgeStack.Push(0);
                //一直执行,直到满足结束条件
                while (true)
                {
                    if (IsExitApp) { break; }
                    try
                    {
                        #region    [脚本][20250704090126015][业务逻辑.Program2]
                        AutoThread.InvokeMethod(AutoThread.Instance, "ThreadSettingInit", new object[] { tag });
                        #endregion [脚本][20250704090126015][业务逻辑.Program2]
                    }
                    catch (Exception ex)
                    {
                        Conn.log默认日志.Error(ex.ToString());
                    }
                    finally
                    {
                        System.Threading.Thread.Sleep(10000);
                    }
                }
                ExitJudgeStack.TryPop(out int exitJudgeVal);
            });
        }
        /// <summary>
        /// View1关闭事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
      public void View1_CloseEvent(object sender, System.ComponentModel.CancelEventArgs e)
      {
         try
         {
                System.Threading.Tasks.Task.Factory.StartNew(() => { MessageBox.Show("程序正在关闭,请等待..."); });
         }
         catch(Exception ex)
         {
            Conn.log默认日志.Error(ex.ToString());
         }
         try
         {
            Conn.log默认日志.Debug("[关闭处理][Start]关闭Http服务");
            if(HttpSvcHost!=null)
            {
               HttpSvcHost.Stop();
            }
         }
         catch(Exception ex)
         {
            Conn.log默认日志.Error(ex.ToString());
         }
         finally
         {
            Conn.log默认日志.Debug("[关闭处理][End]关闭Http服务");
         }
        public void View1_CloseEvent(object sender, System.ComponentModel.CancelEventArgs e)
        {
         try
         {
            Conn.log默认日志.Debug("[关闭处理][Start]判断业务处理状态");
            IsExitApp = true;
            //int exitCnt = 0;
            while
            (
               ExitJudgeStack.Count > 0
            )
            {
               System.Threading.Thread.Sleep(100);
               //++exitCnt;
               //10秒未结束则强制关闭
               //if (exitCnt >= 100)
               //{
               //   break;
               //}
            }
         }
         catch (Exception ex)
         {
            Conn.log默认日志.Error(ex.ToString());
         }
         finally
         {
            Conn.log默认日志.Debug("[关闭处理][End]判断业务处理状态");
         }
            try
            {
                System.Threading.Tasks.Task.Factory.StartNew(() => { MessageBox.Show("程序正在关闭,请等待..."); });
            }
            catch (Exception ex)
            {
                Conn.log默认日志.Error(ex.ToString());
            }
            try
            {
                Conn.log默认日志.Debug("[关闭处理][Start]关闭Http服务");
                if (HttpSvcHost != null)
                {
                    HttpSvcHost.Stop();
                }
            }
            catch (Exception ex)
            {
                Conn.log默认日志.Error(ex.ToString());
            }
            finally
            {
                Conn.log默认日志.Debug("[关闭处理][End]关闭Http服务");
            }
            try
            {
                Conn.log默认日志.Debug("[关闭处理][Start]判断业务处理状态");
                IsExitApp = true;
                //int exitCnt = 0;
                while
                (
                    ExitJudgeStack.Count > 0
                )
                {
                    System.Threading.Thread.Sleep(100);
                    //++exitCnt;
                    //10秒未结束则强制关闭
                    //if (exitCnt >= 100)
                    //{
                    //   break;
                    //}
                }
            }
            catch (Exception ex)
            {
                Conn.log默认日志.Error(ex.ToString());
            }
            finally
            {
                Conn.log默认日志.Debug("[关闭处理][End]判断业务处理状态");
            }
            e.Cancel = true;
         System.Threading.Tasks.Task.Factory.StartNew(() =>
         {
                  try
         {
            Conn.log默认日志.Debug("[关闭处理][Start]关闭PLC");
            Device.PLC1?.Stop();
         }
         catch(Exception ex)
         {
            Conn.log默认日志.Error(ex.ToString());
         }
         finally
         {
            Conn.log默认日志.Debug("[关闭处理][End]关闭PLC");
         }
         try
         {
            Conn.log默认日志.Debug("[关闭处理][Start]判断PLC状态");
            //int exitCnt = 0;
            while
            (
               false
               || (Device.PLC1 == null ? false : Device.PLC1.State != GZ.Device.PLC.PlcRunState.Stoped)
            )
            {
               System.Threading.Thread.Sleep(1000);
               //++exitCnt;
               //10秒未结束则强制关闭
               //if (exitCnt >= 100)
               //{
               //   break;
               //}
            }
         }
         catch (Exception ex)
         {
            Conn.log默认日志.Error(ex.ToString());
         }
         finally
         {
            Conn.log默认日志.Debug("[关闭处理][End]判断PLC状态");
         }
         Application.Current.Dispatcher.Invoke(() => { Environment.Exit(0); });
         });
         //System.Windows.Application.Current.Shutdown();
      }
      /// <summary>
            System.Threading.Tasks.Task.Factory.StartNew(() =>
            {
                try
                {
                    Conn.log默认日志.Debug("[关闭处理][Start]关闭PLC");
                    Device.PLC1?.Stop();
                }
                catch (Exception ex)
                {
                    Conn.log默认日志.Error(ex.ToString());
                }
                finally
                {
                    Conn.log默认日志.Debug("[关闭处理][End]关闭PLC");
                }
                try
                {
                    Conn.log默认日志.Debug("[关闭处理][Start]判断PLC状态");
                    //int exitCnt = 0;
                    while
                    (
                        false
                        || (Device.PLC1 == null ? false : Device.PLC1.State != GZ.Device.PLC.PlcRunState.Stoped)
                    )
                    {
                        System.Threading.Thread.Sleep(1000);
                        //++exitCnt;
                        //10秒未结束则强制关闭
                        //if (exitCnt >= 100)
                        //{
                        //   break;
                        //}
                    }
                }
                catch (Exception ex)
                {
                    Conn.log默认日志.Error(ex.ToString());
                }
                finally
                {
                    Conn.log默认日志.Debug("[关闭处理][End]判断PLC状态");
                }
                Application.Current.Dispatcher.Invoke(() => { Environment.Exit(0); });
            });
            //System.Windows.Application.Current.Shutdown();
        }
        /// <summary>
        /// View1初始化
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
      public void View1_Init(object sender, RoutedEventArgs e)
      {
      }
      #endregion
      #region åˆ‡æ¢tab页
      public void tab_SelectionChanged(object sender, EventArgs e)
      {
         //TabItem ti = (sender as TabControl).SelectedItem as TabItem;
         //MessageBox.Show(ti.Name);
      }
      #endregion
      #region Http服务监听
      private void HttpSvcListenerCallback(IAsyncResult ar)
      {
         try
         {
            HttpSvcHost.BeginGetContext(HttpSvcListenerCallback, null);
            System.Net.HttpListenerContext context = HttpSvcHost.EndGetContext(ar);
            System.Net.HttpListenerRequest request = context.Request;
            System.Net.HttpListenerResponse response = context.Response;
            switch(request.LocalEndPoint.ToString())
            {
               case "127.0.0.1:8808":
               {
                  using (var reader = new System.IO.StreamReader(request.InputStream, System.Text.Encoding.UTF8))
                  {
                     string requestJson = reader.ReadToEnd();
        public void View1_Init(object sender, RoutedEventArgs e)
        {
        }
        #endregion
                     string respstr = HttpSvcListenerCallback_Api(request.HttpMethod,request.Url.AbsolutePath,requestJson,out System.Net.HttpStatusCode statusCode);
        #region åˆ‡æ¢tab页
        public void tab_SelectionChanged(object sender, EventArgs e)
        {
            //TabItem ti = (sender as TabControl).SelectedItem as TabItem;
            //MessageBox.Show(ti.Name);
        }
        #endregion
                     string logContent="";
                     logContent += $"\r\n[{request.HttpMethod}]{request.Url.AbsolutePath}";
                     logContent += $"\r\n[request]{requestJson}";
                     logContent += $"\r\n[response]{respstr}";
                     Conn.log默认日志?.Info(logContent);
                     byte[] bytstr = Encoding.UTF8.GetBytes(respstr);
                     response.StatusCode = (int)statusCode;
                     response.SendChunked = false;
                     response.ContentLength64 = bytstr.Length;
                     response.OutputStream.Write(bytstr, 0, bytstr.Length);
                     response.Close();
                  }
                  break;
               }
            }
         }
         catch(Exception ex)
         {
            Conn.log默认日志.Error(ex.ToString());
         }
      }
      private System.String HttpSvcListenerCallback_Api(System.String method,System.String path,System.String requestJson,out System.Net.HttpStatusCode statusCode)
      {
         try
         {
            switch(method)
            {
               case "POST":
               {
                  switch(path)
                  {
                     case "/Api/sendTask":
                     {
                        statusCode = System.Net.HttpStatusCode.OK;
                        return "";
                     }
                     case "/Api/cancelTask":
                     {
                        statusCode = System.Net.HttpStatusCode.OK;
                        return "";
                     }
                  }
                  break;
               }
            }
            statusCode = System.Net.HttpStatusCode.NotFound;
            return "";
         }
         catch(Exception ex)
         {
            Conn.log默认日志.Error(ex.ToString());
            statusCode = System.Net.HttpStatusCode.InternalServerError;
            return "";
         }
      }
      #endregion
   }
        #region Http服务监听
        private void HttpSvcListenerCallback(IAsyncResult ar)
        {
            try
            {
                HttpSvcHost.BeginGetContext(HttpSvcListenerCallback, null);
                System.Net.HttpListenerContext context = HttpSvcHost.EndGetContext(ar);
                System.Net.HttpListenerRequest request = context.Request;
                System.Net.HttpListenerResponse response = context.Response;
                switch (request.LocalEndPoint.ToString())
                {
                    case "127.0.0.1:8808":
                        {
                            using (var reader = new System.IO.StreamReader(request.InputStream, System.Text.Encoding.UTF8))
                            {
                                string requestJson = reader.ReadToEnd();
                                string respstr = HttpSvcListenerCallback_Api(request.HttpMethod, request.Url.AbsolutePath, requestJson, out System.Net.HttpStatusCode statusCode);
                                string logContent = "";
                                logContent += $"\r\n[{request.HttpMethod}]{request.Url.AbsolutePath}";
                                logContent += $"\r\n[request]{requestJson}";
                                logContent += $"\r\n[response]{respstr}";
                                Conn.log默认日志?.Info(logContent);
                                byte[] bytstr = Encoding.UTF8.GetBytes(respstr);
                                response.StatusCode = (int)statusCode;
                                response.SendChunked = false;
                                response.ContentLength64 = bytstr.Length;
                                response.OutputStream.Write(bytstr, 0, bytstr.Length);
                                response.Close();
                            }
                            break;
                        }
                }
            }
            catch (Exception ex)
            {
                Conn.log默认日志.Error(ex.ToString());
            }
        }
        private System.String HttpSvcListenerCallback_Api(System.String method, System.String path, System.String requestJson, out System.Net.HttpStatusCode statusCode)
        {
            try
            {
                switch (method)
                {
                    case "POST":
                        {
                            switch (path)
                            {
                                case "/Api/sendTask":
                                    {
                                        statusCode = System.Net.HttpStatusCode.OK;
                                        return "";
                                    }
                                case "/Api/cancelTask":
                                    {
                                        statusCode = System.Net.HttpStatusCode.OK;
                                        return "";
                                    }
                            }
                            break;
                        }
                }
                statusCode = System.Net.HttpStatusCode.NotFound;
                return "";
            }
            catch (Exception ex)
            {
                Conn.log默认日志.Error(ex.ToString());
                statusCode = System.Net.HttpStatusCode.InternalServerError;
                return "";
            }
        }
        #endregion
    }
}