DCS/ruiyiweiUX/Assets/GeneralTools/Scripts/Always/Certificate/CertificateManager.cs

130 lines
4.7 KiB
C#

using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
namespace GeneralTools
{
public class CertificateManager : SingletonBaseAttribute<CertificateManager>
{
private static string productName;
private SocketBase udpSender;
private string udpSenderStr;
private Coroutine TrialCor;
private static CertificateSetting setting;
public override void IAwake()
{
base.IAwake();
setting = CertificateSetting.GetCertificateSetting();
//读取配置
productName = setting.useProdctName;
LockDll.CertificateVerification.OnPrintMsg += (msg) => { Debug.Log(msg); };
if (!setting.isCheckCertificate)
{
Debug.Log("START: Frame Game Debug");
return;
}
CheckCertificate();
}
public override void IStart()
{
base.IStart();
udpSender = SocketManager.Instance.CreateUdp(39527).SetSocketName("CertificateUDPSender").AddReceiveEvent(UdpReceiveHandler);
StartCoroutine(NetWorkBroadcast());
}
public bool CheckCertificate()
{
if (TrialCor != null)
{
StopCoroutine(TrialCor);
TrialCor = null;
}
MessageBox.Instance.Hide("证书提示");
bool checkSuccess = LockDll.CertificateVerification.CheckCertificate(DevicePath.CertificateProgramPath, DevicePath.CertificateSystemPath, productName);
udpSenderStr = CreateUdpInfo(DevicePath.CertificateSystemPath);
if (!checkSuccess)
{
HandlerLock("证书到期\r\n请联系管理员");
}
return checkSuccess;
}
private void HandlerLock(string showStr)
{
if (setting.lockType == LockType.退)
{
Application.Quit();
}
else if (setting.lockType == LockType.)
{
MessageBox.Instance.Show("提示", showStr, "退出", () => { Application.Quit(); }, "证书提示");
}
else if (setting.lockType == LockType.)
{
MessageBox.Instance.Show("提示", showStr, "试用", () => { MessageBox.Instance.Hide(); TrialProgram(); }, "证书提示");
}
}
private void TrialProgram()
{
float time = 3600;
MessageBox.Instance.Show("开始试用,时间" + time + "秒");
TrialCor = StartCoroutine(TrialIEnumerator(time));
}
IEnumerator TrialIEnumerator(float time)
{
Debug.Log("开始试用,时间:" + time + "秒");
yield return new WaitForSeconds(time);
MessageBox.Instance.Show("试用已经结束,即将关闭。", "退出", Application.Quit);
Debug.Log("试用结束");
yield return new WaitForSeconds(10);
Application.Quit();
}
public static void CreateOneCertificate()
{
LockDll.CertificateVerification.CreateForeverCertificate(DevicePath.CertificateProgramPath, productName);
}
#region
private string CreateUdpInfo(string path)
{
Dictionary<string, string> certificateInfo = LockDll.CertificateVerification.GetCertificateInfo(DevicePath.CertificateProgramPath);
string tempInfo = "programProductName=" + productName + "&";
foreach (var item in certificateInfo)
{
tempInfo += item.Key + "=" + item.Value + "&";
}
return tempInfo;
}
private IEnumerator NetWorkBroadcast()
{
while (true)
{
yield return new WaitForSeconds(5);
udpSender.SendMsg("certificatehere");
}
}
private void UdpReceiveHandler(SocketMsg msg)
{
if (msg.msg == "certificateshow")
{
UDPClient.SendMsgOnce(msg.remoteIpEndPoint.Address.ToString(), msg.remoteIpEndPoint.Port, udpSenderStr);
}
else if (msg.msg.StartsWith("certificateinfo:"))
{
string m = msg.msg.Replace("certificateinfo:", "");
LockDll.CertificateVerification.CreateCertificate(DevicePath.CertificateSystemPath, m);
Debug.Log("写入证书,重新检测");
CheckCertificate();
}
}
#endregion
}
public enum LockType
{
,
,
退,
}
}