chr
2024-10-09 1f645778ae80a3a8801b8bb4d0fcf8feb244ad43
PdmSwPlugin.Main/MainControl.xaml.cs
@@ -15,6 +15,9 @@
using PdmSwPlugin.Common.Interface;
using SolidWorks.Interop.sldworks;
using System.Windows.Threading;
using SuperSocket.SocketBase;
using SuperSocket.SocketBase.Protocol;
using PdmSwPlugin.Main.Tcp;
namespace PdmSwPlugin.Main
{
@@ -24,9 +27,42 @@
    /// </summary>
    public partial class MainControl : UserControl, ISwAppSetter
    {
        private TcpServer tcpServer;
        public void InitTcpServer()
        {
            tcpServer = new TcpServer();
            tcpServer.NewRequestReceived += new RequestHandler<TcpSession, StringRequestInfo>(HandleRequest);
            if (!tcpServer.Setup(5678))
            {
                Logger.Error("Tcp Server Setup Error.");
            }
            if (!tcpServer.Start())
            {
                Logger.Error("Tcp Server Start Error.");
            }
        }
        #region 控件
        #endregion
        public void StopTcpServer()
        {
            tcpServer?.Stop();
            tcpServer = null;
        }
        public void HandleRequest(TcpSession session, StringRequestInfo info)
        {
            byte[] msg = new byte[1];
            if (PdmUser.LoginUser != null)
            {
                // 登录返回1
                msg[0] = 1;
            }
            else
            {
                // 没登录返回0
                msg[0] = 0;
            }
            session.Send(msg, 0, 1);
        }
        #region 检查更新相关
        /// <summary>
@@ -149,46 +185,6 @@
        }
        #endregion
        /// <summary>
        /// 自动登录
        /// </summary>
        /// <param name="callback"></param>
        /// <param name="reject"></param>
        private void AutoLogin(Action<PdmUser> callback, Action<Exception> reject)
        {
            MaskAdorner.ShowMask(mainBorder, "登陆中...");
            Task.Run(() =>
            {
                try
                {
                    if (GlobalConfig.ClassicLogin)
                    {
                        callback(null);
                        return;
                    }
                    Result<PdmUser> res = HttpClientCreator.GetSyncAction<PdmUser>("openApi/wpf/simpleLogin", new PdmUser
                    {
                        username = System.Environment.UserName,
                        appId = PluginConst.AppId,
                        pluginVersion = PluginConst.Version
                    });
                    PdmUser user = res.HandleResult();
                    user.appId = PluginConst.AppId;
                    user.pluginVersion = PluginConst.Version;
                    callback(user);
                }
                catch (Exception e)
                {
                    reject(e);
                }
                finally
                {
                    MaskAdorner.HideMask(mainBorder);
                }
            });
        }
        /// <summary>
        /// 加载插件主Tab
        /// </summary>
@@ -196,15 +192,29 @@
        {
            // 自动登录成功
            clientCreator = new HttpClientCreator();
            tabControl = new TabControl();
            AddPlugin();
            mainBorder.Child = tabControl;
            if (tabControl.Items.Count > 0)
            if (mainTab == null)
            {
                TabItem tabItem = tabControl.Items[0] as TabItem;
                mainTab = new MainTab(Logout);
                mainTab.SetSwApp(SwApp);
            }
            AddPlugin();
            mainBorder.Child = mainTab;
            if (mainTab.tabControl.Items.Count > 0)
            {
                TabItem tabItem = mainTab.tabControl.Items[0] as TabItem;
                tabItem.Focus();
                (tabItem.Content as UIElement).Focus();
            }
        }
        public void Logout()
        {
            string binPath = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData), "HengXin", "PdmSwPlugin", "bin");
            File.Delete(binPath);
            DeActiveHandler();
            mainTab.tabControl.Items.Clear();
            PdmUser.SetLoginUser(null);
            mainBorder.Child = new LoginControl(LoginSuccess);
        }
        public void MainControl_Loaded(object sender, RoutedEventArgs e)
@@ -216,75 +226,19 @@
            // 最后检查更新
            CheckUpdate();
            AutoLogin(
            (user) =>
            {
                if (user != null)
                {
                    Dispatcher.Invoke(() =>
                    {
                        PdmUser.SetLoginUser(user);
                        if (PdmUser.HasLogin())
                        {
                            LoginSuccess();
                        }
                    });
                }
            },
            (ex) =>
            {
                Logger.Error("登陆失败!", ex);
                this.Error($"登陆失败! {ex.Message}");
            });
            mainBorder.Child = new LoginControl(LoginSuccess);
        }
        /// <summary>
        /// 登陆点击事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            MaskAdorner.ShowMask(mainBorder, "登陆中...");
            PdmUser param = new PdmUser
            {
                username = usernameTextBlock.Text,
                password = passwordTextBlock.Password,
                appId = PluginConst.AppId,
                pluginVersion = PluginConst.Version
            };
            Task.Run(() =>
            {
                try
                {
                    Result<PdmUser> res = HttpClientCreator.PostSyncAction<PdmUser>("openApi/wpf/login", param);
                    PdmUser user = res.HandleResult();
                    user.appId = PluginConst.AppId;
                    user.pluginVersion = PluginConst.Version;
                    Dispatcher.Invoke(() =>
                    {
                        PdmUser.SetLoginUser(user);
                        if (PdmUser.HasLogin())
                        {
                            LoginSuccess();
                        }
                    });
                }
                catch (Exception ex)
                {
                    Logger.Error("登陆失败!", ex);
                    this.Error($"登陆失败! {ex.Message}");
                }
                finally
                {
                    MaskAdorner.HideMask(mainBorder);
                }
            });
        }
        public void SetSwApp(SldWorks SwApp)
        {
            this.SwApp = SwApp;
        }
        private void self_Unloaded(object sender, RoutedEventArgs e)
        {
            StopTcpServer();
        }
    }
}