/// <summary> /// 启动服务 /// </summary> /// <param name="domain"></param> /// <param name="ip"></param> /// <returns></returns> public bool StartDdns(string domain, string ip) { DomainPara para = new DomainPara() { Domain = domain, Ip = ip }; try { if (thread == null) { thread = new Thread(new ParameterizedThreadStart(DdnsMethod)); thread.IsBackground = true; thread.Start(para); } else { thread.Start(para); } WriteLog?.Invoke($"开始解析,当前域名:{domain}!"); return(true); } catch (Exception ex) { WriteLog?.Invoke($"开始解析失败!错误:{ex.Message}!"); return(false); } }
private void DdnsMethod(object para) { DomainPara dPara = (DomainPara)para; while (true) { //获取外网IP dPara.Ip = ExtenalIp.Value; ShowIp?.Invoke(dPara.Ip); if (string.IsNullOrEmpty(dPara.Ip)) { WriteLog?.Invoke($"获取外网IP,本次解析停止,将于下次解析重试!"); Thread.Sleep(Config.SpanTime * 60 * 1000); continue; } //开始解析 RecordType record = GetDomainRecords(dPara.Domain); if (record == null) { if (AddDomainRecords(dPara.Domain, dPara.Ip) != null) { WriteLog?.Invoke($"未找到相关的解析记录,已新增解析记录!"); } else { WriteLog?.Invoke("修改解析记录失败,请检查网络和AccessKey是否正确!"); } } else { if (record.Value == dPara.Ip) { WriteLog?.Invoke("更新IP与记录IP相同,暂不更新!"); } else { UpdateDomainRecord(record, dPara.Ip); } } Thread.Sleep(Config.SpanTime * 60 * 1000); } }