Skip to content

Commit

Permalink
2.0.0 代码重构
Browse files Browse the repository at this point in the history
1. 完全重写代码,提升代码可读性。
2. 改用alibaba FastJson格式化请求信息。
3. 修改配置文件中“type”的“AAAA”与“A”二选一为“ipv6”的布尔格式,便于理解、修改。
  • Loading branch information
CarmJos committed Oct 31, 2021
1 parent dc3cc92 commit 185a5f7
Show file tree
Hide file tree
Showing 14 changed files with 482 additions and 626 deletions.
39 changes: 38 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,44 @@

阿里云服务,域名DDNS更新器,支持IPV6。

部分项目代码参考与各大Blog。
## 配置文件示例

```yaml
version: 1.7

#输出域名记录查询返回信息
debug: false

Service:
#更新间隔(毫秒)
period: 900000
# 阿里云地域ID,可以不改动
# 请参考 https://help.aliyun.com/knowledge_detail/40654.html
region-id: "cn-hangzhou"
# IP地址查询相关设定
# 用于获取对应的IP地址,以更新到域名
# 如不需要IPV6,则可以直接将地址留空。
ipQuery:
IPv4: "http://ifconfig.me/ip"
IPv6: "https://v6.ip.zxinc.org/getip"


#更新任务列表
UpdateRequests:
test:
domain: "test.cn" # 域名,如 www.baidu.com 中的 baidu.com
AccessKey: "xx" # 访问密钥 (在个人控制台中获取)
AccessSecret: "xx" # 访问密码 (在个人控制台中获取)
record: "www" #主机记录
ipv6: false # 该记录是否为IPv6[AAAA]记录 (默认为false)
```
## 守护进程示例
### Linux systemd
请参考 [systemd自启动java程序](https://www.cnblogs.com/yoyotl/p/8178363.html) 。
## 支持与捐赠
Expand Down
12 changes: 10 additions & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@

<groupId>com.carmwork</groupId>
<artifactId>aliddns-updater</artifactId>
<version>1.0.1</version>
<version>2.0.0</version>
<packaging>jar</packaging>

<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
<mainClass>com.carmwork.aliddns.Main</mainClass>
<mainClass>cc.carm.app.aliddns.Main</mainClass>
</properties>


Expand Down Expand Up @@ -105,6 +105,14 @@
<scope>compile</scope>
</dependency>

<dependency>
<!-- https://github.com/alibaba/fastjson -->
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.73</version>
<scope>compile</scope>
</dependency>

<dependency>
<groupId>cc.bukkit</groupId>
<artifactId>BukkitConfiguration</artifactId>
Expand Down
100 changes: 100 additions & 0 deletions src/main/java/cc/carm/app/aliddns/Main.java
Original file line number Diff line number Diff line change
@@ -1,4 +1,104 @@
package cc.carm.app.aliddns;

import cc.carm.app.aliddns.manager.ConfigManager;
import cc.carm.app.aliddns.manager.RequestManager;
import com.sun.istack.internal.NotNull;

import java.util.Arrays;
import java.util.Timer;
import java.util.TimerTask;

public class Main {

private static ConfigManager configManager;
private static RequestManager requestManager;

private static TimerTask updateTimerTask;


public static void main(String[] args) throws InterruptedException {
print("-------------------------------------------");
print("阿里云服务 DDNS更新器");
print("项目地址 https://git.carm.cc/AliDDNS-Updater");
print("-------------------------------------------");
Thread.sleep(1000L);
info("初始化配置文件管理...");

configManager = new ConfigManager();
getConfigManager().initConfig();

if (getConfigManager().getConfig().getDouble("version", 1.0) < getConfigManager().getConfigVersion()) {
info(" 配置文件过时,正在尝试重新创建...");
getConfigManager().backupConfig();
getConfigManager().createConfig();
}

info(" 完成加载配置文件 v" + getConfigManager().getConfig().getDouble("version", 1.0));

info();

info("初始化记录请求管理器...");
requestManager = new RequestManager();
int loaded = requestManager.loadRequests();

if (loaded < 1) {
error(" 您没有配置任何记录,请检查配置文件!");
System.exit(0);
} else {
info(" 初始化完成,共加载了 " + loaded + " 个任务");
}

info();

System.out.println("所有任务已设定为每 " + ConfigManager.getPeriod() + " 毫秒进行一次更新。");
info();
info("启用更新线程...");
print("-------------------------------------------");

Timer timer = new Timer();
timer.schedule(updateTimerTask = new TimerTask() {
@Override
public void run() {
getRequestManager().doUpdate();
}
}, 500, ConfigManager.getPeriod());

}


public static void print(String... messages) {
if (messages == null || messages.length == 0) {
System.out.println(" ");
} else {
Arrays.stream(messages).forEach(System.out::println);
}
}

public static void printWithPrefix(@NotNull String prefix, String... messages) {
if (messages == null || messages.length == 0) {
System.out.println(" ");
} else {
Arrays.stream(messages).map(x -> prefix + x).forEach(System.out::println);
}
}

public static void info(String... messages) {
printWithPrefix("[INFO] ", messages);
}

public static void debug(String... messages) {
printWithPrefix("[DEBUG] ", messages);
}

public static void error(String... messages) {
printWithPrefix("[ERROR] ", messages);
}

public static ConfigManager getConfigManager() {
return configManager;
}

public static RequestManager getRequestManager() {
return requestManager;
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.carmwork.aliddns.managers;
package cc.carm.app.aliddns.manager;

import com.google.common.base.Charsets;
import com.sun.istack.internal.Nullable;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;

Expand All @@ -10,7 +11,9 @@

public class ConfigManager {

private double configVersion = 1.6;
private static ConfigManager instance;

private final double CONFIG_VERSION = 1.7;

private File sourceFile;
private File dataFolder;
Expand All @@ -20,17 +23,43 @@ public class ConfigManager {


public ConfigManager() {
String path = this.getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
instance = this;

String path = this.getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
this.sourceFile = new File(path);
this.dataFolder = sourceFile.getParentFile();
this.configFile = new File(dataFolder, "config.yml");

}

this.dataFolder = sourceFile.getParentFile();
public static boolean isDebugMode() {
return true;
}

this.configFile = new File(dataFolder, "config.yml");
public static String getRegionID() {
return getInstance().getConfig().getString("Service.region-id", "cn-hangzhou");
}

public static long getPeriod() {
return getInstance().getConfig().getLong("Service.period", 900000L);
}

public static String getIPv4QueryURL() {
return getInstance().getConfig().getString("Service.ipQuery.IPv4", "http://ifconfig.me/ip");
}

@Nullable
public static String getIPv6QueryURL() {
return getInstance().getConfig().getString("Service.ipQuery.IPv6", "https://v6.ip.zxinc.org/getip");
}

public static boolean isIPV6Enabled() {
return getIPv6QueryURL() == null || getIPv4QueryURL().length() == 0;
}

public static ConfigManager getInstance() {
return instance;
}

public FileConfiguration getConfig() {
if (newConfig == null) {
Expand Down Expand Up @@ -64,13 +93,13 @@ public void initConfig() {
if (!configFile.exists()) {
createConfig();
} else {
System.out.println(" Configuration found at " + configFile.getAbsolutePath());
System.out.println(" 配置文件加载于 " + configFile.getAbsolutePath());
}
}

public void createConfig() {
saveResource("config.yml", true);
System.out.println(" Configuration created at " + configFile.getAbsolutePath());
System.out.println(" 配置文件创建于 " + configFile.getAbsolutePath());
}

public void saveResource(String resourcePath, boolean replace) {
Expand Down Expand Up @@ -133,7 +162,7 @@ public InputStream getResource(String filename) {
public void backupConfig() {
try {
copy(configFile, "config.yml.bak");
System.out.println(" Configuration backup at " + configFile.getAbsolutePath() + ".bak");
System.out.println(" 旧的配置文件已备份与 " + configFile.getAbsolutePath() + ".bak");
this.configFile = new File(dataFolder, "config.yml");
} catch (Exception ignore) {

Expand Down Expand Up @@ -166,6 +195,8 @@ public static void copy(final File file, final String newName) throws IOExceptio
}

public double getConfigVersion() {
return configVersion;
return CONFIG_VERSION;
}


}
Loading

0 comments on commit 185a5f7

Please sign in to comment.