代码重构,winform和wpf登录系统的逻辑进行提炼
This commit is contained in:
195
ClientsLibrary/AccountSupport/AccountLogin.cs
Normal file
195
ClientsLibrary/AccountSupport/AccountLogin.cs
Normal file
@@ -0,0 +1,195 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using HslCommunication;
|
||||
using System.Threading;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using CommonLibrary;
|
||||
using HslCommunication.BasicFramework;
|
||||
|
||||
namespace ClientsLibrary
|
||||
{
|
||||
|
||||
/*********************************************************************************
|
||||
*
|
||||
* 统一的账户登录模型
|
||||
*
|
||||
*
|
||||
*********************************************************************************/
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 用户客户端使用的统一登录的逻辑
|
||||
/// </summary>
|
||||
public class AccountLogin
|
||||
{
|
||||
/// <summary>
|
||||
/// 系统统一的登录模型
|
||||
/// </summary>
|
||||
/// <param name="message_show"></param>
|
||||
/// <param name="start_update"></param>
|
||||
/// <param name="thread_finish"></param>
|
||||
/// <param name="userName"></param>
|
||||
/// <param name="password"></param>
|
||||
/// <param name="remember"></param>
|
||||
/// <param name="clientType"></param>
|
||||
/// <returns></returns>
|
||||
public static bool AccountLoginServer(Action<string> message_show, Action start_update, Action thread_finish,string userName,string password,bool remember,string clientType)
|
||||
{
|
||||
message_show.Invoke("正在维护检查...");
|
||||
|
||||
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")
|
||||
{
|
||||
message_show.Invoke(result.Content.Substring(1));
|
||||
thread_finish.Invoke();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// 访问失败
|
||||
message_show.Invoke(result.Message);
|
||||
thread_finish.Invoke();
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// 检查账户
|
||||
message_show.Invoke("正在检查账户...");
|
||||
|
||||
// 延时
|
||||
Thread.Sleep(200);
|
||||
|
||||
//===================================================================================
|
||||
// 根据实际情况校验,选择数据库校验或是将用户名密码发至服务器校验
|
||||
// 以下展示了服务器校验的方法,如您需要数据库校验,请删除下面并改成SQL访问验证的方式
|
||||
|
||||
// 包装数据
|
||||
JObject json = new JObject
|
||||
{
|
||||
{ UserAccount.UserNameText, new JValue(userName) },
|
||||
{ UserAccount.PasswordText, new JValue(password) },
|
||||
{ UserAccount.LoginWayText, new JValue(clientType) },
|
||||
{ UserAccount.DeviceUniqueID, new JValue(UserClient.JsonSettings.SystemInfo) }
|
||||
};
|
||||
result = UserClient.Net_simplify_client.ReadFromServer(CommonHeadCode.SimplifyHeadCode.账户检查, json.ToString());
|
||||
if (result.IsSuccess)
|
||||
{
|
||||
// 服务器应该返回账户的信息
|
||||
UserAccount account = JObject.Parse(result.Content).ToObject<UserAccount>();
|
||||
if (!account.LoginEnable)
|
||||
{
|
||||
// 不允许登录
|
||||
message_show.Invoke(account.ForbidMessage);
|
||||
thread_finish.Invoke();
|
||||
return false;
|
||||
}
|
||||
UserClient.UserAccount = account;
|
||||
}
|
||||
else
|
||||
{
|
||||
// 访问失败
|
||||
message_show.Invoke(result.Message);
|
||||
thread_finish.Invoke();
|
||||
return false;
|
||||
}
|
||||
|
||||
// 登录成功,进行保存用户名称和密码
|
||||
UserClient.JsonSettings.LoginName = userName;
|
||||
UserClient.JsonSettings.Password = remember ? password : "";
|
||||
UserClient.JsonSettings.LoginTime = DateTime.Now;
|
||||
UserClient.JsonSettings.SaveToFile();
|
||||
|
||||
|
||||
// 版本验证
|
||||
message_show.Invoke("正在验证版本...");
|
||||
|
||||
// 延时
|
||||
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();
|
||||
// 和当前系统版本号不一致,启动更新
|
||||
start_update.Invoke();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (UserClient.CurrentVersion < sv)
|
||||
{
|
||||
// 保存新版本信息
|
||||
UserClient.JsonSettings.IsNewVersionRunning = true;
|
||||
UserClient.JsonSettings.SaveToFile();
|
||||
// 和当前系统版本号不一致,启动更新
|
||||
start_update.Invoke();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// 访问失败
|
||||
message_show.Invoke(result.Message);
|
||||
thread_finish.Invoke();
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// 验证结束后,根据需要是否下载服务器的数据,或是等到进入主窗口下载也可以
|
||||
// 如果有参数决定主窗口的显示方式,那么必要在下面向服务器请求数据
|
||||
// 以下展示了初始化参数的功能
|
||||
|
||||
message_show.Invoke("正在下载参数...");
|
||||
|
||||
// 延时
|
||||
Thread.Sleep(200);
|
||||
|
||||
|
||||
result = UserClient.Net_simplify_client.ReadFromServer(CommonLibrary.CommonHeadCode.SimplifyHeadCode.参数下载);
|
||||
if (result.IsSuccess)
|
||||
{
|
||||
// 服务器返回初始化的数据,此处进行数据的提取,有可能包含了多个数据
|
||||
json = JObject.Parse(result.Content);
|
||||
// 例如公告数据
|
||||
UserClient.Announcement = SoftBasic.GetValueFromJsonObject(json, nameof(UserClient.Announcement), "");
|
||||
if (json[nameof(UserClient.SystemFactories)] != null)
|
||||
{
|
||||
UserClient.SystemFactories = json[nameof(UserClient.SystemFactories)].ToObject<List<string>>();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// 访问失败
|
||||
message_show.Invoke(result.Message);
|
||||
thread_finish.Invoke();
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
83
ClientsLibrary/BasicSupport/FormShowMachineId.Designer.cs
generated
Normal file
83
ClientsLibrary/BasicSupport/FormShowMachineId.Designer.cs
generated
Normal file
@@ -0,0 +1,83 @@
|
||||
namespace ClientsLibrary
|
||||
{
|
||||
partial class FormShowMachineId
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormShowMachineId));
|
||||
this.textBox1 = new System.Windows.Forms.TextBox();
|
||||
this.userButton_login = new HslCommunication.Controls.UserButton();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// textBox1
|
||||
//
|
||||
this.textBox1.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
|
||||
this.textBox1.Location = new System.Drawing.Point(29, 26);
|
||||
this.textBox1.Name = "textBox1";
|
||||
this.textBox1.ReadOnly = true;
|
||||
this.textBox1.Size = new System.Drawing.Size(294, 29);
|
||||
this.textBox1.TabIndex = 0;
|
||||
//
|
||||
// userButton_login
|
||||
//
|
||||
this.userButton_login.BackColor = System.Drawing.Color.Transparent;
|
||||
this.userButton_login.CustomerInformation = "";
|
||||
this.userButton_login.EnableColor = System.Drawing.Color.FromArgb(((int)(((byte)(190)))), ((int)(((byte)(190)))), ((int)(((byte)(190)))));
|
||||
this.userButton_login.Font = new System.Drawing.Font("微软雅黑", 9F);
|
||||
this.userButton_login.Location = new System.Drawing.Point(125, 65);
|
||||
this.userButton_login.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
|
||||
this.userButton_login.Name = "userButton_login";
|
||||
this.userButton_login.Size = new System.Drawing.Size(108, 27);
|
||||
this.userButton_login.TabIndex = 6;
|
||||
this.userButton_login.UIText = "复制到剪贴板";
|
||||
this.userButton_login.Click += new System.EventHandler(this.userButton_login_Click);
|
||||
//
|
||||
// FormShowMachineId
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(356, 105);
|
||||
this.Controls.Add(this.userButton_login);
|
||||
this.Controls.Add(this.textBox1);
|
||||
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
||||
this.MaximizeBox = false;
|
||||
this.MinimizeBox = false;
|
||||
this.Name = "FormShowMachineId";
|
||||
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
|
||||
this.Text = "显示机器码";
|
||||
this.Load += new System.EventHandler(this.FormShowMachineId_Load);
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.TextBox textBox1;
|
||||
private HslCommunication.Controls.UserButton userButton_login;
|
||||
}
|
||||
}
|
||||
29
ClientsLibrary/BasicSupport/FormShowMachineId.cs
Normal file
29
ClientsLibrary/BasicSupport/FormShowMachineId.cs
Normal file
@@ -0,0 +1,29 @@
|
||||
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;
|
||||
|
||||
namespace ClientsLibrary
|
||||
{
|
||||
public partial class FormShowMachineId : Form
|
||||
{
|
||||
public FormShowMachineId()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
private void userButton_login_Click(object sender, EventArgs e)
|
||||
{
|
||||
Clipboard.SetText(textBox1.Text);
|
||||
}
|
||||
|
||||
private void FormShowMachineId_Load(object sender, EventArgs e)
|
||||
{
|
||||
textBox1.Text = UserClient.JsonSettings.SystemInfo;
|
||||
}
|
||||
}
|
||||
}
|
||||
294
ClientsLibrary/BasicSupport/FormShowMachineId.resx
Normal file
294
ClientsLibrary/BasicSupport/FormShowMachineId.resx
Normal file
@@ -0,0 +1,294 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
AAABAAYAICAQAAEABADoAgAAZgAAABAQEAABAAQAKAEAAE4DAAAgIAAAAQAIAKgIAAB2BAAAEBAAAAEA
|
||||
CABoBQAAHg0AACAgAAABACAAqBAAAIYSAAAQEAAAAQAgAGgEAAAuIwAAKAAAACAAAABAAAAAAQAEAAAA
|
||||
AAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA
|
||||
/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAAAAAAAAAAAAAAAAAAAAAA///////////////////wAP//
|
||||
////////////////8AD/d3d3f/d3d3f/d3d3f/AA/3d3d3/3d3d3/3d3d3/wAP93d3d/93d3d/93d3d/
|
||||
8AD/d3d3f/d3d3f/d3d3f/AA/3d3d3/3d3d3/3d3d3/wAP93d3d/93d3d/93d3d/8AD/d3d3f/d3d3f/
|
||||
d3d3f/AA///////////////////wAP//////////////////8AD/d3d3f/d3d3f/AAAAAAAA/3d3d3/3
|
||||
d3d3/wAAAAAAAP93d3d/93d3d/8AAAAAAAD/d3d3f/d3d3f/AA/wAAAA/3d3d3/3d3d3/wD//wAAAP93
|
||||
d3d/93d3d/8P///wAAD/d3d3f/d3d3f///d//wAA//////////////93d//wAP/////////////3d3d/
|
||||
/wD/d3d3f/AAAA//d3d3d//w/3d3d3/wAAD/93d3d3d///93d3d/8AAA//d3d3d3f///d3d3f/AAAA//
|
||||
d3d3d//w/3d3d3/wAAAA//d3d3//AP93d3d/8AAAAA//d3f/8AD/d3d3f/AAAAAA//d//wAA/4iIiI/w
|
||||
AAAAAA////AAAP//////8AAAAAAA//8AAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAP//
|
||||
//8AAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAD/8AAA//AAAP/wAA
|
||||
Dn8AAAw/AAAIHwAAAA8AAAAHAAAAAwAfgAEAHwAAAB8AAAAfgAEAH8ADAB/gBwAf8A8AH/gfAB/8P///
|
||||
/n//////KAAAABAAAAAgAAAAAQAEAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAACA
|
||||
gACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAAAAAAAAAAAAAA
|
||||
AAAAAAAAD////////wAPd393f3d/AA93f3d/d38AD3d/d393fwAP////////AA93f3d/AAAAD3d/d38A
|
||||
8AAPd393fw9/AA//////93fwD3d/AA93d38Pd38AAPd38A93fwAAD38AD///AAAA8AAAAAAAAAAAAP//
|
||||
AAD//wAAgAMAAIADAACAAwAAgAMAAIADAACAPwAAgDcAAIAjAACAAQAAg4AAAIPBAACD4wAAg/cAAP//
|
||||
AAAoAAAAIAAAAEAAAAABAAgAAAAAAAAEAAAAAAAAAAAAAAABAAAAAQAAAAAAAEJCQgCGhoYAycnJAPb2
|
||||
9gD5+fkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQE
|
||||
BAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQEAQEBAQEBAQQEAQEBAQEBAQQEAQEBAQEBAQQEAAAABAQBAQEB
|
||||
AQEBBAQBAQEBAQEBBAQBAQEBAQEBBAQAAAAEBAEBAQEBAQEEBAEBAQEBAQEEBAEBAQEBAQEEBAAAAAQE
|
||||
AQEBAQEBAQQEAQEBAQEBAQQEAQEBAQEBAQQEAAAABAQBAQEBAQEBBAQBAQEBAQEBBAQBAQEBAQEBBAQA
|
||||
AAAEBAEBAQEBAQEEBAEBAQEBAQEEBAEBAQEBAQEEBAAAAAQEAQEBAQEBAQQEAQEBAQEBAQQEAQEBAQEB
|
||||
AQQEAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQE
|
||||
BAQEBAQEBAAAAAQEAQEBAQEBAQQEAQEBAQEBAQQEAAAAAAAAAAAAAAAABAQBAQEBAQEBBAQBAQEBAQEB
|
||||
BAQAAAAAAAAAAAAAAAAEBAEBAQEBAQEEBAEBAQEBAQEEBAAAAAAAAAAAAAAAAAQEAQEBAQEBAQQEAQEB
|
||||
AQEBAQQEAAAABQUAAAAAAAAABAQBAQEBAQEBBAQBAQEBAQEBBAQAAAUEBAUAAAAAAAAEBAEBAQEBAQEE
|
||||
BAEBAQEBAQEEBAAFBAQEBAUAAAAAAAQEAQEBAQEBAQQEAQEBAQEBAQQEBQQEAgIEBAUAAAAABAQEBAQE
|
||||
BAQEBAQEBAQEBAQEBAQEBAIBAQIEBAUAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQCAQEBAQIEBAUAAAQE
|
||||
AQEBAQEBAQQEAAAAAAAABQQEAgEBAQEBAQIEBAUABAQBAQEBAQEBBAQAAAAAAAUEBAIBAQEBAQEBAQIE
|
||||
BAUEBAEBAQEBAQEEBAAAAAAABQQEAgEBAQEBAQEBAgQEBQQEAQEBAQEBAQQEAAAAAAAABQQEAgEBAQEB
|
||||
AQIEBAUABAQBAQEBAQEBBAQAAAAAAAAABQQEAgEBAQECBAQFAAAEBAEBAQEBAQEEBAAAAAAAAAAABQQE
|
||||
AgEBAgQEBQAAAAQEAQEBAQEBAQQEAAAAAAAAAAAABQQEAgIEBAUAAAAABAQDAwMDAwMDBAQAAAAAAAAA
|
||||
AAAABQQEBAQFAAAAAAAEBAQEBAQEBAQEBAAAAAAAAAAAAAAABQQEBQAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAABQUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////AAAABwAA
|
||||
AAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAA//AAAP/wAAD/8AAA5/AAAMPwAA
|
||||
CB8AAAAPAAAABwAAAAMAH4ABAB8AAAAfAAAAH4ABAB/AAwAf4AcAH/APAB/4HwAf/D////5//////ygA
|
||||
AAAQAAAAIAAAAAEACAAAAAAAAAEAAAAAAAAAAAAAAAEAAAABAAAAAAAAQkJCAGRkZACGhoYA6+vrAPb2
|
||||
9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAABQUFBQUFBQUFBQUFBQAAAAUBAQEFAQEBBQEBAQUAAAAFAQEBBQEBAQUBAQEF
|
||||
AAAABQEBAQUBAQEFAQEBBQAAAAUFBQUFBQUFBQUFBQUAAAAFAQEBBQEBAQUAAAAAAAAABQEBAQUBAQEF
|
||||
AAAFAAAAAAUBAQEFAQEBBQAEAwQAAAAFBQUFBQUFBQUEAgECBAAABQEBAQUAAAAFAwEBAQMFAAUBAQEF
|
||||
AAAAAAQCAQIEAAAFAQEBBQAAAAAABAMEAAAABQUFBQUAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAP//
|
||||
AAD//wAAgAMAAIADAACAAwAAgAMAAIADAACAPwAAgDcAAIAjAACAAQAAg4AAAIPBAACD4wAAg/cAAP//
|
||||
AAAoAAAAIAAAAEAAAAABACAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2//b2
|
||||
9v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b2
|
||||
9v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2/wAAAAAAAAAAAAAAAPb2
|
||||
9v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b2
|
||||
9v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/AAAAAAAA
|
||||
AAAAAAAA9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v9CQkL/QkJC/0JC
|
||||
Qv9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2//b2
|
||||
9v8AAAAAAAAAAAAAAAD29vb/9vb2/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2/0JC
|
||||
Qv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JC
|
||||
Qv/29vb/9vb2/wAAAAAAAAAAAAAAAPb29v/29vb/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC//b2
|
||||
9v/29vb/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC//b29v/29vb/QkJC/0JCQv9CQkL/QkJC/0JC
|
||||
Qv9CQkL/QkJC//b29v/29vb/AAAAAAAAAAAAAAAA9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JC
|
||||
Qv9CQkL/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v9CQkL/QkJC/0JC
|
||||
Qv9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v8AAAAAAAAAAAAAAAD29vb/9vb2/0JCQv9CQkL/QkJC/0JC
|
||||
Qv9CQkL/QkJC/0JCQv/29vb/9vb2/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2/0JC
|
||||
Qv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2/wAAAAAAAAAAAAAAAPb29v/29vb/QkJC/0JC
|
||||
Qv9CQkL/QkJC/0JCQv9CQkL/QkJC//b29v/29vb/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC//b2
|
||||
9v/29vb/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC//b29v/29vb/AAAAAAAAAAAAAAAA9vb2//b2
|
||||
9v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JC
|
||||
Qv9CQkL/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v8AAAAAAAAAAAAA
|
||||
AAD29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b2
|
||||
9v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2/wAA
|
||||
AAAAAAAAAAAAAPb29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b2
|
||||
9v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b2
|
||||
9v/29vb/AAAAAAAAAAAAAAAA9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2//b2
|
||||
9v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JC
|
||||
Qv/29vb/9vb2/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2/wAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29v/29vb/QkJC/0JCQv9CQkL/QkJC/0JC
|
||||
Qv9CQkL/QkJC//b29v/29vb/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC//b29v/29vb/AAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2//b29v9CQkL/QkJC/0JC
|
||||
Qv9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2//b2
|
||||
9v8AAAAAAAAAAAAAAAD29vaf9vb2nwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2/0JC
|
||||
Qv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JC
|
||||
Qv/29vb/9vb2/wAAAAAAAAAA9vb2n/b29v/29vb/9vb2nwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb2
|
||||
9v/29vb/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC//b29v/29vb/QkJC/0JCQv9CQkL/QkJC/0JC
|
||||
Qv9CQkL/QkJC//b29v/29vb/AAAAAPb29p/29vb/9vb2//b29v/29vb/9vb2nwAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAA9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v9CQkL/QkJC/0JC
|
||||
Qv9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v/29vaf9vb2//b29v+Ghob/hoaG//b29v/29vb/9vb2nwAA
|
||||
AAAAAAAAAAAAAAAAAAD29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b2
|
||||
9v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/hoaG/0JCQv9CQkL/hoaG//b2
|
||||
9v/29vb/9vb2nwAAAAAAAAAAAAAAAPb29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b2
|
||||
9v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2/4aGhv9CQkL/QkJC/0JC
|
||||
Qv9CQkL/hoaG//b29v/29vb/9vb2nwAAAAAAAAAA9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JC
|
||||
Qv9CQkL/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vaf9vb2//b29v+Ghob/QkJC/0JC
|
||||
Qv9CQkL/QkJC/0JCQv9CQkL/hoaG//b29v/29vb/9vb2nwAAAAD29vb/9vb2/0JCQv9CQkL/QkJC/0JC
|
||||
Qv9CQkL/QkJC/0JCQv/29vb/9vb2/wAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2n/b29v/29vb/hoaG/0JC
|
||||
Qv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/hoaG//b29v/29vb/9vb2n/b29v/29vb/QkJC/0JC
|
||||
Qv9CQkL/QkJC/0JCQv9CQkL/QkJC//b29v/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAD29vaf9vb2//b2
|
||||
9v+Ghob/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv+Ghob/9vb2//b29v/29vaf9vb2//b2
|
||||
9v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAD29vaf9vb2//b29v+Ghob/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/hoaG//b29v/29vb/9vb2nwAA
|
||||
AAD29vb/9vb2/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/9vb2/wAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAD29vaf9vb2//b29v+Ghob/QkJC/0JCQv9CQkL/QkJC/4aGhv/29vb/9vb2//b2
|
||||
9p8AAAAAAAAAAPb29v/29vb/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC//b29v/29vb/AAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vaf9vb2//b29v+Ghob/QkJC/0JCQv+Ghob/9vb2//b2
|
||||
9v/29vafAAAAAAAAAAAAAAAA9vb2//b29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2//b2
|
||||
9v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vaf9vb2//b29v+Ghob/hoaG//b2
|
||||
9v/29vb/9vb2nwAAAAAAAAAAAAAAAAAAAAD29vb/9vb2/8nJyf/Jycn/ycnJ/8nJyf/Jycn/ycnJ/8nJ
|
||||
yf/29vb/9vb2/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vaf9vb2//b2
|
||||
9v/29vb/9vb2//b29p8AAAAAAAAAAAAAAAAAAAAAAAAAAPb29v/29vb/9vb2//b29v/29vb/9vb2//b2
|
||||
9v/29vb/9vb2//b29v/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAD29vaf9vb2//b29v/29vafAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2QPb29kD29vZA9vb2QPb2
|
||||
9kD29vZA9vb2QPb29kD29vZA9vb2QPb29kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAD29vaf9vb2nwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//
|
||||
//8AAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAD/8AAA//AAAP/wAA
|
||||
Dn8AAAw/AAAIHwAAAA8AAAAHAAAAAwAfgAEAHwAAAB8AAAAfgAEAH8ADAB/gBwAf8A8AH/gfAB/8PwAf
|
||||
/n//////KAAAABAAAAAgAAAAAQAgAAAAAABABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb2
|
||||
9v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v8AAAAAAAAAAAAA
|
||||
AAD29vb/QkJC/0JCQv9CQkL/9vb2/0JCQv9CQkL/QkJC//b29v9CQkL/QkJC/0JCQv/29vb/AAAAAAAA
|
||||
AAAAAAAA9vb2/0JCQv9CQkL/QkJC//b29v9CQkL/QkJC/0JCQv/29vb/QkJC/0JCQv9CQkL/9vb2/wAA
|
||||
AAAAAAAAAAAAAPb29v9CQkL/QkJC/0JCQv/29vb/QkJC/0JCQv9CQkL/9vb2/0JCQv9CQkL/QkJC//b2
|
||||
9v8AAAAAAAAAAAAAAAD29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b2
|
||||
9v/29vb/AAAAAAAAAAAAAAAA9vb2/0JCQv9CQkL/QkJC//b29v9CQkL/QkJC/0JCQv/29vb/AAAAAAAA
|
||||
AAD29vYgAAAAAAAAAAAAAAAAAAAAAPb29v9CQkL/QkJC/0JCQv/29vb/QkJC/0JCQv9CQkL/9vb2/wAA
|
||||
AAD29vZg9vb2//b29mAAAAAAAAAAAAAAAAD29vb/QkJC/0JCQv9CQkL/9vb2/0JCQv9CQkL/QkJC//b2
|
||||
9v/29vZg6+vr/4aGhv/r6+v/9vb2YAAAAAAAAAAA9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b2
|
||||
9v/29vb/6+vr/2RkZP9CQkL/ZGRk/+vr6//29vZgAAAAAPb29v9CQkL/QkJC/0JCQv/29vb/AAAAAAAA
|
||||
AAD29vYg9vb2/4aGhv9CQkL/QkJC/0JCQv+Ghob/9vb27wAAAAD29vb/QkJC/0JCQv9CQkL/9vb2/wAA
|
||||
AAAAAAAAAAAAAPb29mDr6+v/ZGRk/0JCQv9kZGT/6urq7/b29jAAAAAA9vb2/0JCQv9CQkL/QkJC//b2
|
||||
9v8AAAAAAAAAAAAAAAAAAAAA9vb2YOvr6/+Ghob/6urq7/b29jAAAAAAAAAAAPb29v/29vb/9vb2//b2
|
||||
9v/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAD29vZg9vb27/b29jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAA//8AAIAD
|
||||
AACAAwAAgAMAAIADAACAAwAAgDcAAIAjAACAAQAAgAAAAIMAAACDgAAAg8EAAIPjAAD//wAA
|
||||
</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -49,12 +49,19 @@
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="FormDownloading.cs">
|
||||
<Compile Include="AccountSupport\AccountLogin.cs" />
|
||||
<Compile Include="BasicSupport\FormDownloading.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="FormDownloading.Designer.cs">
|
||||
<Compile Include="BasicSupport\FormDownloading.Designer.cs">
|
||||
<DependentUpon>FormDownloading.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="BasicSupport\FormShowMachineId.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="BasicSupport\FormShowMachineId.Designer.cs">
|
||||
<DependentUpon>FormShowMachineId.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="LogsSupport\FormLogView.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
@@ -78,9 +85,12 @@
|
||||
<Compile Include="UserPortrait.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="FormDownloading.resx">
|
||||
<EmbeddedResource Include="BasicSupport\FormDownloading.resx">
|
||||
<DependentUpon>FormDownloading.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="BasicSupport\FormShowMachineId.resx">
|
||||
<DependentUpon>FormShowMachineId.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="LogsSupport\FormLogView.resx">
|
||||
<DependentUpon>FormLogView.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
|
||||
BIN
ClientsLibrary/RegistryEditor_5838.ico
Normal file
BIN
ClientsLibrary/RegistryEditor_5838.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 9.9 KiB |
@@ -38,7 +38,7 @@ namespace ClientsLibrary
|
||||
/// <summary>
|
||||
/// 服务器的IP地址,默认为127.0.0.1,可用于单机调试,云服务器端:117.48.203.204
|
||||
/// </summary>
|
||||
public static string ServerIp { get; } = "127.0.0.1";//用于测试的云服务器地址
|
||||
public static string ServerIp { get; } = "117.48.203.204";//用于测试的云服务器地址
|
||||
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -48,8 +48,7 @@ namespace CommonLibrary
|
||||
/// </summary>
|
||||
public string Announcement { get; set; } = "测试公告";
|
||||
/// <summary>
|
||||
/// 是否允许账户登录
|
||||
/// 超级管理员账户除外
|
||||
/// 是否允许账户登录,超级管理员账户除外
|
||||
/// </summary>
|
||||
public bool Can_Account_Login { get; set; } = true;
|
||||
/// <summary>
|
||||
|
||||
@@ -88,8 +88,8 @@
|
||||
<ColumnDefinition Width="*"></ColumnDefinition>
|
||||
<ColumnDefinition Width="auto"></ColumnDefinition>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Grid.Column="0" Style="{StaticResource Caption}">版本号:</TextBlock>
|
||||
<TextBlock x:Name="TextBlockSoftVersion" Grid.Column="1" Style="{StaticResource Caption}">V1.0.0</TextBlock>
|
||||
<TextBlock Grid.Column="0" Style="{StaticResource Caption}" MouseLeftButtonDown="TextBlock_MouseLeftButtonDown">版本号:</TextBlock>
|
||||
<TextBlock x:Name="TextBlockSoftVersion" Grid.Column="1" Style="{StaticResource Caption}" MouseLeftButtonDown="TextBlock_MouseLeftButtonDown">V1.0.0</TextBlock>
|
||||
<TextBlock x:Name="TextBlockSoftCopyright" Grid.Column="3" Style="{StaticResource Caption}">本软件著作权归某某所有</TextBlock>
|
||||
</Grid>
|
||||
</Grid>
|
||||
|
||||
@@ -28,14 +28,60 @@ namespace 软件系统客户端Wpf
|
||||
/// </summary>
|
||||
public partial class LoginWindow : Window
|
||||
{
|
||||
#region Constructor
|
||||
|
||||
public LoginWindow()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
// 加载本地保存的数据
|
||||
UserClient.JsonSettings.FileSavePath = AppDomain.CurrentDomain.BaseDirectory + @"JsonSettings.txt";
|
||||
UserClient.JsonSettings.LoadByFile();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Window Load
|
||||
|
||||
private void Window_Loaded(object sender, RoutedEventArgs e)
|
||||
{
|
||||
WindowToolTip.Opacity = 0;
|
||||
TextBlockSoftName.Text = CommonLibrary.Resource.StringResouce.SoftName;
|
||||
TextBlockSoftVersion.Text = UserClient.CurrentVersion.ToString();
|
||||
TextBlockSoftCopyright.Text = $"本软件著作权归{CommonLibrary.Resource.StringResouce.SoftCopyRight}所有";
|
||||
|
||||
|
||||
// 上次登录为7天以前则清除账户密码
|
||||
if ((DateTime.Now - UserClient.JsonSettings.LoginTime).TotalDays < 7)
|
||||
{
|
||||
//加载数据
|
||||
NameTextBox.Text = UserClient.JsonSettings.LoginName ?? "";
|
||||
PasswordBox.Password = UserClient.JsonSettings.Password ?? "";
|
||||
Remember.IsChecked = UserClient.JsonSettings.Password != "";
|
||||
}
|
||||
//初始化输入焦点
|
||||
if (UserClient.JsonSettings.Password != "") LoginButton.Focus();
|
||||
else if (UserClient.JsonSettings.LoginName != "") PasswordBox.Focus();
|
||||
else NameTextBox.Focus();
|
||||
|
||||
|
||||
// 加载原先保存的主题配色
|
||||
if (File.Exists(AppDomain.CurrentDomain.BaseDirectory + @"Palette.txt"))
|
||||
{
|
||||
using (StreamReader sr = new StreamReader(AppDomain.CurrentDomain.BaseDirectory + @"Palette.txt", Encoding.UTF8))
|
||||
{
|
||||
string temp = sr.ReadToEnd();
|
||||
MaterialDesignThemes.Wpf.Palette obj = JObject.Parse(temp).ToObject<MaterialDesignThemes.Wpf.Palette>();
|
||||
new PaletteHelper().ReplacePalette(obj);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Login Click
|
||||
|
||||
|
||||
private void Button_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
//启动线程登录
|
||||
@@ -66,10 +112,11 @@ namespace 软件系统客户端Wpf
|
||||
ThreadAccountLogin.Start();
|
||||
}
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
#region 账户验证的逻辑块
|
||||
|
||||
|
||||
|
||||
private string UserName = string.Empty;
|
||||
private string UserPassword = string.Empty;
|
||||
private bool IsChecked = false;
|
||||
@@ -86,183 +133,63 @@ namespace 软件系统客户端Wpf
|
||||
//定义委托
|
||||
Action<string> message_show = delegate (string message)
|
||||
{
|
||||
SetInformationString(message);
|
||||
Dispatcher.Invoke(new Action(() =>
|
||||
{
|
||||
SetInformationString(message);
|
||||
}));
|
||||
};
|
||||
Action start_update = delegate
|
||||
{
|
||||
//需要该exe支持,否则将无法是实现自动版本控制
|
||||
string update_file_name = AppDomain.CurrentDomain.BaseDirectory + @"软件自动更新.exe";
|
||||
try
|
||||
Dispatcher.Invoke(new Action(() =>
|
||||
{
|
||||
System.Diagnostics.Process.Start(update_file_name);
|
||||
Environment.Exit(0);//退出系统
|
||||
}
|
||||
catch
|
||||
{
|
||||
MessageBox.Show("更新程序启动失败,请检查文件是否丢失,联系管理员获取。");
|
||||
}
|
||||
//需要该exe支持,否则将无法是实现自动版本控制
|
||||
string update_file_name = AppDomain.CurrentDomain.BaseDirectory + @"软件自动更新.exe";
|
||||
try
|
||||
{
|
||||
System.Diagnostics.Process.Start(update_file_name);
|
||||
Environment.Exit(0);//退出系统
|
||||
}
|
||||
catch
|
||||
{
|
||||
MessageBox.Show("更新程序启动失败,请检查文件是否丢失,联系管理员获取。");
|
||||
}
|
||||
}));
|
||||
};
|
||||
Action thread_finish = delegate
|
||||
{
|
||||
UISettings(true);
|
||||
Dispatcher.Invoke(new Action(() =>
|
||||
{
|
||||
UISettings(true);
|
||||
}));
|
||||
};
|
||||
|
||||
//延时
|
||||
Thread.Sleep(400);
|
||||
|
||||
//请求指令头数据,该数据需要更具实际情况更改
|
||||
OperateResultString result = UserClient.Net_simplify_client.ReadFromServer(CommonHeadCode.SimplifyHeadCode.维护检查);
|
||||
if (result.IsSuccess)
|
||||
// 启动密码验证
|
||||
if (AccountLogin.AccountLoginServer(
|
||||
message_show,
|
||||
start_update,
|
||||
thread_finish,
|
||||
UserName,
|
||||
UserPassword,
|
||||
IsChecked,
|
||||
"wpf"))
|
||||
{
|
||||
byte[] temp = Encoding.Unicode.GetBytes(result.Content);
|
||||
//例如返回结果为1说明允许登录,0则说明服务器处于维护中,并将信息显示
|
||||
if (result.Content != "1")
|
||||
//启动主窗口
|
||||
Dispatcher.Invoke(new Action(() =>
|
||||
{
|
||||
Dispatcher.Invoke(message_show, result.Content.Substring(1));
|
||||
Dispatcher.Invoke(thread_finish);
|
||||
DialogResult = true;
|
||||
return;
|
||||
}
|
||||
}));
|
||||
}
|
||||
else
|
||||
{
|
||||
//访问失败
|
||||
Dispatcher.Invoke(message_show, result.Message);
|
||||
Dispatcher.Invoke(thread_finish);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//检查账户
|
||||
Dispatcher.Invoke(message_show, "正在检查账户...");
|
||||
|
||||
//延时
|
||||
Thread.Sleep(400);
|
||||
|
||||
//===================================================================================
|
||||
// 根据实际情况校验,选择数据库校验或是将用户名密码发至服务器校验
|
||||
// 以下展示了服务器校验的方法,如您需要数据库校验,请删除下面并改成SQL访问验证的方式
|
||||
|
||||
//包装数据
|
||||
JObject json = new JObject
|
||||
{
|
||||
{ UserAccount.UserNameText, new JValue(UserName) },
|
||||
{ UserAccount.PasswordText, new JValue(UserPassword) },
|
||||
{ UserAccount.LoginWayText, new JValue("wpf") }
|
||||
};
|
||||
result = UserClient.Net_simplify_client.ReadFromServer(CommonLibrary.CommonHeadCode.SimplifyHeadCode.账户检查, json.ToString());
|
||||
if (result.IsSuccess)
|
||||
{
|
||||
//服务器应该返回账户的信息
|
||||
UserAccount account = JObject.Parse(result.Content).ToObject<UserAccount>();
|
||||
if (!account.LoginEnable)
|
||||
{
|
||||
//不允许登录
|
||||
Dispatcher.Invoke(message_show, account.ForbidMessage);
|
||||
Dispatcher.Invoke(thread_finish);
|
||||
return;
|
||||
}
|
||||
UserClient.UserAccount = account;
|
||||
}
|
||||
else
|
||||
{
|
||||
//访问失败
|
||||
Dispatcher.Invoke(message_show, result.Message);
|
||||
Dispatcher.Invoke(thread_finish);
|
||||
return;
|
||||
}
|
||||
|
||||
//登录成功,进行保存用户名称和密码
|
||||
UserClient.JsonSettings.LoginName = UserName;
|
||||
UserClient.JsonSettings.Password = IsChecked ? UserPassword : "";
|
||||
UserClient.JsonSettings.LoginTime = DateTime.Now;
|
||||
UserClient.JsonSettings.SaveToFile();
|
||||
|
||||
|
||||
//版本验证
|
||||
Dispatcher.Invoke(message_show, "正在验证版本...");
|
||||
|
||||
//延时
|
||||
Thread.Sleep(400);
|
||||
|
||||
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();
|
||||
//和当前系统版本号不一致,启动更新
|
||||
Dispatcher.Invoke(start_update);
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (UserClient.CurrentVersion < sv)
|
||||
{
|
||||
//保存新版本信息
|
||||
UserClient.JsonSettings.IsNewVersionRunning = true;
|
||||
UserClient.JsonSettings.SaveToFile();
|
||||
//和当前系统版本号不一致,启动更新
|
||||
Dispatcher.Invoke(start_update);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//访问失败
|
||||
Dispatcher.Invoke(message_show, result.Message);
|
||||
Dispatcher.Invoke(thread_finish);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
//================================================================================
|
||||
//验证结束后,根据需要是否下载服务器的数据,或是等到进入主窗口下载也可以
|
||||
//如果有参数决定主窗口的显示方式,那么必要在下面向服务器请求数据
|
||||
//以下展示了初始化参数的功能
|
||||
Dispatcher.Invoke(message_show, "正在下载参数...");
|
||||
|
||||
//延时
|
||||
Thread.Sleep(400);
|
||||
|
||||
|
||||
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
|
||||
{
|
||||
//访问失败
|
||||
Dispatcher.Invoke(message_show, result.Message);
|
||||
Dispatcher.Invoke(thread_finish);
|
||||
return;
|
||||
}
|
||||
|
||||
//启动主窗口
|
||||
Dispatcher.Invoke(new Action(() =>
|
||||
{
|
||||
DialogResult = true;
|
||||
return;
|
||||
}));
|
||||
|
||||
}
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
#region User Interface
|
||||
|
||||
|
||||
private void UISettings(bool enable)
|
||||
{
|
||||
NameTextBox.IsEnabled = enable;
|
||||
@@ -302,39 +229,7 @@ namespace 软件系统客户端Wpf
|
||||
LoginButton.Focus();
|
||||
}
|
||||
|
||||
private void Window_Loaded(object sender, RoutedEventArgs e)
|
||||
{
|
||||
WindowToolTip.Opacity = 0;
|
||||
TextBlockSoftName.Text = CommonLibrary.Resource.StringResouce.SoftName;
|
||||
TextBlockSoftVersion.Text = UserClient.CurrentVersion.ToString();
|
||||
TextBlockSoftCopyright.Text = $"本软件著作权归{CommonLibrary.Resource.StringResouce.SoftCopyRight}所有";
|
||||
|
||||
|
||||
// 上次登录为7天以前则清除账户密码
|
||||
if ((DateTime.Now - UserClient.JsonSettings.LoginTime).TotalDays < 7)
|
||||
{
|
||||
//加载数据
|
||||
NameTextBox.Text = UserClient.JsonSettings.LoginName ?? "";
|
||||
PasswordBox.Password = UserClient.JsonSettings.Password ?? "";
|
||||
Remember.IsChecked = UserClient.JsonSettings.Password != "";
|
||||
}
|
||||
//初始化输入焦点
|
||||
if (UserClient.JsonSettings.Password != "") LoginButton.Focus();
|
||||
else if (UserClient.JsonSettings.LoginName != "") PasswordBox.Focus();
|
||||
else NameTextBox.Focus();
|
||||
|
||||
|
||||
|
||||
if (File.Exists(AppDomain.CurrentDomain.BaseDirectory + @"Palette.txt"))
|
||||
{
|
||||
using (StreamReader sr = new StreamReader(AppDomain.CurrentDomain.BaseDirectory + @"Palette.txt", Encoding.UTF8))
|
||||
{
|
||||
string temp = sr.ReadToEnd();
|
||||
MaterialDesignThemes.Wpf.Palette obj = JObject.Parse(temp).ToObject<MaterialDesignThemes.Wpf.Palette>();
|
||||
new PaletteHelper().ReplacePalette(obj);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void NameTextBox_KeyDown(object sender, KeyEventArgs e)
|
||||
{
|
||||
@@ -345,5 +240,19 @@ namespace 软件系统客户端Wpf
|
||||
{
|
||||
if (e.Key == Key.Enter) Button_Click(null, new RoutedEventArgs());
|
||||
}
|
||||
|
||||
|
||||
private void TextBlock_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
using (FormShowMachineId form = new FormShowMachineId())
|
||||
{
|
||||
form.ShowDialog();
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
4
软件系统客户端模版/FormLogin.Designer.cs
generated
4
软件系统客户端模版/FormLogin.Designer.cs
generated
@@ -35,7 +35,7 @@ namespace 软件系统客户端模版
|
||||
this.textBox_userName = new System.Windows.Forms.TextBox();
|
||||
this.textBox_password = new System.Windows.Forms.TextBox();
|
||||
this.label3 = new System.Windows.Forms.Label();
|
||||
this.userButton_login = new UserButton();
|
||||
this.userButton_login = new HslCommunication.Controls.UserButton();
|
||||
this.label_version = new System.Windows.Forms.Label();
|
||||
this.label_copyright = new System.Windows.Forms.Label();
|
||||
this.label_status = new System.Windows.Forms.Label();
|
||||
@@ -106,6 +106,7 @@ namespace 软件系统客户端模版
|
||||
// label_version
|
||||
//
|
||||
this.label_version.AutoSize = true;
|
||||
this.label_version.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||
this.label_version.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
|
||||
this.label_version.ForeColor = System.Drawing.Color.Gray;
|
||||
this.label_version.Location = new System.Drawing.Point(1, 176);
|
||||
@@ -113,6 +114,7 @@ namespace 软件系统客户端模版
|
||||
this.label_version.Size = new System.Drawing.Size(44, 17);
|
||||
this.label_version.TabIndex = 6;
|
||||
this.label_version.Text = "版本:";
|
||||
this.label_version.Click += new System.EventHandler(this.label_version_Click);
|
||||
//
|
||||
// label_copyright
|
||||
//
|
||||
|
||||
@@ -146,193 +146,75 @@ namespace 软件系统客户端模版
|
||||
private void ThreadCheckAccount()
|
||||
{
|
||||
// 定义委托
|
||||
|
||||
// 消息显示委托
|
||||
Action<string> message_show = delegate (string message)
|
||||
{
|
||||
label_status.Text = message;
|
||||
};
|
||||
{
|
||||
if (IsHandleCreated) Invoke(new Action(() =>
|
||||
{
|
||||
label_status.Text = message;
|
||||
}));
|
||||
};
|
||||
// 启动更新委托
|
||||
Action start_update = delegate
|
||||
{
|
||||
// 需要该exe支持,否则将无法是实现自动版本控制
|
||||
string update_file_name = Application.StartupPath + @"\软件自动更新.exe";
|
||||
try
|
||||
if (IsHandleCreated) Invoke(new Action(() =>
|
||||
{
|
||||
System.Diagnostics.Process.Start(update_file_name);
|
||||
Environment.Exit(0);//退出系统
|
||||
}
|
||||
catch
|
||||
{
|
||||
MessageBox.Show("更新程序启动失败,请检查文件是否丢失,联系管理员获取。");
|
||||
}
|
||||
// 需要该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);
|
||||
if (IsHandleCreated) Invoke(new Action(() =>
|
||||
{
|
||||
UISettings(true);
|
||||
}));
|
||||
};
|
||||
|
||||
// 延时
|
||||
Thread.Sleep(200);
|
||||
|
||||
// 请求指令头数据,该数据需要更具实际情况更改
|
||||
OperateResultString result = UserClient.Net_simplify_client.ReadFromServer(CommonLibrary.CommonHeadCode.SimplifyHeadCode.维护检查);
|
||||
if(result.IsSuccess)
|
||||
// 启动密码验证
|
||||
if(AccountLogin.AccountLoginServer(
|
||||
message_show,
|
||||
start_update,
|
||||
thread_finish,
|
||||
textBox_userName.Text,
|
||||
textBox_password.Text,
|
||||
checkBox_remeber.Checked,
|
||||
"winform"))
|
||||
{
|
||||
byte[] temp = Encoding.Unicode.GetBytes(result.Content);
|
||||
// 例如返回结果为1说明允许登录,0则说明服务器处于维护中,并将信息显示
|
||||
if (result.Content != "1")
|
||||
// 启动主窗口
|
||||
if (IsHandleCreated) Invoke(new Action(() =>
|
||||
{
|
||||
if (IsHandleCreated) Invoke(message_show, result.Content.Substring(1));
|
||||
if (IsHandleCreated) Invoke(thread_finish);
|
||||
DialogResult = DialogResult.OK;
|
||||
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") },
|
||||
{ UserAccount.DeviceUniqueID, new JValue(UserClient.JsonSettings.SystemInfo) }
|
||||
};
|
||||
result = UserClient.Net_simplify_client.ReadFromServer(CommonLibrary.CommonHeadCode.SimplifyHeadCode.账户检查, json.ToString());
|
||||
if (result.IsSuccess)
|
||||
{
|
||||
// 服务器应该返回账户的信息
|
||||
UserAccount account = JObject.Parse(result.Content).ToObject<UserAccount>();
|
||||
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 = JObject.Parse(result.Content);
|
||||
// 例如公告数据
|
||||
UserClient.Announcement = SoftBasic.GetValueFromJsonObject(json, nameof(UserClient.Announcement), "");
|
||||
if (json[nameof(UserClient.SystemFactories)] != null)
|
||||
{
|
||||
UserClient.SystemFactories = json[nameof(UserClient.SystemFactories)].ToObject<List<string>>();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// 访问失败
|
||||
if (IsHandleCreated) Invoke(message_show, result.Message);
|
||||
if (IsHandleCreated) Invoke(thread_finish);
|
||||
return;
|
||||
}
|
||||
|
||||
// 启动主窗口
|
||||
if (IsHandleCreated) Invoke(new Action(() =>
|
||||
{
|
||||
DialogResult = DialogResult.OK;
|
||||
return;
|
||||
}));
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
#region 显示本机ID
|
||||
|
||||
private void label_version_Click(object sender, EventArgs e)
|
||||
{
|
||||
using (FormShowMachineId form = new FormShowMachineId())
|
||||
{
|
||||
form.ShowDialog();
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,7 +44,7 @@ namespace 软件系统浏览器模版.Controllers
|
||||
public ActionResult Login(FormCollection fc)
|
||||
{
|
||||
//请求指令头数据,该数据需要更具实际情况更改
|
||||
OperateResultString result = UserClient.Net_simplify_client.ReadFromServer(CommonLibrary.CommonHeadCode.SimplifyHeadCode.维护检查);
|
||||
OperateResultString result = UserClient.Net_simplify_client.ReadFromServer(CommonHeadCode.SimplifyHeadCode.维护检查);
|
||||
if (result.IsSuccess)
|
||||
{
|
||||
//例如返回结果为1说明允许登录,0则说明服务器处于维护中,并将信息显示
|
||||
|
||||
Reference in New Issue
Block a user