自定义更新检测频率

This commit is contained in:
snltty
2024-11-11 17:15:15 +08:00
parent 77268ab0bf
commit 2b37e5d085
43 changed files with 232 additions and 70 deletions

View File

@@ -57,9 +57,9 @@ jobs:
docker tag snltty/linker-musl-x64:latest snltty/linker-musl:amd64 && \
docker push snltty/linker-musl:amd64 && \
docker manifest create snltty/linker-musl:latest snltty/linker-musl:amd64 snltty/linker-musl:arm64 snltty/linker-musl:arm && \
docker manifest create snltty/linker-musl:v1.5.3 snltty/linker-musl:amd64 snltty/linker-musl:arm64 snltty/linker-musl:arm && \
docker manifest create snltty/linker-musl:v1.5.4 snltty/linker-musl:amd64 snltty/linker-musl:arm64 snltty/linker-musl:arm && \
docker manifest push snltty/linker-musl:latest && \
docker manifest push snltty/linker-musl:v1.5.3 && \
docker manifest push snltty/linker-musl:v1.5.4 && \
docker pull --platform linux/arm/v7 snltty/linker-debian-arm:latest && \
docker tag snltty/linker-debian-arm:latest snltty/linker-debian:arm && \
docker push snltty/linker-debian:arm && \
@@ -70,6 +70,6 @@ jobs:
docker tag snltty/linker-debian-x64:latest snltty/linker-debian:amd64 && \
docker push snltty/linker-debian:amd64 && \
docker manifest create snltty/linker-debian:latest snltty/linker-debian:amd64 snltty/linker-debian:arm64 snltty/linker-debian:arm && \
docker manifest create snltty/linker-debian:v1.5.3 snltty/linker-debian:amd64 snltty/linker-debian:arm64 snltty/linker-debian:arm && \
docker manifest create snltty/linker-debian:v1.5.4 snltty/linker-debian:amd64 snltty/linker-debian:arm64 snltty/linker-debian:arm && \
docker manifest push snltty/linker-debian:latest && \
docker manifest push snltty/linker-debian:v1.5.3
docker manifest push snltty/linker-debian:v1.5.4

View File

@@ -33,11 +33,11 @@ jobs:
env:
GITHUB_TOKEN: ${{ secrets.ACTIONS_TOKEN }}
with:
tag_name: v1.5.3
release_name: v1.5.3.${{ steps.date.outputs.today }}
tag_name: v1.5.4
release_name: v1.5.4.${{ steps.date.outputs.today }}
draft: false
prerelease: false
body: "1. 增加连接中继节点的超时时间\r\n2. 增加网卡端口转发备注\r\n3. 已有多个公开中继服务器上线\r\n4. 自定义更新检测频率"
body: "1. 手动检测更新\r\n2. 自定义更新检测频率"
- name: upload-win-x86-oss
id: upload-win-x86-oss
uses: tvrcgo/oss-action@v0.1.1
@@ -47,7 +47,7 @@ jobs:
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
bucket: ide-qbcode
asset-path: ./public/publish-zip/linker-win-x86.zip
target-path: /downloads/linker/v1.5.3/linker-win-x86.zip
target-path: /downloads/linker/v1.5.4/linker-win-x86.zip
- name: upload-win-x86
id: upload-win-x86
uses: actions/upload-release-asset@master
@@ -67,7 +67,7 @@ jobs:
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
bucket: ide-qbcode
asset-path: ./public/publish-zip/linker-win-x64.zip
target-path: /downloads/linker/v1.5.3/linker-win-x64.zip
target-path: /downloads/linker/v1.5.4/linker-win-x64.zip
- name: upload-win-x64
id: upload-win-x64
uses: actions/upload-release-asset@master
@@ -87,7 +87,7 @@ jobs:
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
bucket: ide-qbcode
asset-path: ./public/publish-zip/linker-win-arm64.zip
target-path: /downloads/linker/v1.5.3/linker-win-arm64.zip
target-path: /downloads/linker/v1.5.4/linker-win-arm64.zip
- name: upload-win-arm64
id: upload-win-arm64
uses: actions/upload-release-asset@master
@@ -107,7 +107,7 @@ jobs:
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
bucket: ide-qbcode
asset-path: ./public/publish-zip/linker-linux-x64.zip
target-path: /downloads/linker/v1.5.3/linker-linux-x64.zip
target-path: /downloads/linker/v1.5.4/linker-linux-x64.zip
- name: upload-linux-x64
id: upload-linux-x64
uses: actions/upload-release-asset@master
@@ -127,7 +127,7 @@ jobs:
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
bucket: ide-qbcode
asset-path: ./public/publish-zip/linker-linux-arm.zip
target-path: /downloads/linker/v1.5.3/linker-linux-arm.zip
target-path: /downloads/linker/v1.5.4/linker-linux-arm.zip
- name: upload-linux-arm
id: upload-linux-arm
uses: actions/upload-release-asset@master
@@ -147,7 +147,7 @@ jobs:
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
bucket: ide-qbcode
asset-path: ./public/publish-zip/linker-linux-arm64.zip
target-path: /downloads/linker/v1.5.3/linker-linux-arm64.zip
target-path: /downloads/linker/v1.5.4/linker-linux-arm64.zip
- name: upload-linux-arm64
id: upload-linux-arm64
uses: actions/upload-release-asset@master
@@ -167,7 +167,7 @@ jobs:
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
bucket: ide-qbcode
asset-path: ./public/publish-zip/linker-linux-musl-x64.zip
target-path: /downloads/linker/v1.5.3/linker-linux-musl-x64.zip
target-path: /downloads/linker/v1.5.4/linker-linux-musl-x64.zip
- name: upload-linux-musl-x64
id: upload-linux-musl-x64
uses: actions/upload-release-asset@master
@@ -187,7 +187,7 @@ jobs:
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
bucket: ide-qbcode
asset-path: ./public/publish-zip/linker-linux-musl-arm.zip
target-path: /downloads/linker/v1.5.3/linker-linux-musl-arm.zip
target-path: /downloads/linker/v1.5.4/linker-linux-musl-arm.zip
- name: upload-linux-musl-arm
id: upload-linux-musl-arm
uses: actions/upload-release-asset@master
@@ -207,7 +207,7 @@ jobs:
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
bucket: ide-qbcode
asset-path: ./public/publish-zip/linker-linux-musl-arm64.zip
target-path: /downloads/linker/v1.5.3/linker-linux-musl-arm64.zip
target-path: /downloads/linker/v1.5.4/linker-linux-musl-arm64.zip
- name: upload-linux-musl-arm64
id: upload-linux-musl-arm64
uses: actions/upload-release-asset@master
@@ -227,7 +227,7 @@ jobs:
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
bucket: ide-qbcode
asset-path: ./public/publish-zip/linker-osx-x64.zip
target-path: /downloads/linker/v1.5.3/linker-osx-x64.zip
target-path: /downloads/linker/v1.5.4/linker-osx-x64.zip
- name: upload-osx-x64
id: upload-osx-x64
uses: actions/upload-release-asset@master
@@ -247,7 +247,7 @@ jobs:
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
bucket: ide-qbcode
asset-path: ./public/publish-zip/linker-osx-arm64.zip
target-path: /downloads/linker/v1.5.3/linker-osx-arm64.zip
target-path: /downloads/linker/v1.5.4/linker-osx-arm64.zip
- name: upload-osx-arm64
id: upload-osx-arm64
uses: actions/upload-release-asset@master
@@ -277,7 +277,7 @@ jobs:
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
bucket: ide-qbcode
asset-path: ./public/publish-zip/linker-windows-route.zip
target-path: /downloads/linker/v1.5.3/linker-windows-route.zip
target-path: /downloads/linker/v1.5.4/linker-windows-route.zip
- name: upload-windows-route
id: upload-windows-route
uses: actions/upload-release-asset@master

View File

@@ -38,6 +38,6 @@ jobs:
- name: Push
run: |
nuget push ./linker.tunnel/bin/release/linker.tunnel.1.5.3.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol
nuget push ./linker.libs/bin/release/linker.libs.1.5.3.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol
nuget push ./linker.tun/bin/release/linker.tun.1.5.3.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol
nuget push ./linker.tunnel/bin/release/linker.tunnel.1.5.4.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol
nuget push ./linker.libs/bin/release/linker.libs.1.5.4.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol
nuget push ./linker.tun/bin/release/linker.tun.1.5.4.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol

View File

@@ -14,9 +14,9 @@
<Copyright>snltty</Copyright>
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
<Version>1.5.3</Version>
<AssemblyVersion>1.5.3</AssemblyVersion>
<FileVersion>1.5.3</FileVersion>
<Version>1.5.4</Version>
<AssemblyVersion>1.5.4</AssemblyVersion>
<FileVersion>1.5.4</FileVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<DebugType>full</DebugType>

Binary file not shown.

View File

@@ -1 +1 @@
.delay[data-v-27bd6915]{margin-left:3rem}.servers-wrap[data-v-11926c68]{padding:1rem;font-size:1.3rem;color:#555}.servers-wrap a[data-v-11926c68]{color:#333}.el-checkbox[data-v-11926c68]{vertical-align:middle;margin-right:1rem}
.delay[data-v-2dc931d2]{margin-left:3rem}.servers-wrap[data-v-11926c68]{padding:1rem;font-size:1.3rem;color:#555}.servers-wrap a[data-v-11926c68]{color:#333}.el-checkbox[data-v-11926c68]{vertical-align:middle;margin-right:1rem}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
.table-sort th[data-v-76d64500]{border-bottom:0}.dropdown[data-v-6638f97d]{border:1px solid #ddd;padding:.4rem;font-size:1.3rem;border-radius:.4rem;position:relative}.dropdown .el-icon[data-v-6638f97d]{vertical-align:middle}.dropdown .badge[data-v-6638f97d]{position:absolute;right:-1rem;top:-50%;border-radius:10px;background-color:#f1ae05;color:#fff;padding:.2rem .6rem;font-size:1.2rem}a[data-v-6653ef00]{color:#666;text-decoration:underline}a.green[data-v-6653ef00]{color:green;font-weight:700}a.download[data-v-6653ef00]{margin-left:.6rem}a.download .el-icon[data-v-6653ef00]{vertical-align:middle;font-weight:700;margin-left:.3rem}a.download .el-icon.loading[data-v-6653ef00]{animation:loading-6653ef00 1s linear infinite}a.download+a.download[data-v-6653ef00]{margin-left:.2rem}@keyframes loading-6653ef00{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}img.system[data-v-12103010]{height:1.6rem;vertical-align:middle;margin-right:.4rem}.self[data-v-12103010]{color:#d400ff}.self .el-icon[data-v-12103010]{vertical-align:text-bottom}.ipaddress span[data-v-5db71b03]{vertical-align:middle}.el-input[data-v-5db71b03]{width:12rem;margin-right:.6rem}.el-col[data-v-5d52ca48]{text-align:left}.el-icon.loading[data-v-1960cd79],a.loading[data-v-1960cd79]{vertical-align:middle;font-weight:700;animation:loading-1960cd79 1s linear infinite}.el-switch.is-disabled[data-v-1960cd79]{opacity:1}.el-input[data-v-1960cd79]{width:8rem}.delay[data-v-1960cd79]{position:absolute;right:0;bottom:0;line-height:normal}.switch-btn[data-v-1960cd79]{font-size:1.5rem}@keyframes loading-1960cd79{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.el-switch.is-disabled[data-v-29cf1b30]{opacity:1}.upgrade-wrap[data-v-29cf1b30]{border:1px solid #ddd;margin-bottom:2rem;padding:0 0 1rem 0}.el-switch.is-disabled[data-v-60d5fe5c]{opacity:1}.el-icon.loading[data-v-3a10697e],a.loading[data-v-3a10697e]{vertical-align:middle;font-weight:700;animation:loading-3a10697e 1s linear infinite}.el-switch.is-disabled[data-v-3a10697e]{opacity:1}.el-input[data-v-3a10697e]{width:8rem}.switch-btn[data-v-3a10697e]{font-size:1.5rem}@keyframes loading-3a10697e{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.el-switch.is-disabled[data-v-5abfef9c]{opacity:1}.upgrade-wrap[data-v-5abfef9c]{border:1px solid #ddd;margin-bottom:2rem;padding:1rem 0 1rem 0}.lan-item[data-v-5abfef9c]{margin-bottom:0}.el-switch.is-disabled[data-v-463c1a22]{opacity:1}.green[data-v-463c1a22]{font-weight:700}.el-switch.is-disabled[data-v-1f7f67a4]{opacity:1}a[data-v-bc0b64b8]{text-decoration:underline}a+a[data-v-bc0b64b8]{margin-left:1rem}a.green[data-v-bc0b64b8]{font-weight:700}.head[data-v-15b05a01]{padding-bottom:1rem}.green[data-v-15b05a01]{color:green;font-weight:700}.error[data-v-15b05a01]{font-weight:700}.error .el-icon[data-v-15b05a01]{vertical-align:text-bottom}.head[data-v-219c690c]{padding-bottom:1rem}.error[data-v-219c690c]{font-weight:700}.error .el-icon[data-v-219c690c]{vertical-align:text-bottom}.head[data-v-222ae82e]{padding-bottom:1rem}.table-sort.el-table th.el-table__cell.is-leaf{border-bottom:0}.table-sort.el-table .el-table__inner-wrapper:before{height:0}.home-list-wrap[data-v-3d1c480c]{padding:1rem}.home-list-wrap .page[data-v-3d1c480c]{padding-top:1rem}.home-list-wrap .page-wrap[data-v-3d1c480c]{display:inline-block}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1 +0,0 @@
.table-sort th[data-v-76d64500]{border-bottom:0}.dropdown[data-v-6638f97d]{border:1px solid #ddd;padding:.4rem;font-size:1.3rem;border-radius:.4rem;position:relative}.dropdown .el-icon[data-v-6638f97d]{vertical-align:middle}.dropdown .badge[data-v-6638f97d]{position:absolute;right:-1rem;top:-50%;border-radius:10px;background-color:#f1ae05;color:#fff;padding:.2rem .6rem;font-size:1.2rem}a[data-v-7f8b7c63]{color:#666;text-decoration:underline}a.green[data-v-7f8b7c63]{color:green;font-weight:700}a.download[data-v-7f8b7c63]{margin-left:.6rem}a.download .el-icon[data-v-7f8b7c63]{vertical-align:middle;font-weight:700;margin-left:.3rem}a.download .el-icon.loading[data-v-7f8b7c63]{animation:loading-7f8b7c63 1s linear infinite}@keyframes loading-7f8b7c63{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}img.system[data-v-12103010]{height:1.6rem;vertical-align:middle;margin-right:.4rem}.self[data-v-12103010]{color:#d400ff}.self .el-icon[data-v-12103010]{vertical-align:text-bottom}.ipaddress span[data-v-f3d4d946]{vertical-align:middle}.el-input[data-v-f3d4d946]{width:12rem;margin-right:.6rem}.el-col[data-v-5d52ca48]{text-align:left}.el-icon.loading[data-v-1960cd79],a.loading[data-v-1960cd79]{vertical-align:middle;font-weight:700;animation:loading-1960cd79 1s linear infinite}.el-switch.is-disabled[data-v-1960cd79]{opacity:1}.el-input[data-v-1960cd79]{width:8rem}.delay[data-v-1960cd79]{position:absolute;right:0;bottom:0;line-height:normal}.switch-btn[data-v-1960cd79]{font-size:1.5rem}@keyframes loading-1960cd79{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.el-switch.is-disabled[data-v-29cf1b30]{opacity:1}.upgrade-wrap[data-v-29cf1b30]{border:1px solid #ddd;margin-bottom:2rem;padding:0 0 1rem 0}.el-switch.is-disabled[data-v-60d5fe5c]{opacity:1}.el-icon.loading[data-v-3a10697e],a.loading[data-v-3a10697e]{vertical-align:middle;font-weight:700;animation:loading-3a10697e 1s linear infinite}.el-switch.is-disabled[data-v-3a10697e]{opacity:1}.el-input[data-v-3a10697e]{width:8rem}.switch-btn[data-v-3a10697e]{font-size:1.5rem}@keyframes loading-3a10697e{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.el-switch.is-disabled[data-v-5abfef9c]{opacity:1}.upgrade-wrap[data-v-5abfef9c]{border:1px solid #ddd;margin-bottom:2rem;padding:1rem 0 1rem 0}.lan-item[data-v-5abfef9c]{margin-bottom:0}.el-switch.is-disabled[data-v-463c1a22]{opacity:1}.green[data-v-463c1a22]{font-weight:700}.el-switch.is-disabled[data-v-1f7f67a4]{opacity:1}a[data-v-bc0b64b8]{text-decoration:underline}a+a[data-v-bc0b64b8]{margin-left:1rem}a.green[data-v-bc0b64b8]{font-weight:700}.head[data-v-15b05a01]{padding-bottom:1rem}.green[data-v-15b05a01]{color:green;font-weight:700}.error[data-v-15b05a01]{font-weight:700}.error .el-icon[data-v-15b05a01]{vertical-align:text-bottom}.head[data-v-219c690c]{padding-bottom:1rem}.error[data-v-219c690c]{font-weight:700}.error .el-icon[data-v-219c690c]{vertical-align:text-bottom}.head[data-v-222ae82e]{padding-bottom:1rem}.table-sort.el-table th.el-table__cell.is-leaf{border-bottom:0}.table-sort.el-table .el-table__inner-wrapper:before{height:0}.home-list-wrap[data-v-3d1c480c]{padding:1rem}.home-list-wrap .page[data-v-3d1c480c]{padding-top:1rem}.home-list-wrap .page-wrap[data-v-3d1c480c]{display:inline-block}

View File

@@ -1 +1 @@
<!doctype html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="/favicon.ico"><title>linker.web</title><script defer="defer" src="/js/chunk-vendors.73d25b9a.js"></script><script defer="defer" src="/js/app.0e172b7a.js"></script><link href="/css/chunk-vendors.d8267b33.css" rel="stylesheet"><link href="/css/app.d3461143.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but linker.web doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div></body></html>
<!doctype html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="/favicon.ico"><title>linker.web</title><script defer="defer" src="/js/chunk-vendors.73d25b9a.js"></script><script defer="defer" src="/js/app.e2b81913.js"></script><link href="/css/chunk-vendors.d8267b33.css" rel="stylesheet"><link href="/css/app.d3461143.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but linker.web doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div></body></html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
"use strict";(self["webpackChunklinker_web"]=self["webpackChunklinker_web"]||[]).push([[511],{9256:function(e,a,t){t.r(a),t.d(a,{default:function(){return M}});var n=t(6768);const l={class:"net-wrap app-wrap"},s={class:"inner absolute flex flex-column flex-nowrap"},r={class:"head"},i={class:"body flex-1 relative"},u={class:"status"};function c(e,a,t,c,d,o){const g=(0,n.g2)("Head"),p=(0,n.g2)("List"),v=(0,n.g2)("Status");return(0,n.uX)(),(0,n.CE)("div",l,[(0,n.Lk)("div",s,[(0,n.Lk)("div",r,[(0,n.bF)(g)]),(0,n.Lk)("div",i,[(0,n.bF)(p)]),(0,n.Lk)("div",u,[(0,n.bF)(v,{config:!1})])])])}t(4114);const d=e=>((0,n.Qi)("data-v-213d85ba"),e=e(),(0,n.jt)(),e),o={class:"head-wrap"},g={class:"tools flex"},p=d((()=>(0,n.Lk)("span",{class:"label"},"服务器 ",-1))),v=d((()=>(0,n.Lk)("span",{class:"flex-1"},null,-1))),h={style:{"margin-left":"1rem"}};function f(e,a,t,l,s,r){const i=(0,n.g2)("el-option"),u=(0,n.g2)("el-select"),c=(0,n.g2)("Refresh"),d=(0,n.g2)("el-icon"),f=(0,n.g2)("el-button"),k=(0,n.g2)("Background");return(0,n.uX)(),(0,n.CE)("div",o,[(0,n.Lk)("div",g,[p,(0,n.bF)(u,{modelValue:l.state.server,"onUpdate:modelValue":a[0]||(a[0]=e=>l.state.server=e),placeholder:"服务器",style:{width:"16rem"},size:"small"},{default:(0,n.k6)((()=>[((0,n.uX)(!0),(0,n.CE)(n.FK,null,(0,n.pI)(l.state.servers,(e=>((0,n.uX)(),(0,n.Wv)(i,{key:e.Host,label:e.Name,value:e.Host},null,8,["label","value"])))),128))])),_:1},8,["modelValue"]),v,(0,n.bF)(f,{size:"small",onClick:l.handleRefresh},{default:(0,n.k6)((()=>[(0,n.eW)(" 刷新(F5)"),(0,n.bF)(d,null,{default:(0,n.k6)((()=>[(0,n.bF)(c)])),_:1})])),_:1},8,["onClick"]),(0,n.Lk)("div",h,[(0,n.bF)(k,{name:"net"})])])])}var k=t(3830),m=t(144),b=t(7477),C=t(5096),L={components:{Edit:b.ffu,Refresh:b.C42,Background:C.A},setup(){const e=(0,k.B)(),a=(0,m.Kh)({server:"linker.snltty.com:1802",servers:[]});(0,n.wB)((()=>e.value.config.Client.Servers),(()=>{a.servers=(e.value.config.Client.Servers||[]).slice(0,1),a.server=e.value.config.Client.ServerInfo.Host}));const t=()=>{window.location.reload()};return{state:a,handleRefresh:t}}},w=t(1241);const S=(0,w.A)(L,[["render",f],["__scopeId","data-v-213d85ba"]]);var _=S;const F=e=>((0,n.Qi)("data-v-b6ab4f06"),e=e(),(0,n.jt)(),e),x={class:"net-list-wrap flex flex-column absolute"},z={class:"flex-1 scrollbar"},I={class:"flex"},E=F((()=>(0,n.Lk)("div",{class:"flex-1"},null,-1))),T={class:"tuntap"},A={class:"page t-c"},B={class:"page-wrap t-c"};function P(e,a,t,l,s,r){const i=(0,n.g2)("DeviceName"),u=(0,n.g2)("UpdaterBtn"),c=(0,n.g2)("TuntapShow"),d=(0,n.g2)("el-pagination");return(0,n.uX)(),(0,n.CE)("div",x,[(0,n.Lk)("div",z,[(0,n.Lk)("ul",null,[((0,n.uX)(!0),(0,n.CE)(n.FK,null,(0,n.pI)(l.devices.page.List,((e,a)=>((0,n.uX)(),(0,n.CE)("li",{key:a},[(0,n.Lk)("dl",null,[(0,n.Lk)("dt",I,[(0,n.Lk)("div",null,[(0,n.bF)(i,{item:e},null,8,["item"])]),E,(0,n.Lk)("div",null,[(0,n.bF)(u,{config:!1,item:e},null,8,["item"])])]),(0,n.Lk)("dd",T,[l.tuntap.list[e.MachineId]?((0,n.uX)(),(0,n.Wv)(c,{key:0,item:e},null,8,["item"])):(0,n.Q3)("",!0)])])])))),128))])]),(0,n.Lk)("div",A,[(0,n.Lk)("div",B,[(0,n.bF)(d,{size:"small",background:"",layout:"prev,pager, next","pager-count":5,total:l.devices.page.Count,"page-size":l.devices.page.Request.Size,"current-page":l.devices.page.Request.Page,onCurrentChange:l.handlePageChange,onSizeChange:l.handlePageSizeChange,"page-sizes":[10,20,50,100,255]},null,8,["total","page-size","current-page","onCurrentChange","onSizeChange"])])])])}var y=t(8104),X=t(7985),R=t(9383),D=t(4831),U=t(8695),H=t(3460),N={components:{StarFilled:b.BQ2,UpdaterBtn:D.A,DeviceName:U.A,TuntapShow:H.A},setup(e){(0,k.B)();const a=(0,m.Kh)({}),{devices:t,machineId:l,_getSignList:s,_getSignList1:r,handleDeviceEdit:i,handlePageChange:u,handlePageSizeChange:c,handleDel:d,clearDevicesTimeout:o}=(0,X.r)(),{tuntap:g,_getTuntapInfo:p,handleTuntapRefresh:v,clearTuntapTimeout:h,handleTuntapEdit:f,sortTuntapIP:b}=(0,y.O)(),{_getUpdater:C,_subscribeUpdater:L,clearUpdaterTimeout:w}=(0,R.d)();return(0,n.sV)((()=>{u(),v(),s(),r(),p(),C(),L()})),(0,n.hi)((()=>{o(),h(),w()})),{state:a,devices:t,machineId:l,handlePageChange:u,handlePageSizeChange:c,tuntap:g}}};const V=(0,w.A)(N,[["render",P],["__scopeId","data-v-b6ab4f06"]]);var K=V,Q=t(1311),W=t(1387),j={components:{Head:_,List:K,Status:Q.A},setup(){document.addEventListener("contextmenu",(function(e){e.preventDefault()}));const e=(0,k.B)(),a=(0,W.rd)();return(0,n.sV)((()=>{0==e.value.hasAccess("NetManager")&&a.push({name:"NoPermission"})})),{}}};const q=(0,w.A)(j,[["render",c],["__scopeId","data-v-6a3f3b43"]]);var M=q}}]);
"use strict";(self["webpackChunklinker_web"]=self["webpackChunklinker_web"]||[]).push([[417],{9256:function(e,a,t){t.r(a),t.d(a,{default:function(){return M}});var n=t(6768);const l={class:"net-wrap app-wrap"},s={class:"inner absolute flex flex-column flex-nowrap"},r={class:"head"},i={class:"body flex-1 relative"},u={class:"status"};function c(e,a,t,c,d,o){const g=(0,n.g2)("Head"),p=(0,n.g2)("List"),v=(0,n.g2)("Status");return(0,n.uX)(),(0,n.CE)("div",l,[(0,n.Lk)("div",s,[(0,n.Lk)("div",r,[(0,n.bF)(g)]),(0,n.Lk)("div",i,[(0,n.bF)(p)]),(0,n.Lk)("div",u,[(0,n.bF)(v,{config:!1})])])])}t(4114);const d=e=>((0,n.Qi)("data-v-213d85ba"),e=e(),(0,n.jt)(),e),o={class:"head-wrap"},g={class:"tools flex"},p=d((()=>(0,n.Lk)("span",{class:"label"},"服务器 ",-1))),v=d((()=>(0,n.Lk)("span",{class:"flex-1"},null,-1))),h={style:{"margin-left":"1rem"}};function f(e,a,t,l,s,r){const i=(0,n.g2)("el-option"),u=(0,n.g2)("el-select"),c=(0,n.g2)("Refresh"),d=(0,n.g2)("el-icon"),f=(0,n.g2)("el-button"),k=(0,n.g2)("Background");return(0,n.uX)(),(0,n.CE)("div",o,[(0,n.Lk)("div",g,[p,(0,n.bF)(u,{modelValue:l.state.server,"onUpdate:modelValue":a[0]||(a[0]=e=>l.state.server=e),placeholder:"服务器",style:{width:"16rem"},size:"small"},{default:(0,n.k6)((()=>[((0,n.uX)(!0),(0,n.CE)(n.FK,null,(0,n.pI)(l.state.servers,(e=>((0,n.uX)(),(0,n.Wv)(i,{key:e.Host,label:e.Name,value:e.Host},null,8,["label","value"])))),128))])),_:1},8,["modelValue"]),v,(0,n.bF)(f,{size:"small",onClick:l.handleRefresh},{default:(0,n.k6)((()=>[(0,n.eW)(" 刷新(F5)"),(0,n.bF)(d,null,{default:(0,n.k6)((()=>[(0,n.bF)(c)])),_:1})])),_:1},8,["onClick"]),(0,n.Lk)("div",h,[(0,n.bF)(k,{name:"net"})])])])}var k=t(3830),m=t(144),b=t(7477),C=t(5096),L={components:{Edit:b.ffu,Refresh:b.C42,Background:C.A},setup(){const e=(0,k.B)(),a=(0,m.Kh)({server:"linker.snltty.com:1802",servers:[]});(0,n.wB)((()=>e.value.config.Client.Servers),(()=>{a.servers=(e.value.config.Client.Servers||[]).slice(0,1),a.server=e.value.config.Client.ServerInfo.Host}));const t=()=>{window.location.reload()};return{state:a,handleRefresh:t}}},w=t(1241);const S=(0,w.A)(L,[["render",f],["__scopeId","data-v-213d85ba"]]);var _=S;const F=e=>((0,n.Qi)("data-v-b6ab4f06"),e=e(),(0,n.jt)(),e),x={class:"net-list-wrap flex flex-column absolute"},z={class:"flex-1 scrollbar"},I={class:"flex"},E=F((()=>(0,n.Lk)("div",{class:"flex-1"},null,-1))),T={class:"tuntap"},A={class:"page t-c"},B={class:"page-wrap t-c"};function P(e,a,t,l,s,r){const i=(0,n.g2)("DeviceName"),u=(0,n.g2)("UpdaterBtn"),c=(0,n.g2)("TuntapShow"),d=(0,n.g2)("el-pagination");return(0,n.uX)(),(0,n.CE)("div",x,[(0,n.Lk)("div",z,[(0,n.Lk)("ul",null,[((0,n.uX)(!0),(0,n.CE)(n.FK,null,(0,n.pI)(l.devices.page.List,((e,a)=>((0,n.uX)(),(0,n.CE)("li",{key:a},[(0,n.Lk)("dl",null,[(0,n.Lk)("dt",I,[(0,n.Lk)("div",null,[(0,n.bF)(i,{item:e},null,8,["item"])]),E,(0,n.Lk)("div",null,[(0,n.bF)(u,{config:!1,item:e},null,8,["item"])])]),(0,n.Lk)("dd",T,[l.tuntap.list[e.MachineId]?((0,n.uX)(),(0,n.Wv)(c,{key:0,item:e},null,8,["item"])):(0,n.Q3)("",!0)])])])))),128))])]),(0,n.Lk)("div",A,[(0,n.Lk)("div",B,[(0,n.bF)(d,{size:"small",background:"",layout:"prev,pager, next","pager-count":5,total:l.devices.page.Count,"page-size":l.devices.page.Request.Size,"current-page":l.devices.page.Request.Page,onCurrentChange:l.handlePageChange,onSizeChange:l.handlePageSizeChange,"page-sizes":[10,20,50,100,255]},null,8,["total","page-size","current-page","onCurrentChange","onSizeChange"])])])])}var y=t(8104),X=t(7985),R=t(9383),D=t(167),U=t(8695),H=t(3460),N={components:{StarFilled:b.BQ2,UpdaterBtn:D.A,DeviceName:U.A,TuntapShow:H.A},setup(e){(0,k.B)();const a=(0,m.Kh)({}),{devices:t,machineId:l,_getSignList:s,_getSignList1:r,handleDeviceEdit:i,handlePageChange:u,handlePageSizeChange:c,handleDel:d,clearDevicesTimeout:o}=(0,X.r)(),{tuntap:g,_getTuntapInfo:p,handleTuntapRefresh:v,clearTuntapTimeout:h,handleTuntapEdit:f,sortTuntapIP:b}=(0,y.O)(),{_getUpdater:C,_subscribeUpdater:L,clearUpdaterTimeout:w}=(0,R.d)();return(0,n.sV)((()=>{u(),v(),s(),r(),p(),C(),L()})),(0,n.hi)((()=>{o(),h(),w()})),{state:a,devices:t,machineId:l,handlePageChange:u,handlePageSizeChange:c,tuntap:g}}};const V=(0,w.A)(N,[["render",P],["__scopeId","data-v-b6ab4f06"]]);var K=V,Q=t(1908),W=t(1387),j={components:{Head:_,List:K,Status:Q.A},setup(){document.addEventListener("contextmenu",(function(e){e.preventDefault()}));const e=(0,k.B)(),a=(0,W.rd)();return(0,n.sV)((()=>{0==e.value.hasAccess("NetManager")&&a.push({name:"NoPermission"})})),{}}};const q=(0,w.A)(j,[["render",c],["__scopeId","data-v-6a3f3b43"]]);var M=q}}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -16,9 +16,9 @@
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
<PackageReleaseNotes>linker tun</PackageReleaseNotes>
<Version>1.5.3</Version>
<AssemblyVersion>1.5.3</AssemblyVersion>
<FileVersion>1.5.3</FileVersion>
<Version>1.5.4</Version>
<AssemblyVersion>1.5.4</AssemblyVersion>
<FileVersion>1.5.4</FileVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">

View File

@@ -16,9 +16,9 @@
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
<PackageReleaseNotes>linker tunnel</PackageReleaseNotes>
<Version>1.5.3</Version>
<AssemblyVersion>1.5.3</AssemblyVersion>
<FileVersion>1.5.3</FileVersion>
<Version>1.5.4</Version>
<AssemblyVersion>1.5.4</AssemblyVersion>
<FileVersion>1.5.4</FileVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">

View File

@@ -17,7 +17,9 @@ export const getSecretKey = () => {
export const setSecretKey = (data) => {
return sendWebsocketMsg('updaterclient/SetSecretKey', data);
}
export const setUpdateInterval = (data) => {
return sendWebsocketMsg('updaterclient/SetInterval', data);
}
export const getUpdaterCurrent = () => {
return sendWebsocketMsg('updaterclient/getcurrent');
@@ -33,4 +35,7 @@ export const exitServer = () => {
}
export const subscribeUpdater = () => {
return sendWebsocketMsg('updaterclient/Subscribe');
}
export const checkUpdater = (data) => {
return sendWebsocketMsg('updaterclient/check', data);
}

View File

@@ -22,7 +22,7 @@
<span title="此设备的外网IP" class="ipaddress" @click="handleExternal(scope.row)"><span>😴...</span></span>
</template>
<span class="flex-1"></span>
<UpdaterBtn :config="true" :item="scope.row"></UpdaterBtn>
<UpdaterBtn v-if="scope.row.showip == false" :config="true" :item="scope.row"></UpdaterBtn>
</p>
</div>
</template>

View File

@@ -23,19 +23,20 @@
</template>
</span>
</a>
<a href="javascript:;" class="download" title="检查更新" @click="handleCheck"><el-icon><Refresh /></el-icon></a>
</template>
<script>
import { injectGlobalData } from '@/provide';
import { computed, h, ref } from 'vue';
import { ElMessage, ElMessageBox, ElOption, ElSelect } from 'element-plus';
import { confirm } from '@/apis/updater';
import {Download,Loading,CircleCheck} from '@element-plus/icons-vue'
import { checkUpdater, confirm } from '@/apis/updater';
import {Download,Loading,CircleCheck,Refresh} from '@element-plus/icons-vue'
import { useUpdater } from './updater';
export default {
props:['item','config'],
components:{Download,Loading,CircleCheck},
components:{Download,Loading,CircleCheck,Refresh},
setup (props) {
const globalData = injectGlobalData();
@@ -147,9 +148,31 @@ export default {
}).catch(() => {});
}
}
const handleCheck = ()=>{
const selectedValue = ref(props.item.MachineId);
const selectOptions = [
h(ElOption, { label: `仅检查[${props.item.MachineName}]`, value: props.item.MachineId }),
h(ElOption, { label: `仅检查[本组所有]`, value: 'g-all' }),
];
ElMessageBox({
title: '选择检查对象',
message: () => h(ElSelect, {
modelValue: selectedValue.value,
placeholder: '请选择',
style:'width:20rem;',
'onUpdate:modelValue': (val) => {
selectedValue.value = val
}
}, selectOptions),
confirmButtonText: '确定',
cancelButtonText: '取消'
}).then(() => {
checkUpdater(selectedValue.value == props.item.MachineId ? selectedValue.value : '');
}).catch(() => {});
}
return {
item:computed(()=>props.item),updater,updaterText,updaterColor,handleUpdate
item:computed(()=>props.item),updater,updaterText,updaterColor,handleUpdate,handleCheck
}
}
}
@@ -175,5 +198,6 @@ a.download{
margin-left:.3rem
}
+a.download{margin-left:.2rem}
}
</style>

View File

@@ -117,7 +117,7 @@ export default {
form: {
name:step.value.form.client.name || globalData.value.config.Client.Name,
groupid: step.value.form.client.groupid ||globalData.value.config.Client.Group.Id,
groupPassword: step.value.form.client.groupPassword ||globalData.value.config.Client.GroupPassword,
groupPassword: step.value.form.client.groupPassword ||globalData.value.config.Client.Group.Password,
api: step.value.form.client.api ||globalData.value.config.Client.CApi.ApiPort,
web: step.value.form.client.web ||globalData.value.config.Client.CApi.WebPort,
password:step.value.form.client.password || globalData.value.config.Client.CApi.ApiPassword,

View File

@@ -7,6 +7,7 @@
中继节点 : {{state.nodes.length}}
</a>
</el-form-item>
<el-dialog v-model="state.show" title="中继节点" width="760" top="2vh">
<div>
<el-table :data="state.nodes" size="small" border height="500">

View File

@@ -5,15 +5,37 @@
<span>密钥正确时可更新服务端</span>
</div>
</el-form-item>
<el-form-item label="客户端更新检测频率">
<div>
<div>
<el-input-number v-model="state.year" :min="0" :max="99" style="width:12rem" @change="handleSecChange" />
<el-input-number v-model="state.month" :min="0" :max="99" style="width:12rem" @change="handleSecChange" />
<el-input-number v-model="state.day" :min="0" :max="99" style="width:12rem" @change="handleSecChange" />
</div>
<div>
<el-input-number v-model="state.hour" :min="0" :max="99" style="width:12rem" @change="handleSecChange" />
<el-input-number v-model="state.min" :min="0" :max="99" style="width:12rem" @change="handleSecChange"/>
<el-input-number v-model="state.sec" :min="0" :max="99" style="width:12rem" @change="handleSecChange"/>
</div>
</div>
</el-form-item>
</template>
<script>
import { getSecretKey,setSecretKey } from '@/apis/updater';
import { getSecretKey,setSecretKey, setUpdateInterval } from '@/apis/updater';
import { injectGlobalData } from '@/provide';
import { ElMessage } from 'element-plus';
import { onMounted, reactive } from 'vue'
export default {
setup(props) {
const globalData = injectGlobalData();
const state = reactive({
secretKey:''
secretKey:'',
year:0,
month:0,
day:0,
hour:0,
min:1,
sec:0,
});
const _getSecretKey = ()=>{
getSecretKey().then((res)=>{
@@ -29,15 +51,45 @@ export default {
ElMessage.error('操作失败');
});
}
const _setUpdateInterval = ()=>{
const seconds = state.year*31536000 + state.month*2592000 + state.day*86400 + state.hour*3600 + state.min*60 + state.sec;
setUpdateInterval(seconds).then(()=>{
ElMessage.success('已操作');
}).catch(()=>{
ElMessage.error('操作失败');
});
}
const handleSecChange = ()=>{
_setUpdateInterval();
}
const handleChange = ()=>{
_setSecretKey();
}
onMounted(()=>{
_getSecretKey();
let seconds = globalData.value.config.Common.UpdateIntervalSeconds;
state. year = Math.floor(seconds / 31536000);
seconds %= 31536000;
state. month = Math.floor(seconds / 2592000 );
seconds %= 2592000 ;
state.day = Math.floor(seconds / 86400) ;
seconds %= 86400;
state.hour =Math.floor( seconds / 3600);
seconds %= 3600;
state.min = Math.floor(seconds / 60);
seconds %= 60 ;
state.sec = seconds;
});
return {state,handleChange}
return {state,handleChange,handleSecChange}
}
}
</script>

View File

@@ -115,6 +115,8 @@ export default {
'2609':'服务器重启',
'2610':'订阅更新信息(转发)',
'2611':'订阅更新信息(转发)',
'2612':'检查更新',
'2613':'检查更新(转发)',
'2701':'服务器流量',
'2702':'服务器信标流量',

View File

@@ -21,17 +21,15 @@
<Title>linker</Title>
<Authors>snltty</Authors>
<Company>snltty</Company>
<Description>1. 增加连接中继节点的超时时间
2. 增加网卡端口转发备注
3. 已有多个公开中继服务器上线
4. 自定义更新检测频率</Description>
<Description>1. 手动检测更新
2. 自定义更新检测频率</Description>
<Copyright>snltty</Copyright>
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
<PackageReleaseNotes>linker</PackageReleaseNotes>
<Version>1.5.3</Version>
<AssemblyVersion>1.5.3</AssemblyVersion>
<FileVersion>1.5.3</FileVersion>
<Version>1.5.4</Version>
<AssemblyVersion>1.5.4</AssemblyVersion>
<FileVersion>1.5.4</FileVersion>
</PropertyGroup>

View File

@@ -47,6 +47,7 @@ namespace linker.plugins.relay.client
_ = relayTransfer.ConnectAsync(relayConnectInfo.FromMachineId, relayConnectInfo.ToMachineId, relayConnectInfo.TransactionId, relayConnectInfo.NodeId);
return true;
}
}
public sealed class RelayConnectInfo

View File

@@ -117,7 +117,6 @@ namespace linker.config
public IPEndPoint EndPoint { get; set; }
public long LastTicks { get; set; }
}
[MemoryPackable]

View File

@@ -112,6 +112,11 @@ namespace linker.plugins.tuntap
return;
}
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
{
LoggerHelper.Instance.Debug($"{NetworkHelper.Value2IP(ip)} connection not found");
}
_ = ConnectTunnel(ip).ContinueWith((result, state) =>
{
//结束操作
@@ -184,6 +189,10 @@ namespace linker.plugins.tuntap
return await ConnectTunnel(machineId, TunnelProtocolType.Quic).ConfigureAwait(false);
}
}
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
{
LoggerHelper.Instance.Debug($"{NetworkHelper.Value2IP(ip)} to machine not found");
}
return null;
}

View File

@@ -42,6 +42,13 @@ namespace linker.plugins.updater
updaterTransfer.SetSecretKey(param.Content);
}
[ClientApiAccessAttribute(ClientApiAccess.Config)]
public void SetInterval(ApiControllerParamsInfo param)
{
updaterTransfer.SetInterval(int.Parse(param.Content));
}
public async Task<UpdateInfo> GetServer(ApiControllerParamsInfo param)
{
MessageResponeInfo resp = await messengerSender.SendReply(new MessageRequestWrap
@@ -163,6 +170,19 @@ namespace linker.plugins.updater
MessengerId = (ushort)UpdaterMessengerIds.SubscribeForward
});
}
public async Task Check(ApiControllerParamsInfo param)
{
await messengerSender.SendOnly(new MessageRequestWrap
{
Connection = clientSignInState.Connection,
MessengerId = (ushort)UpdaterMessengerIds.CheckForward,
Payload = string.IsNullOrWhiteSpace(param.Content) ? Helper.EmptyArray : MemoryPackSerializer.Serialize(param.Content)
});
if (string.IsNullOrWhiteSpace(param.Content) || param.Content == config.Data.Client.Id)
{
updaterTransfer.Check();
}
}
}
public sealed class UpdaterListInfo

View File

@@ -50,6 +50,11 @@ namespace linker.plugins.updater
fileConfig.Data.Client.Updater.SecretKey = key;
fileConfig.Data.Update();
}
public void SetInterval(int sec)
{
fileConfig.Data.Common.UpdateIntervalSeconds = sec;
fileConfig.Data.Update();
}
/// <summary>
/// 所有客户端的更新信息
@@ -100,6 +105,11 @@ namespace linker.plugins.updater
}
}
public void Check()
{
_ = updaterHelper.GetUpdateInfo(updateInfo);
}
private void UpdateTask()
{
TimerHelper.SetInterval(async () =>

View File

@@ -68,6 +68,16 @@ namespace linker.plugins.updater.messenger
string machineId = MemoryPackSerializer.Deserialize<string>(connection.ReceiveRequestWrap.Payload.Span);
updaterTransfer.Subscribe(machineId);
}
/// <summary>
/// 检查更新
/// </summary>
/// <param name="connection"></param>
[MessengerId((ushort)UpdaterMessengerIds.Check)]
public void Check(IConnection connection)
{
updaterTransfer.Check();
}
}
@@ -236,5 +246,35 @@ namespace linker.plugins.updater.messenger
}
}
/// <summary>
/// 检查更新转发
/// </summary>
/// <param name="connection"></param>
[MessengerId((ushort)UpdaterMessengerIds.CheckForward)]
public void CheckForward(IConnection connection)
{
if (signCaching.TryGet(connection.Id, out SignCacheInfo cache))
{
string toMachineId = string.Empty;
if (connection.ReceiveRequestWrap.Payload.Length > 0)
{
toMachineId = MemoryPackSerializer.Deserialize<string>(connection.ReceiveRequestWrap.Payload.Span);
}
var clients = string.IsNullOrWhiteSpace(toMachineId)
? signCaching.Get(cache.GroupId).Where(c => c.Connected && c.MachineId != connection.Id)
: signCaching.Get(cache.GroupId).Where(c => c.Connected && c.MachineId == toMachineId);
foreach (var item in clients)
{
_ = messengerSender.SendOnly(new MessageRequestWrap
{
Connection = item.Connection,
MessengerId = (ushort)UpdaterMessengerIds.Check,
});
}
}
}
}
}

View File

@@ -20,6 +20,9 @@
Subscribe = 2610,
SubscribeForward = 2611,
Check = 2612,
CheckForward = 2613,
Max = 2299
}
}

View File

@@ -33,16 +33,16 @@ do
fi
done
cd public/publish/docker/linux-${p}-x64/${f}
docker buildx build -f ${target}/public/publish/docker/linux-${p}-x64/${f}/Dockerfile-${p} --platform="linux/x86_64" --force-rm -t "${image}-${p}-x64:latest" -t "${image}-${p}-x64:v1.5.3" . --push
docker buildx build -f ${target}/public/publish/docker/linux-${p}-x64/${f}/Dockerfile-${p} --platform="linux/x86_64" --force-rm -t "${image}-${p}-x64:latest" -t "${image}-${p}-x64:v1.5.4" . --push
cd ../../../../../
cd public/publish/docker/linux-${p}-arm64/${f}
docker buildx build -f ${target}/public/publish/docker/linux-${p}-arm64/${f}/Dockerfile-${p} --platform="linux/arm64" --force-rm -t "${image}-${p}-arm64:latest" -t "${image}-${p}-arm64:v1.5.3" . --push
docker buildx build -f ${target}/public/publish/docker/linux-${p}-arm64/${f}/Dockerfile-${p} --platform="linux/arm64" --force-rm -t "${image}-${p}-arm64:latest" -t "${image}-${p}-arm64:v1.5.4" . --push
cd ../../../../../
cd public/publish/docker/linux-${p}-arm/${f}
docker buildx build -f ${target}/public/publish/docker/linux-${p}-arm/${f}/Dockerfile-${p} --platform="linux/arm/v7" --force-rm -t "${image}-${p}-arm:latest" -t "${image}-${p}-arm:v1.5.3" . --push
docker buildx build -f ${target}/public/publish/docker/linux-${p}-arm/${f}/Dockerfile-${p} --platform="linux/arm/v7" --force-rm -t "${image}-${p}-arm:latest" -t "${image}-${p}-arm:v1.5.4" . --push
cd ../../../../../
done
done

View File

@@ -1,6 +1,4 @@
v1.5.3
2024-11-11 10:38:17
1. 增加连接中继节点的超时时间
2. 增加网卡端口转发备注
3. 已有多个公开中继服务器上线
4. 自定义更新检测频率
v1.5.4
2024-11-11 17:15:15
1. 手动检测更新
2. 自定义更新检测频率