@@ -118,8 +106,7 @@
maxlength="100"
placeholder="请输入网络密码"
v-model="config.networkPassword"
- type="password"
- >
+ type="password">
@@ -136,13 +123,11 @@
@@ -174,8 +157,7 @@
:type="!data.isStart ? 'primary' : 'danger'"
:disabled="data.startLoading || !data.coreVersion || data.update"
@click="handleConnection"
- size="default"
- >
+ size="default">
{{ !data.isStart ? "启动联机" : "停止联机" }}
@@ -183,27 +165,23 @@
+ size="small">
强制中转
- 子网代理
- 高级配置
+ 子网代理
+ 高级选项
@@ -244,8 +228,7 @@
class="!text-[11px]"
type="info"
:underline="false"
- @click="open('https://github.com/dechamps/WinIPBroadcast/releases/tag/winipbroadcast-1.6')"
- >
+ @click="open('https://github.com/dechamps/WinIPBroadcast/releases/tag/winipbroadcast-1.6')">
WinIPBroadcast
@@ -258,15 +241,13 @@
size="small"
label="WinIPBroadcast"
active-text="开启"
- inactive-text="关闭"
- >
+ inactive-text="关闭">
+ @click="open('https://github.com/EasyTier/EasytierGame')">
主页
@@ -298,10 +279,12 @@
const mainStore = useMainStore();
const config = mainStore.config;
+ // console.log(config);
const protocols = ["tcp", "udp", "ws", "wss", "wg"];
const data = reactive({
logVisible: false,
cidrVisible: false,
+ advanceVisible: false,
winipBcPid: 0, //WinIPBroadcast进程id
winipBcStart: false,
memberVisible: false,
@@ -311,13 +294,13 @@
coreVersion: "",
isSuccessGetIp: false,
startLoading: false,
- isStart: false
+ isStart: false,
});
const closePrevent = async () => {
const appWindow = getCurrentWindow();
if (appWindow.label == "main") {
- appWindow.onCloseRequested(async event => {
+ appWindow.onCloseRequested(async (event) => {
console.log(appWindow.label);
if (!is_close) {
event.preventDefault();
@@ -346,10 +329,11 @@
const listenObj: { [key: string]: any } = {
unListenOutPut: null,
unListenThreadId: null,
+ unListenConfigStart: null,
thread_id: null,
async listenOutput() {
const appWindow = getCurrentWindow();
- const unListen = await listen("command-output", async event => {
+ const unListen = await listen("command-output", async (event) => {
data.isStart = true;
if (event.payload) {
data.startLoading = false;
@@ -366,13 +350,22 @@
this.unListenOutPut = unListen;
},
async listenThreadId() {
- const unListen = await listen("thread-id", event => {
+ const unListen = await listen("thread-id", (event) => {
if (event.payload) {
this.thread_id = event.payload;
}
});
this.unListenThreadId = unListen;
- }
+ },
+ async listenConfigStart() {
+ const unListen = await listen("config", (event) => {
+ // console.log("config", event.payload);
+ const ipv4 = config.ipv4;
+ mainStore.$patch(event.payload);
+ config.ipv4 = ipv4;
+ });
+ this.unListenConfigStart = unListen;
+ },
};
const unListenAll = async () => {
@@ -514,16 +507,19 @@
await initStartWinIpBroadcast();
await getCoreVersion();
await listenObj.listenThreadId();
+ await listenObj.listenConfigStart();
closePrevent();
});
onBeforeUnmount(() => {
unListenAll();
listenObj.unListenReleaseList && listenObj.unListenReleaseList();
+ listenObj.unListenConfigStart && listenObj.unListenConfigStart();
logsTimer && clearInterval(logsTimer);
});
const getArgs = () => {
+ // console.log(config.proxyNetworks);
const args = [];
if (config.dhcp) {
args.push("-d");
@@ -542,7 +538,7 @@
}
if (config.serverUrl) {
const formatUrl = config.serverUrl.replace(/\\/g, "/");
- args.push("--peers", ...config.protocol.map(protocol => `${protocol}://${formatUrl}`));
+ args.push("--peers", ...config.protocol.map((protocol) => `${protocol}://${formatUrl}`));
}
if (config.disbleP2p) {
args.push("--disable-p2p");
@@ -553,6 +549,40 @@
if (config.disbleListenner) {
args.push("--no-listener");
}
+ if (mainStore.cidrEnable && config.proxyNetworks) {
+ // console.log(config.proxyNetworks);
+ const reg = /\d+\.\d+\.\d+\.\d+\/\d+/g;
+ const formatProxyNetworks = config.proxyNetworks
+ .split("\n")
+ .map((item) => item.trim())
+ .filter((item) => item && reg.test(item));
+ args.push("--proxy-networks", ...formatProxyNetworks);
+ config.proxyNetworks = formatProxyNetworks.join("\n");
+ }
+ if (config.disableEncryption) {
+ args.push("--disable-encryption");
+ }
+ if (config.multiThread) {
+ args.push("--multi-thread");
+ }
+ if (config.enablExitNode) {
+ args.push("--enable-exit-node");
+ }
+ if (config.noTun) {
+ args.push("--no-tun");
+ }
+ if (config.latencyfirst) {
+ args.push("--latency-first");
+ }
+ if (config.useSmoltcp) {
+ args.push("--use-smoltcp");
+ }
+ if (config.disableUdpHolePunching) {
+ args.push("--disable-udp-hole-punching");
+ }
+ if (config.relayAllPeerrpc) {
+ args.push("--relay-all-peer-rpc");
+ }
return args;
};
@@ -563,7 +593,7 @@
config.ipv4 = "";
}
const memberDialog = await getAllWebviewWindows();
- const memberDialogs = memberDialog.filter(item => item.label === "member");
+ const memberDialogs = memberDialog.filter((item) => item.label === "member");
if (memberDialogs && memberDialogs.length > 0) {
data.memberVisible = false;
for (const memberDialog of memberDialogs) {
@@ -581,12 +611,13 @@
if (data.isStart) {
await reset();
} else {
+ data.log = ""; //清空日志
data.startLoading = true;
await unListenAll();
await listenObj.listenOutput();
const args = getArgs();
await invoke("run_command", {
- args
+ args,
});
}
};
@@ -605,7 +636,7 @@
title: "成员列表",
width: 470,
height: 380,
- url: "#/member"
+ url: "#/member",
},
() => {
data.memberVisible = true;
@@ -624,7 +655,7 @@
width: 600,
height: 380,
resizable: false,
- url: "#/log"
+ url: "#/log",
},
(_, appWindow) => {
data.logVisible = true;
@@ -647,7 +678,7 @@
width: 600,
height: 380,
resizable: false,
- url: "#/cidr"
+ url: "#/cidr",
},
(_, appWindow) => {
data.cidrVisible = true;
@@ -657,4 +688,23 @@
}
);
};
+
+ const handleShowAdvanceDialog = async () => {
+ await etWindows(
+ "advance",
+ {
+ title: "高级选项",
+ width: 600,
+ height: 380,
+ resizable: false,
+ url: "#/advance",
+ },
+ (_, appWindow) => {
+ data.advanceVisible = true;
+ },
+ () => {
+ data.advanceVisible = false;
+ }
+ );
+ };
diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock
index bdda334..7a85295 100644
--- a/src-tauri/Cargo.lock
+++ b/src-tauri/Cargo.lock
@@ -1109,7 +1109,7 @@ checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125"
[[package]]
name = "easytier-game"
-version = "1.0.6"
+version = "1.0.7"
dependencies = [
"log",
"planif",
diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml
index df4e77e..8a1b0f9 100644
--- a/src-tauri/Cargo.toml
+++ b/src-tauri/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "easytier-game"
-version = "1.0.6"
+version = "1.0.7"
homepage = "https://github.com/EasyTier/EasyTier"
repository = "https://github.com/EasyTier/EasytierGame"
description = "A simple network initiator based on Easytier"
diff --git a/src-tauri/WinIPBroadcast.exe b/src-tauri/WinIPBroadcast.exe
new file mode 100644
index 0000000..e95ee70
Binary files /dev/null and b/src-tauri/WinIPBroadcast.exe differ
diff --git a/src-tauri/capabilities/default.json b/src-tauri/capabilities/default.json
index 4d7269d..b2cffbf 100644
--- a/src-tauri/capabilities/default.json
+++ b/src-tauri/capabilities/default.json
@@ -2,7 +2,7 @@
"$schema": "../gen/schemas/desktop-schema.json",
"identifier": "default",
"description": "enables the default permissions",
- "windows": ["main", "log", "member"],
+ "windows": ["main", "log", "member", "cidr", "advance"],
"permissions": [
"core:default",
"core:window:allow-minimize",
diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json
index c45e441..1b87f1b 100644
--- a/src-tauri/tauri.conf.json
+++ b/src-tauri/tauri.conf.json
@@ -1,7 +1,7 @@
{
"$schema": "../node_modules/@tauri-apps/cli/config.schema.json",
"productName": "easytier-game",
- "version": "1.0.6",
+ "version": "1.0.7",
"identifier": "com.tauri.easytier-game",
"build": {
diff --git a/stores/index.ts b/stores/index.ts
index e316a77..3eec141 100644
--- a/stores/index.ts
+++ b/stores/index.ts
@@ -9,18 +9,30 @@ export default defineStore("main", {
networkPassword: "",
hostname: "",
ipv4: "",
+ proxyNetworks: "", // 子网代理
autoStart: false, // 是否自动启动
disableIpv6: false, // 是否禁用IPv6
disbleListenner: false, // 是否禁用监听
+ disableEncryption: false, // 是否禁用加密
+ multiThread: false, //使用多线程
+ enablExitNode: false, // 是否启用退出节点
+ noTun: false, // 是否使用TUN
+ latencyfirst: false, // 是否优先延迟
+ useSmoltcp: false, // 是否为子网代理启用smoltcp堆栈
+ disableUdpHolePunching: false, // 是否禁用UDP打洞
+ relayAllPeerrpc: false, // 是否启用所有对等RPC
disbleP2p: false, // 是否使用P2P
dhcp: true, // 是否使用DHCP
},
+ cidrEnable: false,
basePeers: ["public.easytier.top:11010"],
};
},
persist: {
paths: [
"basePeers",
+ "cidrEnable",
+ "config.proxyNetworks",
"config.serverUrl",
"config.networkName",
"config.protocol",
@@ -29,6 +41,14 @@ export default defineStore("main", {
"config.autoStart",
"config.disableIpv6",
"config.disbleListenner",
+ "config.disableEncryption",
+ "config.multiThread",
+ "config.enablExitNode",
+ "config.noTun",
+ "config.latencyfirst",
+ "config.useSmoltcp",
+ "config.disableUdpHolePunching",
+ "config.relayAllPeerrpc",
"config.hostname",
"config.dhcp",
],