using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using Newtonsoft.Json.Linq;
using HslCommunication;
using CommonLibrary;
using HslCommunication.BasicFramework;
using ClientsLibrary;
namespace 软件系统客户端模版
{
//=================================================================================================
// 登录窗口,此处实现了一些常用的代码,具体的版本号验证及账户验证需要根据实际需求实现
//=================================================================================================
public partial class FormLogin : Form
{
public FormLogin()
{
InitializeComponent();
}
#region 窗口属性及方法
///
/// 指示窗体是否已经显示
///
private bool IsWindowShow { get; set; } = false;
private void FormLogin_Load(object sender, EventArgs e)
{
label_status.Visible = false;
UserClient.JsonSettings.FileSavePath = Application.StartupPath + @"\JsonSettings.txt";
UserClient.JsonSettings.LoadByFile();//根据实际实际情况选中解密算法,默认采用DES加密解密算法
label_version.Text = "版本:" + UserClient.CurrentVersion.ToString();
label2.Text = CommonLibrary.Resource.StringResouce.SoftName;
label_copyright.Text = $"本软件著作权归{CommonLibrary.Resource.StringResouce.SoftCopyRight}所有";
}
private void FormLogin_Shown(object sender, EventArgs e)
{
IsWindowShow = true;
//如果七天未登录,账户密码清除
if ((DateTime.Now - UserClient.JsonSettings.LoginTime).TotalDays < 7)
{
//加载数据
textBox_userName.Text = UserClient.JsonSettings.LoginName ?? "";
textBox_password.Text = UserClient.JsonSettings.Password ?? "";
checkBox_remeber.Checked = UserClient.JsonSettings.Password != "";
}
//初始化输入焦点
if (UserClient.JsonSettings.Password != "") userButton_login.Focus();
else if (UserClient.JsonSettings.LoginName != "") textBox_password.Focus();
else textBox_userName.Focus();
}
private void FormLogin_FormClosing(object sender, FormClosingEventArgs e)
{
//退出
IsWindowShow = false;
//延时
Thread.Sleep(100);
}
#endregion
#region 界面逻辑块
private void textBox_userName_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter) textBox_password.Focus();
}
private void textBox_password_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter) userButton_login.PerformClick();
}
private void userButton_login_Click(object sender, EventArgs e)
{
label_status.Visible = true;
//验证输入
if (string.IsNullOrEmpty(textBox_userName.Text))
{
label_status.Text = "请输入用户名";
textBox_userName.Focus();
return;
}
if(string.IsNullOrEmpty(textBox_password.Text))
{
label_status.Text = "请输入密码";
textBox_password.Focus();
return;
}
label_status.Text = "正在验证维护状态...";
UISettings(false);
ThreadAccountLogin = new Thread(ThreadCheckAccount);
ThreadAccountLogin.IsBackground = true;
ThreadAccountLogin.Start();
}
///
/// 界面的UI使能操作
///
/// 值
private void UISettings(bool enable)
{
textBox_userName.Enabled = enable;
textBox_password.Enabled = enable;
userButton_login.Enabled = enable;
checkBox_remeber.Enabled = enable;
}
#endregion
#region 账户验证的逻辑块
///
/// 用于验证的后台线程
///
private Thread ThreadAccountLogin = null;
///
/// 用户账户验证的后台端
///
private void ThreadCheckAccount()
{
//定义委托
Action message_show = delegate (string message)
{
label_status.Text = message;
};
Action start_update = delegate
{
//需要该exe支持,否则将无法是实现自动版本控制
string update_file_name = Application.StartupPath + @"\软件自动更新.exe";
try
{
System.Diagnostics.Process.Start(update_file_name);
Environment.Exit(0);//退出系统
}
catch
{
MessageBox.Show("更新程序启动失败,请检查文件是否丢失,联系管理员获取。");
}
};
Action thread_finish = delegate
{
UISettings(true);
};
//延时
Thread.Sleep(200);
//请求指令头数据,该数据需要更具实际情况更改
OperateResultString result = UserClient.Net_simplify_client.ReadFromServer(CommonLibrary.CommonHeadCode.SimplifyHeadCode.维护检查);
if(result.IsSuccess)
{
byte[] temp = Encoding.Unicode.GetBytes(result.Content);
//例如返回结果为1说明允许登录,0则说明服务器处于维护中,并将信息显示
if (result.Content != "1")
{
if (IsHandleCreated) Invoke(message_show, result.Content.Substring(1));
if (IsHandleCreated) Invoke(thread_finish);
return;
}
}
else
{
//访问失败
if (IsHandleCreated) Invoke(message_show, result.Message);
if (IsHandleCreated) Invoke(thread_finish);
return;
}
//检查账户
if (IsHandleCreated) Invoke(message_show, "正在检查账户...");
else return;
//延时
Thread.Sleep(200);
//===================================================================================
// 根据实际情况校验,选择数据库校验或是将用户名密码发至服务器校验
// 以下展示了服务器校验的方法,如您需要数据库校验,请删除下面并改成SQL访问验证的方式
//包装数据
JObject json = new JObject
{
{ UserAccount.UserNameText, new JValue(textBox_userName.Text) },
{ UserAccount.PasswordText, new JValue(textBox_password.Text) },
{ UserAccount.LoginWayText, new JValue("winform") }
};
result = UserClient.Net_simplify_client.ReadFromServer(CommonLibrary.CommonHeadCode.SimplifyHeadCode.账户检查, json.ToString());
if (result.IsSuccess)
{
//服务器应该返回账户的信息
UserAccount account = JObject.Parse(result.Content).ToObject();
if(!account.LoginEnable)
{
//不允许登录
if (IsHandleCreated) Invoke(message_show, account.ForbidMessage);
if (IsHandleCreated) Invoke(thread_finish);
return;
}
UserClient.UserAccount = account;
}
else
{
//访问失败
if (IsHandleCreated) Invoke(message_show, result.Message);
if (IsHandleCreated) Invoke(thread_finish);
return;
}
//登录成功,进行保存用户名称和密码
UserClient.JsonSettings.LoginName = textBox_userName.Text;
UserClient.JsonSettings.Password = checkBox_remeber.Checked ? textBox_password.Text : "";
UserClient.JsonSettings.LoginTime = DateTime.Now;
UserClient.JsonSettings.SaveToFile();
//版本验证
if (IsHandleCreated) Invoke(message_show, "正在验证版本...");
else return;
//延时
Thread.Sleep(200);
result = UserClient.Net_simplify_client.ReadFromServer(CommonLibrary.CommonHeadCode.SimplifyHeadCode.更新检查);
if (result.IsSuccess)
{
//服务器应该返回服务器的版本号
SystemVersion sv = new SystemVersion(result.Content);
//系统账户跳过低版本检测
if (UserClient.UserAccount.UserName != "admin")
{
if (UserClient.CurrentVersion != sv)
{
//保存新版本信息
UserClient.JsonSettings.IsNewVersionRunning = true;
UserClient.JsonSettings.SaveToFile();
//和当前系统版本号不一致,启动更新
if (IsHandleCreated) Invoke(start_update);
return;
}
}
else
{
if (UserClient.CurrentVersion < sv)
{
//保存新版本信息
UserClient.JsonSettings.IsNewVersionRunning = true;
UserClient.JsonSettings.SaveToFile();
//和当前系统版本号不一致,启动更新
if (IsHandleCreated) Invoke(start_update);
return;
}
}
}
else
{
//访问失败
if (IsHandleCreated) Invoke(message_show, result.Message);
if (IsHandleCreated) Invoke(thread_finish);
return;
}
//================================================================================
//验证结束后,根据需要是否下载服务器的数据,或是等到进入主窗口下载也可以
//如果有参数决定主窗口的显示方式,那么必要在下面向服务器请求数据
//以下展示了初始化参数的功能
if (IsHandleCreated) Invoke(message_show, "正在下载参数...");
else return;
//延时
Thread.Sleep(200);
result = UserClient.Net_simplify_client.ReadFromServer(CommonLibrary.CommonHeadCode.SimplifyHeadCode.参数下载);
if(result.IsSuccess)
{
//服务器返回初始化的数据,此处进行数据的提取,有可能包含了多个数据
json = Newtonsoft.Json.Linq.JObject.Parse(result.Content);
//例如公告数据
UserClient.Announcement = SoftBasic.GetValueFromJsonObject(json, nameof(UserClient.Announcement), "");
}
else
{
//访问失败
if (IsHandleCreated) Invoke(message_show, result.Message);
if (IsHandleCreated) Invoke(thread_finish);
return;
}
//启动主窗口
if (IsHandleCreated) Invoke(new Action(() =>
{
DialogResult = DialogResult.OK;
return;
}));
}
#endregion
}
}