From e69865a1a3739740201bac8782b721da35d49923 Mon Sep 17 00:00:00 2001
From: patrick.xu <patrick.xu@broconcentric.com>
Date: 星期一, 25 一月 2021 18:45:28 +0800
Subject: [PATCH] 1. gocator添加重试和清理缓存操作 2. gts板卡调整监听频率 3. 记录产品数据使用filsstream避免程序崩溃影响

---
 src/Bro.UI.Config/MainFrm.cs |  137 ++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 116 insertions(+), 21 deletions(-)

diff --git a/src/Bro.UI.Config/MainFrm.cs b/src/Bro.UI.Config/MainFrm.cs
index 39c483d..1d27f20 100644
--- a/src/Bro.UI.Config/MainFrm.cs
+++ b/src/Bro.UI.Config/MainFrm.cs
@@ -74,10 +74,10 @@
             //});
 
             m_deserializeMenuFrm = new DeserializeDockContent(GetMenuFromPersistString);
-            LoadLayoutFromXML(m_deserializeMenuFrm);
-
             m_deserializeDeviceRunFrm = new DeserializeDockContent(GetAllFormPersistString);
-            _allMenuLoadDoneHandle.Set();
+
+            //LoadLayoutFromXML(m_deserializeMenuFrm);
+            //_allMenuLoadDoneHandle.Set();
 
             Text = SettingHelper.GetProgramDescription();
             string iconPath = SettingHelper.GetProgramIcon();
@@ -157,14 +157,20 @@
                 CloseAllDeviceFrm();
                 LoadDevices();
 
-                foreach (var dock in dockPanelMain.Contents)
+                try
                 {
-                    MenuFrmBase m = dock as MenuFrmBase;
-
-                    if (m != null && m.Id != frmId)
+                    foreach (var dock in dockPanelMain.Contents)
                     {
-                        m.DownloadProcess(process);
+                        MenuFrmBase m = dock as MenuFrmBase;
+
+                        if (m != null && m.Id != frmId)
+                        {
+                            m.DownloadProcess(process);
+                        }
                     }
+                }
+                catch (Exception ex)
+                {
                 }
             });
         }
@@ -254,14 +260,95 @@
 
         private void MainFrm_Load(object sender, EventArgs e)
         {
+            LoadLayoutFromXML(m_deserializeMenuFrm);
+            _allMenuLoadDoneHandle.Set();
+
             AdvancedPwdFrm.OnLoginOK = OnLoginOK;
 
-            SpinWait wait = new SpinWait();
-            while (_process == null)
-            {
-                wait.SpinOnce();
-            }
+            //SpinWait wait = new SpinWait();
+            //while (_process == null)
+            //{
+            //    wait.SpinOnce();
+            //}
+
+            LoadProcess();
+
             LoadLayoutFromXML(m_deserializeDeviceRunFrm);
+
+            LoadProcess(false);
+        }
+
+        private List<string> LoadProcessCode()
+        {
+            var systemProcessCodes = ProcessFactory.GetProcessCodes();
+            var avaiableProcessCodes = SettingHelper.GetProcessCodes();
+
+            List<string> pCodes = new List<string>();
+
+            if (avaiableProcessCodes.Count > 0)
+            {
+                pCodes = avaiableProcessCodes.Intersect(systemProcessCodes).ToList();
+            }
+            else
+            {
+                pCodes = systemProcessCodes;
+            }
+
+            return pCodes;
+        }
+
+        private List<string> LoadProductionCode()
+        {
+            return SettingHelper.GetProductionCodes();
+        }
+
+        private void LoadProcess(bool isInitialProcess = true)
+        {
+            if (isInitialProcess)
+            {
+                _process = ProcessFactory.CreateStationProcess(LoadProcessCode()[0], LoadProductionCode()[0], out string msg);
+
+                if (!string.IsNullOrWhiteSpace(msg))
+                {
+                    _process = null;
+                    //LogAsync(DateTime.Now, "Process鍒涘缓澶辫触", $"{msg}");
+                    throw new ProcessException($"Process鍒涘缓澶辫触,{msg}", null, ExceptionLevel.Fatal);
+                }
+
+
+                _process.InitialProcess("");
+            }
+            _process.OnLog -= OnProcessLogOutput;
+            _process.OnLog += OnProcessLogOutput;
+
+            _process.OnAlarmUpdate -= Process_OnAlarmUpdate;
+            _process.OnAlarmUpdate += Process_OnAlarmUpdate;
+
+            //CloseAllDeviceFrm();
+            LoadDevices();
+
+            try
+            {
+                foreach (var dock in dockPanelMain.Contents)
+                {
+                    //MenuFrmBase m = dock as MenuFrmBase;
+
+                    //m.DownloadProcess(_process);
+
+                    if (dock is MenuFrmBase menuFrm)
+                    {
+                        menuFrm.DownloadProcess(_process);
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+            }
+        }
+
+        private void OnProcessLogOutput(DateTime dt, string prefix, string msg)
+        {
+            DockFrm_OnLogMsgOutput(new LogMsg(dt, prefix, msg));
         }
 
         private void CloseAllDocuments()
@@ -284,6 +371,11 @@
 
         private void MainFrm_FormClosing(object sender, FormClosingEventArgs e)
         {
+            try
+            {
+                _process?.Close();
+            }
+            catch { }
             CloseAllDocuments();
         }
 
@@ -420,6 +512,9 @@
                     if (u == null)
                         return;
 
+                    if (_process.DeviceCollection.Any(d => d.Id == u.Device.Id))
+                        return;
+
                     u.DockPanel = null;
                     u.Close();
                 });
@@ -542,10 +637,10 @@
 
                 dockFrm.Text = desc[2];
 
-                if (_process != null)
-                {
-                    dockFrm.DownloadProcess(_process);
-                }
+                //if (_process != null)
+                //{
+                //    dockFrm.DownloadProcess(_process);
+                //}
 
                 dockFrm.SetLoginStatus(IsLogin);
 
@@ -580,10 +675,10 @@
 
                 dockFrm.Text = desc[2];
 
-                if (_process != null)
-                {
-                    dockFrm.DownloadProcess(_process);
-                }
+                //if (_process != null)
+                //{
+                //    dockFrm.DownloadProcess(_process);
+                //}
 
                 dockFrm.SetLoginStatus(IsLogin);
 

--
Gitblit v1.8.0