コード例 #1
0
ファイル: Ddns.cs プロジェクト: geeiot/AliyunDdns
        /// <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);
            }
        }
コード例 #2
0
ファイル: Ddns.cs プロジェクト: geeiot/AliyunDdns
        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);
            }
        }