mirror of
https://github.com/EasyTier/EasytierGame.git
synced 2026-09-20 03:21:59 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7853d3b2f5 | ||
|
|
aacf47b6f5 | ||
|
|
d9b01fc754 | ||
|
|
844fba8462 |
@@ -1,12 +1,12 @@
|
||||
pnpm run build
|
||||
@REM rustup default nightly
|
||||
rustup default nightly
|
||||
@REM rem 使用rust nightly构建支持win7的版本,请先将根目录的windows.0.48.5 放入以下目录
|
||||
@REM rem C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\你自己的版本\lib\x64
|
||||
@REM rem C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\你自己的版本\lib\x86
|
||||
@REM rem C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\你自己的版本\atlmfc\lib\x64
|
||||
@REM rem C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\你自己的版本\atlmfc\lib\x86
|
||||
@REM pnpm tauri build -- -Z build-std --target x86_64-win7-windows-msvc
|
||||
pnpm tauri build -- -Z build-std --target x86_64-win7-windows-msvc
|
||||
rustup default stable
|
||||
pnpm tauri build
|
||||
pnpm run release
|
||||
@REM pnpm run release-win7
|
||||
pnpm run release-win7
|
||||
@@ -20,5 +20,8 @@ export const getServerArgs = () => {
|
||||
if (!whiteList && mainStore.serverConfig.enableWhiteList) {
|
||||
args.push("--relay-network-whitelist");
|
||||
}
|
||||
if (mainStore.serverConfig.privateMode) {
|
||||
args.push("--private-mode", "true");
|
||||
}
|
||||
return args;
|
||||
};
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
"private": true,
|
||||
"author": "leizi97",
|
||||
"description": "A simple network initiator based on Easytier",
|
||||
"version": "1.4.5",
|
||||
"version": "1.4.6",
|
||||
"scripts": {
|
||||
"dev": "nuxt dev --dotenv env/.env.dev --host 0.0.0.0",
|
||||
"build": "nuxt generate --dotenv env/.env.prod",
|
||||
|
||||
@@ -66,6 +66,13 @@
|
||||
</ElTooltip>
|
||||
<CoreVersionWarning version="2.3.0" />
|
||||
</div>
|
||||
<div class="flex flex-nowrap items-center gap-[5px]">
|
||||
<ElCheckbox v-model="mainStore.config.privateMode">启用私有模式</ElCheckbox>
|
||||
<ElTooltip content="启用后,不允许使用了与本网络不同的房间名和密码的节点通过本节点进行握手或中转">
|
||||
<ElIcon><QuestionFilled /></ElIcon>
|
||||
</ElTooltip>
|
||||
<CoreVersionWarning version="2.3.1" />
|
||||
</div>
|
||||
<ElDivider />
|
||||
<div class="flex items-center gap-[10px]">
|
||||
<ElCheckbox v-model="mainStore.config.disbleListenner">不监听任何端口,只连接到对等节点</ElCheckbox>
|
||||
|
||||
+21
-8
@@ -1412,7 +1412,7 @@
|
||||
args.push("--proxy-forward-by-system");
|
||||
}
|
||||
if (mainStore.config.acceptDNS) {
|
||||
args.push("--accept-dns");
|
||||
args.push("--accept-dns", "true");
|
||||
}
|
||||
if (mainStore.config.enablePortForward) {
|
||||
let formatPortForward = mainStore.config.portForwardData.trim().split("\n");
|
||||
@@ -1423,6 +1423,9 @@
|
||||
});
|
||||
}
|
||||
}
|
||||
if(mainStore.config.privateMode) {
|
||||
args.push("--private-mode", "true");
|
||||
}
|
||||
return args;
|
||||
};
|
||||
|
||||
@@ -1531,7 +1534,8 @@
|
||||
compression,
|
||||
enablePreventSleep,
|
||||
enableKcpProxy,
|
||||
disableKcpInput
|
||||
disableKcpInput,
|
||||
privateMode
|
||||
} = mainStore.config;
|
||||
const WT = btoa(
|
||||
encodeURIComponent(
|
||||
@@ -1564,7 +1568,8 @@
|
||||
compression,
|
||||
enablePreventSleep,
|
||||
enableKcpProxy,
|
||||
disableKcpInput
|
||||
disableKcpInput,
|
||||
privateMode
|
||||
}
|
||||
})
|
||||
)
|
||||
@@ -1923,14 +1928,22 @@
|
||||
const storageDialog = async () => {
|
||||
await etWindows("storage-listener", {
|
||||
title: "自建服务器",
|
||||
minWidth: 1,
|
||||
minHeight: 1,
|
||||
width: 1,
|
||||
height: 1,
|
||||
minWidth: 0,
|
||||
minHeight: 0,
|
||||
width: 0,
|
||||
height: 0,
|
||||
x: 9999,
|
||||
y: 9999,
|
||||
resizable: false,
|
||||
transparent: true,
|
||||
hiddenTitle: true,
|
||||
alwaysOnBottom: true,
|
||||
url: "#/storage-listener"
|
||||
});
|
||||
},
|
||||
(dialog) => {
|
||||
dialog.hide();
|
||||
},
|
||||
|
||||
);
|
||||
};
|
||||
</script>
|
||||
|
||||
@@ -48,6 +48,8 @@
|
||||
width="120"
|
||||
prop="ipv4"
|
||||
label="虚拟网IP"
|
||||
:sort-method="sortIpv4"
|
||||
:sort-orders="['ascending', 'descending', null]"
|
||||
></ElTableColumn>
|
||||
<ElTableColumn
|
||||
sortable
|
||||
@@ -98,11 +100,15 @@
|
||||
width="90"
|
||||
prop="rx_bytes"
|
||||
label="接收"
|
||||
:sort-method="sortBytes"
|
||||
:sort-orders="['ascending', 'descending', null]"
|
||||
></ElTableColumn>
|
||||
<ElTableColumn
|
||||
sortable
|
||||
prop="tx_bytes"
|
||||
label="传输"
|
||||
:sort-method="(a, b) => sortBytes(a, b, 'tx_bytes')"
|
||||
:sort-orders="['ascending', 'descending', null]"
|
||||
></ElTableColumn>
|
||||
</ElTable>
|
||||
</div>
|
||||
@@ -173,6 +179,101 @@
|
||||
return valueA - valueB;
|
||||
};
|
||||
|
||||
// IP地址排序函数
|
||||
const sortIpv4 = (a: any, b: any): number => {
|
||||
const ipToNumber = (ip: string): number => {
|
||||
if (!ip || ip === "-" || ip === "") {
|
||||
return 0;
|
||||
}
|
||||
|
||||
// 处理可能包含端口号或子网掩码的情况
|
||||
const cleanIp = ip.split("/")[0].split(":")[0];
|
||||
const parts = cleanIp.split(".");
|
||||
|
||||
if (parts.length !== 4) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
try {
|
||||
const nums = parts.map(part => {
|
||||
const num = parseInt(part, 10);
|
||||
return isNaN(num) || num < 0 || num > 255 ? 0 : num;
|
||||
});
|
||||
|
||||
// 将IP地址转换为32位数字进行比较
|
||||
return (nums[0] << 24) + (nums[1] << 16) + (nums[2] << 8) + nums[3];
|
||||
} catch {
|
||||
return 0;
|
||||
}
|
||||
};
|
||||
|
||||
const numA = ipToNumber(a.ipv4);
|
||||
const numB = ipToNumber(b.ipv4);
|
||||
|
||||
return numA - numB;
|
||||
};
|
||||
|
||||
// 字节数据排序函数
|
||||
const sortBytes = (a: any, b: any, field: string = 'rx_bytes'): number => {
|
||||
const parseBytes = (bytesStr: string): number => {
|
||||
if (!bytesStr || bytesStr === "-" || bytesStr === "") {
|
||||
return 0;
|
||||
}
|
||||
|
||||
// 统一转换为小写并去除空格
|
||||
const cleanStr = bytesStr.toLowerCase().trim();
|
||||
|
||||
// 使用正则表达式匹配数字和单位
|
||||
const match = cleanStr.match(/^(\d+(?:\.\d+)?)\s*([a-z]*)$/);
|
||||
if (!match) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
const value = parseFloat(match[1]);
|
||||
const unit = match[2];
|
||||
|
||||
if (isNaN(value)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
// 根据单位转换为字节数
|
||||
switch (unit) {
|
||||
case 'b':
|
||||
case 'byte':
|
||||
case 'bytes':
|
||||
case '':
|
||||
return value;
|
||||
case 'k':
|
||||
case 'kb':
|
||||
case 'kib':
|
||||
return value * 1024;
|
||||
case 'm':
|
||||
case 'mb':
|
||||
case 'mib':
|
||||
return value * 1024 * 1024;
|
||||
case 'g':
|
||||
case 'gb':
|
||||
case 'gib':
|
||||
return value * 1024 * 1024 * 1024;
|
||||
case 't':
|
||||
case 'tb':
|
||||
case 'tib':
|
||||
return value * 1024 * 1024 * 1024 * 1024;
|
||||
case 'p':
|
||||
case 'pb':
|
||||
case 'pib':
|
||||
return value * 1024 * 1024 * 1024 * 1024 * 1024;
|
||||
default:
|
||||
return value; // 未知单位当作字节处理
|
||||
}
|
||||
};
|
||||
|
||||
const bytesA = parseBytes(a[field]);
|
||||
const bytesB = parseBytes(b[field]);
|
||||
|
||||
return bytesA - bytesB;
|
||||
};
|
||||
|
||||
// 格式化延迟显示
|
||||
const formatLatency = (latMs: any): string => {
|
||||
if (latMs === null || latMs === undefined || latMs === "") {
|
||||
|
||||
@@ -27,6 +27,12 @@
|
||||
>
|
||||
<ElCheckbox v-model="mainStore.serverConfig.autoStart">自动启动</ElCheckbox>
|
||||
</ElTooltip>
|
||||
<ElTooltip
|
||||
placement="top"
|
||||
content="启用后,不允许使用了与本网络不同的房间名和密码的节点通过本节点进行握手或中转"
|
||||
>
|
||||
<ElCheckbox v-model="mainStore.serverConfig.privateMode">私有模式</ElCheckbox>
|
||||
</ElTooltip>
|
||||
<ElTooltip
|
||||
placement="top"
|
||||
content="帮助其他虚拟网建立P2P链接"
|
||||
|
||||
Generated
+1
-1
@@ -1253,7 +1253,7 @@ checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125"
|
||||
|
||||
[[package]]
|
||||
name = "easytier-game"
|
||||
version = "1.4.5"
|
||||
version = "1.4.6"
|
||||
dependencies = [
|
||||
"hashbrown 0.15.2",
|
||||
"log",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "easytier-game"
|
||||
version = "1.4.5"
|
||||
version = "1.4.6"
|
||||
homepage = "https://github.com/EasyTier/EasyTier"
|
||||
repository = "https://github.com/EasyTier/EasytierGame"
|
||||
description = "A simple network initiator based on Easytier"
|
||||
|
||||
@@ -36,5 +36,6 @@
|
||||
"enablePreventSleep": false, // 启用防止睡眠
|
||||
"compression": "none", // 压缩算法
|
||||
"enableKcpProxy": true, // 启用kcp代理
|
||||
"disableKcpInput": false // 禁用kcp输入
|
||||
"disableKcpInput": false, // 禁用kcp输入
|
||||
"privateMode": false // 启用私有模式
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"$schema": "../node_modules/@tauri-apps/cli/config.schema.json",
|
||||
"productName": "easytier-game",
|
||||
"version": "1.4.5",
|
||||
"version": "1.4.6",
|
||||
"identifier": "com.tauri.easytier-game",
|
||||
|
||||
"build": {
|
||||
@@ -12,7 +12,7 @@
|
||||
"app": {
|
||||
"windows": [
|
||||
{
|
||||
"title": "easytier-game 1.4.5",
|
||||
"title": "easytier-game 1.4.6",
|
||||
"label": "main",
|
||||
"minWidth": 340,
|
||||
"width": 340,
|
||||
|
||||
+6
-1
@@ -46,6 +46,7 @@ const store = defineStore("main", {
|
||||
disableKcpInput: false, //禁用kcp输入
|
||||
bindDeviceEnable: false, //是否绑定设备
|
||||
acceptDNS: false, //魔法dns
|
||||
privateMode: false, //是否启用私有模式
|
||||
|
||||
enablePortForward: false, //是否启用端口转发
|
||||
portForwardData: "", //端口转发数据
|
||||
@@ -56,7 +57,8 @@ const store = defineStore("main", {
|
||||
serverWhiteList: "", // 服务器流量转发白名单
|
||||
// enableListener: true, // 是否启用监听
|
||||
autoStart: false, //随软件自启
|
||||
port: "11010" // 服务器端口
|
||||
port: "11010", // 服务器端口
|
||||
privateMode: false, //是否启用私有模式
|
||||
},
|
||||
cidrEnable: false,
|
||||
proxyForwardBySystem: false, // 是否通过系统内核转发子网代理数据包,禁用内置NAT
|
||||
@@ -133,12 +135,15 @@ const store = defineStore("main", {
|
||||
|
||||
"config.acceptDNS",
|
||||
|
||||
"config.privateMode",
|
||||
|
||||
"serverConfig.autoStart",
|
||||
// 'serverConfig.enableListener',
|
||||
"serverConfig.enableWhiteList",
|
||||
"serverConfig.relayAllPeerrpc",
|
||||
"serverConfig.serverWhiteList",
|
||||
"serverConfig.port",
|
||||
"serverConfig.privateMode",
|
||||
|
||||
"cidrEnable",
|
||||
"proxyForwardBySystem",
|
||||
|
||||
Reference in New Issue
Block a user