代码重构,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" />
|
<Reference Include="System.Xml" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="FormDownloading.cs">
|
<Compile Include="AccountSupport\AccountLogin.cs" />
|
||||||
|
<Compile Include="BasicSupport\FormDownloading.cs">
|
||||||
<SubType>Form</SubType>
|
<SubType>Form</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="FormDownloading.Designer.cs">
|
<Compile Include="BasicSupport\FormDownloading.Designer.cs">
|
||||||
<DependentUpon>FormDownloading.cs</DependentUpon>
|
<DependentUpon>FormDownloading.cs</DependentUpon>
|
||||||
</Compile>
|
</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">
|
<Compile Include="LogsSupport\FormLogView.cs">
|
||||||
<SubType>Form</SubType>
|
<SubType>Form</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
@@ -78,9 +85,12 @@
|
|||||||
<Compile Include="UserPortrait.cs" />
|
<Compile Include="UserPortrait.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<EmbeddedResource Include="FormDownloading.resx">
|
<EmbeddedResource Include="BasicSupport\FormDownloading.resx">
|
||||||
<DependentUpon>FormDownloading.cs</DependentUpon>
|
<DependentUpon>FormDownloading.cs</DependentUpon>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="BasicSupport\FormShowMachineId.resx">
|
||||||
|
<DependentUpon>FormShowMachineId.cs</DependentUpon>
|
||||||
|
</EmbeddedResource>
|
||||||
<EmbeddedResource Include="LogsSupport\FormLogView.resx">
|
<EmbeddedResource Include="LogsSupport\FormLogView.resx">
|
||||||
<DependentUpon>FormLogView.cs</DependentUpon>
|
<DependentUpon>FormLogView.cs</DependentUpon>
|
||||||
</EmbeddedResource>
|
</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>
|
/// <summary>
|
||||||
/// 服务器的IP地址,默认为127.0.0.1,可用于单机调试,云服务器端:117.48.203.204
|
/// 服务器的IP地址,默认为127.0.0.1,可用于单机调试,云服务器端:117.48.203.204
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static string ServerIp { get; } = "127.0.0.1";//用于测试的云服务器地址
|
public static string ServerIp { get; } = "117.48.203.204";//用于测试的云服务器地址
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -48,8 +48,7 @@ namespace CommonLibrary
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public string Announcement { get; set; } = "测试公告";
|
public string Announcement { get; set; } = "测试公告";
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 是否允许账户登录
|
/// 是否允许账户登录,超级管理员账户除外
|
||||||
/// 超级管理员账户除外
|
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool Can_Account_Login { get; set; } = true;
|
public bool Can_Account_Login { get; set; } = true;
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -88,8 +88,8 @@
|
|||||||
<ColumnDefinition Width="*"></ColumnDefinition>
|
<ColumnDefinition Width="*"></ColumnDefinition>
|
||||||
<ColumnDefinition Width="auto"></ColumnDefinition>
|
<ColumnDefinition Width="auto"></ColumnDefinition>
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
<TextBlock Grid.Column="0" Style="{StaticResource Caption}">版本号:</TextBlock>
|
<TextBlock Grid.Column="0" Style="{StaticResource Caption}" MouseLeftButtonDown="TextBlock_MouseLeftButtonDown">版本号:</TextBlock>
|
||||||
<TextBlock x:Name="TextBlockSoftVersion" Grid.Column="1" Style="{StaticResource Caption}">V1.0.0</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>
|
<TextBlock x:Name="TextBlockSoftCopyright" Grid.Column="3" Style="{StaticResource Caption}">本软件著作权归某某所有</TextBlock>
|
||||||
</Grid>
|
</Grid>
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|||||||
@@ -28,14 +28,60 @@ namespace 软件系统客户端Wpf
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public partial class LoginWindow : Window
|
public partial class LoginWindow : Window
|
||||||
{
|
{
|
||||||
|
#region Constructor
|
||||||
|
|
||||||
public LoginWindow()
|
public LoginWindow()
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
|
|
||||||
|
// 加载本地保存的数据
|
||||||
UserClient.JsonSettings.FileSavePath = AppDomain.CurrentDomain.BaseDirectory + @"JsonSettings.txt";
|
UserClient.JsonSettings.FileSavePath = AppDomain.CurrentDomain.BaseDirectory + @"JsonSettings.txt";
|
||||||
UserClient.JsonSettings.LoadByFile();
|
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)
|
private void Button_Click(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
//启动线程登录
|
//启动线程登录
|
||||||
@@ -66,10 +112,11 @@ namespace 软件系统客户端Wpf
|
|||||||
ThreadAccountLogin.Start();
|
ThreadAccountLogin.Start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
#region 账户验证的逻辑块
|
#region 账户验证的逻辑块
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private string UserName = string.Empty;
|
private string UserName = string.Empty;
|
||||||
private string UserPassword = string.Empty;
|
private string UserPassword = string.Empty;
|
||||||
private bool IsChecked = false;
|
private bool IsChecked = false;
|
||||||
@@ -86,183 +133,63 @@ namespace 软件系统客户端Wpf
|
|||||||
//定义委托
|
//定义委托
|
||||||
Action<string> message_show = delegate (string message)
|
Action<string> message_show = delegate (string message)
|
||||||
{
|
{
|
||||||
SetInformationString(message);
|
Dispatcher.Invoke(new Action(() =>
|
||||||
|
{
|
||||||
|
SetInformationString(message);
|
||||||
|
}));
|
||||||
};
|
};
|
||||||
Action start_update = delegate
|
Action start_update = delegate
|
||||||
{
|
{
|
||||||
//需要该exe支持,否则将无法是实现自动版本控制
|
Dispatcher.Invoke(new Action(() =>
|
||||||
string update_file_name = AppDomain.CurrentDomain.BaseDirectory + @"软件自动更新.exe";
|
|
||||||
try
|
|
||||||
{
|
{
|
||||||
System.Diagnostics.Process.Start(update_file_name);
|
//需要该exe支持,否则将无法是实现自动版本控制
|
||||||
Environment.Exit(0);//退出系统
|
string update_file_name = AppDomain.CurrentDomain.BaseDirectory + @"软件自动更新.exe";
|
||||||
}
|
try
|
||||||
catch
|
{
|
||||||
{
|
System.Diagnostics.Process.Start(update_file_name);
|
||||||
MessageBox.Show("更新程序启动失败,请检查文件是否丢失,联系管理员获取。");
|
Environment.Exit(0);//退出系统
|
||||||
}
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
MessageBox.Show("更新程序启动失败,请检查文件是否丢失,联系管理员获取。");
|
||||||
|
}
|
||||||
|
}));
|
||||||
};
|
};
|
||||||
Action thread_finish = delegate
|
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 (AccountLogin.AccountLoginServer(
|
||||||
if (result.IsSuccess)
|
message_show,
|
||||||
|
start_update,
|
||||||
|
thread_finish,
|
||||||
|
UserName,
|
||||||
|
UserPassword,
|
||||||
|
IsChecked,
|
||||||
|
"wpf"))
|
||||||
{
|
{
|
||||||
byte[] temp = Encoding.Unicode.GetBytes(result.Content);
|
//启动主窗口
|
||||||
//例如返回结果为1说明允许登录,0则说明服务器处于维护中,并将信息显示
|
Dispatcher.Invoke(new Action(() =>
|
||||||
if (result.Content != "1")
|
|
||||||
{
|
{
|
||||||
Dispatcher.Invoke(message_show, result.Content.Substring(1));
|
DialogResult = true;
|
||||||
Dispatcher.Invoke(thread_finish);
|
|
||||||
return;
|
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
|
#endregion
|
||||||
|
|
||||||
|
#region User Interface
|
||||||
|
|
||||||
|
|
||||||
private void UISettings(bool enable)
|
private void UISettings(bool enable)
|
||||||
{
|
{
|
||||||
NameTextBox.IsEnabled = enable;
|
NameTextBox.IsEnabled = enable;
|
||||||
@@ -302,39 +229,7 @@ namespace 软件系统客户端Wpf
|
|||||||
LoginButton.Focus();
|
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)
|
private void NameTextBox_KeyDown(object sender, KeyEventArgs e)
|
||||||
{
|
{
|
||||||
@@ -345,5 +240,19 @@ namespace 软件系统客户端Wpf
|
|||||||
{
|
{
|
||||||
if (e.Key == Key.Enter) Button_Click(null, new RoutedEventArgs());
|
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_userName = new System.Windows.Forms.TextBox();
|
||||||
this.textBox_password = new System.Windows.Forms.TextBox();
|
this.textBox_password = new System.Windows.Forms.TextBox();
|
||||||
this.label3 = new System.Windows.Forms.Label();
|
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_version = new System.Windows.Forms.Label();
|
||||||
this.label_copyright = new System.Windows.Forms.Label();
|
this.label_copyright = new System.Windows.Forms.Label();
|
||||||
this.label_status = new System.Windows.Forms.Label();
|
this.label_status = new System.Windows.Forms.Label();
|
||||||
@@ -106,6 +106,7 @@ namespace 软件系统客户端模版
|
|||||||
// label_version
|
// label_version
|
||||||
//
|
//
|
||||||
this.label_version.AutoSize = true;
|
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.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.ForeColor = System.Drawing.Color.Gray;
|
||||||
this.label_version.Location = new System.Drawing.Point(1, 176);
|
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.Size = new System.Drawing.Size(44, 17);
|
||||||
this.label_version.TabIndex = 6;
|
this.label_version.TabIndex = 6;
|
||||||
this.label_version.Text = "版本:";
|
this.label_version.Text = "版本:";
|
||||||
|
this.label_version.Click += new System.EventHandler(this.label_version_Click);
|
||||||
//
|
//
|
||||||
// label_copyright
|
// label_copyright
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -146,193 +146,75 @@ namespace 软件系统客户端模版
|
|||||||
private void ThreadCheckAccount()
|
private void ThreadCheckAccount()
|
||||||
{
|
{
|
||||||
// 定义委托
|
// 定义委托
|
||||||
|
|
||||||
|
// 消息显示委托
|
||||||
Action<string> message_show = delegate (string message)
|
Action<string> message_show = delegate (string message)
|
||||||
{
|
{
|
||||||
label_status.Text = message;
|
if (IsHandleCreated) Invoke(new Action(() =>
|
||||||
};
|
{
|
||||||
|
label_status.Text = message;
|
||||||
|
}));
|
||||||
|
};
|
||||||
|
// 启动更新委托
|
||||||
Action start_update = delegate
|
Action start_update = delegate
|
||||||
{
|
{
|
||||||
// 需要该exe支持,否则将无法是实现自动版本控制
|
if (IsHandleCreated) Invoke(new Action(() =>
|
||||||
string update_file_name = Application.StartupPath + @"\软件自动更新.exe";
|
|
||||||
try
|
|
||||||
{
|
{
|
||||||
System.Diagnostics.Process.Start(update_file_name);
|
// 需要该exe支持,否则将无法是实现自动版本控制
|
||||||
Environment.Exit(0);//退出系统
|
string update_file_name = Application.StartupPath + @"\软件自动更新.exe";
|
||||||
}
|
try
|
||||||
catch
|
{
|
||||||
{
|
System.Diagnostics.Process.Start(update_file_name);
|
||||||
MessageBox.Show("更新程序启动失败,请检查文件是否丢失,联系管理员获取。");
|
Environment.Exit(0);//退出系统
|
||||||
}
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
MessageBox.Show("更新程序启动失败,请检查文件是否丢失,联系管理员获取。");
|
||||||
|
}
|
||||||
|
}));
|
||||||
};
|
};
|
||||||
|
// 结束的控件使能委托
|
||||||
Action thread_finish = delegate
|
Action thread_finish = delegate
|
||||||
{
|
{
|
||||||
UISettings(true);
|
if (IsHandleCreated) Invoke(new Action(() =>
|
||||||
|
{
|
||||||
|
UISettings(true);
|
||||||
|
}));
|
||||||
};
|
};
|
||||||
|
|
||||||
// 延时
|
// 启动密码验证
|
||||||
Thread.Sleep(200);
|
if(AccountLogin.AccountLoginServer(
|
||||||
|
message_show,
|
||||||
// 请求指令头数据,该数据需要更具实际情况更改
|
start_update,
|
||||||
OperateResultString result = UserClient.Net_simplify_client.ReadFromServer(CommonLibrary.CommonHeadCode.SimplifyHeadCode.维护检查);
|
thread_finish,
|
||||||
if(result.IsSuccess)
|
textBox_userName.Text,
|
||||||
|
textBox_password.Text,
|
||||||
|
checkBox_remeber.Checked,
|
||||||
|
"winform"))
|
||||||
{
|
{
|
||||||
byte[] temp = Encoding.Unicode.GetBytes(result.Content);
|
// 启动主窗口
|
||||||
// 例如返回结果为1说明允许登录,0则说明服务器处于维护中,并将信息显示
|
if (IsHandleCreated) Invoke(new Action(() =>
|
||||||
if (result.Content != "1")
|
|
||||||
{
|
{
|
||||||
if (IsHandleCreated) Invoke(message_show, result.Content.Substring(1));
|
DialogResult = DialogResult.OK;
|
||||||
if (IsHandleCreated) Invoke(thread_finish);
|
|
||||||
return;
|
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
|
#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)
|
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)
|
if (result.IsSuccess)
|
||||||
{
|
{
|
||||||
//例如返回结果为1说明允许登录,0则说明服务器处于维护中,并将信息显示
|
//例如返回结果为1说明允许登录,0则说明服务器处于维护中,并将信息显示
|
||||||
|
|||||||
Reference in New Issue
Block a user