using System;
using System.Configuration;
using System.Linq;
using System.Management;
using System.Net.Sockets;
using System.Net;
using System.Windows.Forms;
using AutoUpdaterDotNET;
using DevExpress.XtraEditors;
using Gs.DevApp.Entity;
using Gs.DevApp.Properties;
using Gs.DevApp.ToolBox;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace Gs.DevApp.DevFrm
{
public partial class FrmLogin : XtraForm
{
public FrmLogin()
{
InitializeComponent();
if (ConfigurationManager.AppSettings["IsAutoUpdater"] == "1")
_autoUpdate();
_getFont();
_getRemember();
Text = lbVersion.Text = ConfigurationManager.AppSettings["ProductName"];
btnLogin.Click += BtnLogin_Click;
btnCancel.Click += BtnCancel_Click;
}
private void BtnCancel_Click(object sender, EventArgs e)
{
if (MsgHelper.AskQuestion("确定要退出系统吗?")) Application.Exit();
}
private void BtnLogin_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(txtUser.Text.Trim()))
{
MsgHelper.Warning("登录账号不能为空!");
txtUser.Focus();
return;
}
if (string.IsNullOrEmpty(txtPwd.Text.Trim()))
{
MsgHelper.Warning("密码不能为空!");
txtUser.Focus();
return;
}
string strLog = GetMacAddress();
var _obj = new
{
accountPwd = txtPwd.Text.Trim(),
accountNo = txtUser.Text.Trim(),
accountLog = strLog
};
try
{
var strJson = UtilityHelper.HttpPost("", "User/UserLogin",
JsonConvert.SerializeObject(_obj));
var _rtn = UtilityHelper.ReturnToDynamic(strJson);
JObject _login = _rtn.rtnData;
if (_rtn.rtnCode > 0)
{
Settings.Default.userName = ckRemember.Checked ? txtUser.Text.Trim() : "";
Settings.Default.userPwd = ckRemember.Checked ? txtPwd.Text.Trim() : "";
Settings.Default.remember = ckRemember.Checked;
Settings.Default.Save();
LoginInfoModel.CurrentUser.LoginUserGuid = _login["loginGuid"].ToString();
LoginInfoModel.CurrentUser.LoginTime = DateTime.Now.ToString("yyyy-MM-dd hh:mm");
DialogResult = DialogResult.OK;
}
else
{
MsgHelper.Warning("提示:" + _rtn.rtnMsg);
DialogResult = DialogResult.None;
}
}
catch (Exception ex)
{
DialogResult = DialogResult.Cancel;
MsgHelper.Warning("提示:" + ex.Message);
}
}
///
/// 读取记住密码
///
private void _getRemember()
{
try
{
if (Settings.Default.remember)
{
txtUser.Text = Settings.Default.userName;
txtPwd.Text = Settings.Default.userPwd;
ckRemember.Checked = true;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
///
/// 读取字体
///
private void _getFont()
{
try
{
string strFont = Settings.Default.fontSizeName;
if (string.IsNullOrEmpty(strFont))
return;
string[] ary = strFont.Split(',');
if (ary.Length < 2)
return;
float _ft = float.Parse(ary[1]);
#region 设置默认字体、日期格式、汉化dev
DevExpress.Utils.AppearanceObject.DefaultFont = new System.Drawing.Font(ary[0], _ft);
DevExpress.XtraEditors.WindowsFormsSettings.DefaultFont = new System.Drawing.Font(ary[0], _ft);
DevExpress.XtraEditors.WindowsFormsSettings.DefaultMenuFont = new System.Drawing.Font(ary[0], _ft);
DevExpress.XtraEditors.WindowsFormsSettings.DefaultPrintFont = new System.Drawing.Font(ary[0], _ft);
#endregion
}
catch (Exception)
{
}
}
private void _autoUpdate()
{
var _version = ConfigurationManager.AppSettings["Version"];
AutoUpdater.InstalledVersion = new Version(_version);
AutoUpdater.Start(ConfigurationManager.AppSettings["AutoUpdaterXml"]);
AutoUpdater.CheckForUpdateEvent += AutoUpdater_CheckForUpdateEvent;
}
private void AutoUpdater_CheckForUpdateEvent(UpdateInfoEventArgs args)
{
if (args == null || string.IsNullOrEmpty(args.DownloadURL))
{
MsgHelper.ShowError("读取自动更新失败,无法登录,请联系管理员!");
Close();
Application.Exit();
return;
}
if (!args.IsUpdateAvailable)
{
return;
}
var _strMsg =
string.Format(
$@"有新版本 {args.CurrentVersion} 可用,您使用的是 {args.InstalledVersion}版本,这是必需的更新,按“是(Y)”开始更新应用程序。");
if (!MsgHelper.AskQuestion(_strMsg))
{
Close();
Application.Exit();
return;
}
try
{
if (AutoUpdater.DownloadUpdate(args))
{
var config =
ConfigurationManager.OpenExeConfiguration(
ConfigurationUserLevel.None);
if (config != null)
{
var appSettings =
(AppSettingsSection)config.GetSection(
"appSettings");
if (appSettings.Settings.AllKeys.Contains("Version"))
appSettings.Settings["Version"].Value =
args.CurrentVersion;
else
appSettings.Settings.Add("Version",
args.CurrentVersion);
config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings");
}
Application.Exit();
}
else
{
MsgHelper.ShowError("读取自动更新失败,无法登录,请联系管理员!");
Close();
Application.Exit();
}
}
catch (Exception exception)
{
MsgHelper.ShowError(exception.Message + ":" + exception.GetType());
Close();
Application.Exit();
}
}
private string GetMacAddress()
{
System.Text.StringBuilder sb = new System.Text.StringBuilder();
try
{
sb.Append("主机名: ");
string hostName = Dns.GetHostName();
sb.Append(hostName);
sb.Append(";IPv4: ");
IPAddress[] addresses = Dns.GetHostAddresses(hostName);
int i = 0;
foreach (IPAddress address in addresses)
{
if (address.AddressFamily == AddressFamily.InterNetwork) // 过滤出IPv4地址
{
if (i > 0)
sb.Append(",");
sb.Append(address.ToString());
}
}
i = 0;
sb.Append(";MAC: ");
ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection moc = mc.GetInstances();
string macAddress = string.Empty;
foreach (ManagementObject mo in moc)
{
if ((bool)mo["IPEnabled"])
{
if (i > 0)
sb.Append(",");
macAddress = mo["MacAddress"].ToString();
sb.Append(macAddress);
break;
}
}
return sb.ToString();
}
catch (Exception ex)
{
sb.Append(ex.Message);
}
return sb.ToString();
}
}
}