/// <summary> /// 登录按钮被点击 /// </summary> private void ucBtnExt_Login_BtnClick(object sender, EventArgs e) { ucBtnExt_Login.FillColor = Color.FromArgb(155, 155, 155); ucBtnExt_Login.Enabled = false; string ret = Verify.Login(ucTextBoxEx_Key.InputText, localVersion, IpConfig.GetMac()); if (ret.Length == 32)//登录成功 { //登录按钮消失,进度条取代,进行必要的变量的声明 ucBtnExt_Login.Visible = false; ucProcessLine.Visible = true; ucProcessLine.Location = ucBtnExt_Login.Location; string expiredTimeS = null; string diskSerialNumber = SystemConfig.GetDiskSerialNumber(); bool isDownload = false; Thread loginSuccessThread = new Thread(() => { //对userLoginData进行赋值 userLoginData.Key = ucTextBoxEx_Key.InputText; userLoginData.StatusCode = ret; expiredTimeS = Verify.GetExpired(userLoginData.Key); userLoginData.ExpiredTimeS = expiredTimeS; DateTime expiredTime = Convert.ToDateTime(userLoginData.ExpiredTimeS); userLoginData.ExpiredTime = expiredTime; //取到期时间的时间间隔 TimeSpan ts = expiredTime.Subtract(Convert.ToDateTime(GetData.GetNetDateTime())); //用网络时间进行计算 label_Status.ForeColor = Color.FromArgb(66, 66, 66); label_Status.Text = String.Format("{0}{1}天{2}时{3}分", "卡密剩余时间:", ts.Days.ToString(), ts.Hours.ToString(), ts.Minutes.ToString()); //写配置文件保存卡密 OperateIniFile.WriteIniData("Ares", "Key", Encrypt.DES(userLoginData.Key, "areskeys"), "logindata.ini"); //核心数据取COS下载数据并解析 string appCode = Verify.GetAppCore(userLoginData.StatusCode, userLoginData.Key); if (appCode == "-1") { FrmDialog.ShowDialog(this, "Ares无法下载核心云端数据\n\n点击\"确定\"按钮退出Ares软件", "Ares - 致命错误"); Environment.Exit(0); } if (appCode.Length <= 10) { FrmDialog.ShowDialog(this, "Ares下载的核心云端数据不合法\n\n点击\"确定\"按钮退出Ares软件", "Ares - 致命错误"); Environment.Exit(0); } DllDownloadData dllDownloadData = JsonConvert.DeserializeObject <DllDownloadData>(appCode); //判断文档中的 TencentCos 文件夹是否存在,不存在就新建一个 if (Directory.Exists(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\" + diskSerialNumber) != true) { try { Directory.CreateDirectory(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\" + diskSerialNumber); } catch { FrmDialog.ShowDialog(this, "Ares申请的读写目录权限申请失败\n\n点击\"确定\"按钮退出Ares软件", "Ares - 致命错误"); Environment.Exit(0); } Console.WriteLine("TencentCos文件夹不存在,已经新建完毕"); } //文件是否已经存在,存在就不再下载,节省流量 if (File.Exists(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\" + diskSerialNumber + "\\" + Decrypt.DES(dllDownloadData.LocalFileName, Decrypt.DES(webApiUrlData.Key, "actingnb"))) == true) { //文件存在,进行MD5校验,校验通过就不重新下载了 string existFileMD5 = MD5.GetMD5HashFromFile(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\" + diskSerialNumber + "\\" + Decrypt.DES(dllDownloadData.LocalFileName, Decrypt.DES(webApiUrlData.Key, "actingnb"))); if (existFileMD5 != "-1") //验证是否成功取到MD5 { if (existFileMD5 == Decrypt.DES(dllDownloadData.MD5, Decrypt.DES(webApiUrlData.Key, "actingnb"))) //验证MD5是否与服务器的相符 { isDownload = false; //MD5相符,不需要重新下载 ucProcessLine.Value = 100; Console.WriteLine("MD5相符,不需要重新下载"); } else { isDownload = true;//MD5不符,需要重新下载 Console.WriteLine("MD5不符,需要重新下载"); } } } else { isDownload = true;//文件不存在,进行下载 Console.WriteLine("文件不存在,进行下载"); } //云下载DLL if (isDownload == true) { string secretId = Decrypt.DES(dllDownloadData.SecretId, Decrypt.DES(webApiUrlData.Key, "actingnb")); // API SecretId string secretKey = Decrypt.DES(dllDownloadData.SecretKey, Decrypt.DES(webApiUrlData.Key, "actingnb")); // API SecretKey string region = Decrypt.DES(dllDownloadData.Region, Decrypt.DES(webApiUrlData.Key, "actingnb")); // 存储桶所在地域 CosXmlConfig config = new CosXmlConfig.Builder() //普通初始化方式 .IsHttps(true) //设置默认 HTTPS 请求 .SetRegion(region) .SetDebugLog(true) .Build(); long durationSecond = 600; //每次请求签名有效时长,单位为秒 QCloudCredentialProvider cosCredentialProvider = new DefaultQCloudCredentialProvider(secretId, secretKey, durationSecond); CosXml cosXml = new CosXmlServer(config, cosCredentialProvider); try { string bucket = Decrypt.DES(dllDownloadData.Bucket, Decrypt.DES(webApiUrlData.Key, "actingnb")); //存储桶,格式:BucketName-APPID string key = Decrypt.DES(dllDownloadData.Key, Decrypt.DES(webApiUrlData.Key, "actingnb")); //对象键 string localDir = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\" + diskSerialNumber; //下载到的目录 不需要文件名 string localFileName = Decrypt.DES(dllDownloadData.LocalFileName, Decrypt.DES(webApiUrlData.Key, "actingnb")); //指定本地保存的文件名 GetObjectRequest request = new GetObjectRequest(bucket, key, localDir, localFileName); //设置进度回调 request.SetCosProgressCallback(delegate(long completed, long total) { //Console.WriteLine(String.Format("progress = {0:##.##}%", completed * 100.0 / total)); ucProcessLine.Value = Convert.ToInt32(completed * 100.0 / total); }); //执行请求 GetObjectResult result = cosXml.GetObject(request); //请求成功 Console.WriteLine(result.GetResultInfo()); } catch (CosClientException clientEx) { //请求失败 //MessageBox.Show("CosClientException: " + clientEx); FrmDialog.ShowDialog(this, "Ares无法下载核心云端文件\n\n点击\"确定\"按钮退出Ares软件" + "CosClientException: " + clientEx, "Ares - 致命错误"); Environment.Exit(0); } catch (CosServerException serverEx) { //请求失败 //MessageBox.Show("CosServerException: " + serverEx.GetInfo()); FrmDialog.ShowDialog(this, "Ares无法下载核心云端文件\n\n点击\"确定\"按钮退出Ares软件" + "CosServerException: " + serverEx.GetInfo(), "Ares - 致命错误"); Environment.Exit(0); } //下载完成后判断文件是否已经存在,不存在就是下载失败 if (File.Exists(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\" + diskSerialNumber + "\\" + Decrypt.DES(dllDownloadData.LocalFileName, Decrypt.DES(webApiUrlData.Key, "actingnb"))) == true) { //文件存在,进行MD5校验,校验通过就不重新下载了 string existFileMD5 = MD5.GetMD5HashFromFile(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\" + diskSerialNumber + "\\" + Decrypt.DES(dllDownloadData.LocalFileName, Decrypt.DES(webApiUrlData.Key, "actingnb"))); if (existFileMD5 != "-1") //验证是否成功取到MD5 { if (existFileMD5 != Decrypt.DES(dllDownloadData.MD5, Decrypt.DES(webApiUrlData.Key, "actingnb"))) //验证MD5是否与服务器的相符 { FrmDialog.ShowDialog(this, "Ares下载的核心云端文件与服务器不符\n\n点击\"确定\"按钮退出Ares软件", "Ares - 致命错误"); Console.WriteLine("下载的文件MD5不符"); Environment.Exit(0); } } } else { FrmDialog.ShowDialog(this, "Ares未能成功下载核心云端文件\n\n点击\"确定\"按钮退出Ares软件", "Ares - 致命错误"); //下载的文件不存在 Console.WriteLine("下载的文件不存在"); Environment.Exit(0); } } //设置用户数据,上传用户的QQ和硬件信息 List <string> onlineQQList = GetQQNumber.GetOnlineQQ();//获取在线QQ string onlineQQ = string.Empty; if (onlineQQList.Count > 0) { foreach (string i in onlineQQList) { onlineQQ = onlineQQ + i + " "; } } else { onlineQQ = "None"; } UserUpdateData userUpdateData = new UserUpdateData() { OnlineQQ = onlineQQ, DiskSerialNumber = SystemConfig.GetDiskSerialNumber(), CpuID = SystemConfig.GetCpuID(), BoardId = SystemConfig.GetBoardId() }; string setRetCode = Verify.SetUserData(userLoginData.StatusCode, userLoginData.Key, JsonConvert.SerializeObject(userUpdateData)); //载入主窗口 this.Visible = false; Application.Run(new MainForm(userLoginData)); }); loginSuccessThread.Start(); } else { //登录失败 if (ret == "-402")//判断是否需要解绑 { if (FrmDialog.ShowDialog(this, "当前卡密未在绑定的电脑上登录\n\n点击\"确定\"按钮为您打开解绑窗口来解绑新的机器码\n\n点击\"取消\"按钮取消解绑操作并回到主界面", "Ares - 卡密解绑", true) == DialogResult.OK) { HwidResetForm hwidResetForm = new HwidResetForm(Verify, ucTextBoxEx_Key.InputText, Root.HwidResetContent.Replace("*", Environment.NewLine)); hwidResetForm.ShowDialog(); ucBtnExt_Login.FillColor = Color.FromArgb(221, 31, 50); ucBtnExt_Login.Enabled = true; } else { ucBtnExt_Login.FillColor = Color.FromArgb(221, 31, 50); ucBtnExt_Login.Enabled = true; label_Status.ForeColor = Color.FromArgb(239, 51, 42); label_Status.Text = "卡密未在绑定的电脑上登录且未解绑"; } } else { ucBtnExt_Login.FillColor = Color.FromArgb(221, 31, 50); ucBtnExt_Login.Enabled = true; label_Status.ForeColor = Color.FromArgb(239, 51, 42); label_Status.Text = ErrorCodeTranslation.Get(ret); } } }