mirror of
https://github.com/snltty/linker.git
synced 2025-09-26 21:15:57 +08:00
cdkey独立,可作用于中继和内网穿透
This commit is contained in:
@@ -6,6 +6,7 @@ dotnet_diagnostic.CA1416.severity = none
|
||||
[*.cs]
|
||||
#### 命名样式 ####
|
||||
|
||||
|
||||
# 命名规则
|
||||
|
||||
dotnet_naming_rule.interface_should_be_begins_with_i.severity = suggestion
|
||||
@@ -127,6 +128,7 @@ dotnet_naming_style.帕斯卡拼写法.word_separator =
|
||||
dotnet_naming_style.帕斯卡拼写法.capitalization = pascal_case
|
||||
|
||||
[*.{cs,vb}]
|
||||
dotnet_diagnostic.CA1838.severity = none
|
||||
dotnet_style_qualification_for_field = false:silent
|
||||
dotnet_style_qualification_for_property = false:silent
|
||||
dotnet_style_qualification_for_method = false:silent
|
||||
|
12
.github/workflows/docker.yml
vendored
12
.github/workflows/docker.yml
vendored
@@ -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.8.2 snltty/linker-musl:amd64 snltty/linker-musl:arm64 snltty/linker-musl:arm && \
|
||||
docker manifest create snltty/linker-musl:v1.8.3 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.8.2 && \
|
||||
docker manifest push snltty/linker-musl:v1.8.3 && \
|
||||
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,9 +70,9 @@ 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.8.2 snltty/linker-debian:amd64 snltty/linker-debian:arm64 snltty/linker-debian:arm && \
|
||||
docker manifest create snltty/linker-debian:v1.8.3 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.8.2 && \
|
||||
docker manifest push snltty/linker-debian:v1.8.3 && \
|
||||
docker pull --platform linux/arm/v7 snltty/linker-kvm-arm:latest && \
|
||||
docker tag snltty/linker-kvm-arm:latest snltty/linker-kvm:arm && \
|
||||
docker push snltty/linker-kvm:arm && \
|
||||
@@ -83,6 +83,6 @@ jobs:
|
||||
docker tag snltty/linker-kvm-x64:latest snltty/linker-kvm:amd64 && \
|
||||
docker push snltty/linker-kvm:amd64 && \
|
||||
docker manifest create snltty/linker-kvm:latest snltty/linker-kvm:amd64 snltty/linker-kvm:arm64 snltty/linker-kvm:arm && \
|
||||
docker manifest create snltty/linker-kvm:v1.8.2 snltty/linker-kvm:amd64 snltty/linker-kvm:arm64 snltty/linker-kvm:arm && \
|
||||
docker manifest create snltty/linker-kvm:v1.8.3 snltty/linker-kvm:amd64 snltty/linker-kvm:arm64 snltty/linker-kvm:arm && \
|
||||
docker manifest push snltty/linker-kvm:latest && \
|
||||
docker manifest push snltty/linker-kvm:v1.8.2
|
||||
docker manifest push snltty/linker-kvm:v1.8.3
|
26
.github/workflows/dotnet.yml
vendored
26
.github/workflows/dotnet.yml
vendored
@@ -33,11 +33,11 @@ jobs:
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.ACTIONS_TOKEN }}
|
||||
with:
|
||||
tag_name: v1.8.2
|
||||
release_name: v1.8.2.${{ steps.date.outputs.today }}
|
||||
tag_name: v1.8.3
|
||||
release_name: v1.8.3.${{ steps.date.outputs.today }}
|
||||
draft: false
|
||||
prerelease: false
|
||||
body: "1. 一些累计更新\r\n2. 重建权限存储,ulong改为BitArray,同组所有客户端需保持版本一致\r\n3. 增加唤醒功能,支持WOL,COM继电器,HID继电器\r\n4. 基于One-KVM包装docker镜像集成linker\r\n5. 管理端口改为1804,一个端口托管Web+Websocket"
|
||||
body: "1. 一些累计更新\r\n2. 修复socks5,解决CPU爆满问题,增加域名解析和HTTP代理\r\n3. 优化唤醒模块\r\n5. 管理端口改为1804,一个端口托管Web+Websocket"
|
||||
- name: publish projects
|
||||
run: ./publish.bat "C:\\Android\\android-sdk"
|
||||
- name: upload-win-x86-oss
|
||||
@@ -49,7 +49,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.8.2/linker-win-x86.zip
|
||||
target-path: /downloads/linker/v1.8.3/linker-win-x86.zip
|
||||
- name: upload-win-x86
|
||||
id: upload-win-x86
|
||||
uses: actions/upload-release-asset@master
|
||||
@@ -69,7 +69,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.8.2/linker-win-x64.zip
|
||||
target-path: /downloads/linker/v1.8.3/linker-win-x64.zip
|
||||
- name: upload-win-x64
|
||||
id: upload-win-x64
|
||||
uses: actions/upload-release-asset@master
|
||||
@@ -89,7 +89,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.8.2/linker-win-arm64.zip
|
||||
target-path: /downloads/linker/v1.8.3/linker-win-arm64.zip
|
||||
- name: upload-win-arm64
|
||||
id: upload-win-arm64
|
||||
uses: actions/upload-release-asset@master
|
||||
@@ -109,7 +109,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.8.2/linker-linux-x64.zip
|
||||
target-path: /downloads/linker/v1.8.3/linker-linux-x64.zip
|
||||
- name: upload-linux-x64
|
||||
id: upload-linux-x64
|
||||
uses: actions/upload-release-asset@master
|
||||
@@ -129,7 +129,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.8.2/linker-linux-arm.zip
|
||||
target-path: /downloads/linker/v1.8.3/linker-linux-arm.zip
|
||||
- name: upload-linux-arm
|
||||
id: upload-linux-arm
|
||||
uses: actions/upload-release-asset@master
|
||||
@@ -149,7 +149,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.8.2/linker-linux-arm64.zip
|
||||
target-path: /downloads/linker/v1.8.3/linker-linux-arm64.zip
|
||||
- name: upload-linux-arm64
|
||||
id: upload-linux-arm64
|
||||
uses: actions/upload-release-asset@master
|
||||
@@ -169,7 +169,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.8.2/linker-linux-musl-x64.zip
|
||||
target-path: /downloads/linker/v1.8.3/linker-linux-musl-x64.zip
|
||||
- name: upload-linux-musl-x64
|
||||
id: upload-linux-musl-x64
|
||||
uses: actions/upload-release-asset@master
|
||||
@@ -189,7 +189,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.8.2/linker-linux-musl-arm.zip
|
||||
target-path: /downloads/linker/v1.8.3/linker-linux-musl-arm.zip
|
||||
- name: upload-linux-musl-arm
|
||||
id: upload-linux-musl-arm
|
||||
uses: actions/upload-release-asset@master
|
||||
@@ -209,7 +209,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.8.2/linker-linux-musl-arm64.zip
|
||||
target-path: /downloads/linker/v1.8.3/linker-linux-musl-arm64.zip
|
||||
- name: upload-linux-musl-arm64
|
||||
id: upload-linux-musl-arm64
|
||||
uses: actions/upload-release-asset@master
|
||||
@@ -259,7 +259,7 @@ jobs:
|
||||
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
|
||||
bucket: ide-qbcode
|
||||
asset-path: ./public/publish-zip/linker.apk
|
||||
target-path: /downloads/linker/v1.8.2/linker.apk
|
||||
target-path: /downloads/linker/v1.8.3/linker.apk
|
||||
- name: upload-apk
|
||||
id: upload-apk
|
||||
uses: actions/upload-release-asset@master
|
||||
|
6
.github/workflows/ipk.yml
vendored
6
.github/workflows/ipk.yml
vendored
@@ -44,7 +44,7 @@ jobs:
|
||||
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
|
||||
bucket: ide-qbcode
|
||||
asset-path: ./public/publish-ipk/x64/linker-x64.ipk
|
||||
target-path: /downloads/linker/v1.8.2/linker-x64.ipk
|
||||
target-path: /downloads/linker/v1.8.3/linker-x64.ipk
|
||||
- name: upload-x64
|
||||
id: upload-x64
|
||||
uses: actions/upload-release-asset@master
|
||||
@@ -64,7 +64,7 @@ jobs:
|
||||
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
|
||||
bucket: ide-qbcode
|
||||
asset-path: ./public/publish-ipk/arm/linker-arm.ipk
|
||||
target-path: /downloads/linker/v1.8.2/linker-arm.ipk
|
||||
target-path: /downloads/linker/v1.8.3/linker-arm.ipk
|
||||
- name: upload-arm
|
||||
id: upload-arm
|
||||
uses: actions/upload-release-asset@master
|
||||
@@ -84,7 +84,7 @@ jobs:
|
||||
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
|
||||
bucket: ide-qbcode
|
||||
asset-path: ./public/publish-ipk/arm64/linker-arm64.ipk
|
||||
target-path: /downloads/linker/v1.8.2/linker-arm64.ipk
|
||||
target-path: /downloads/linker/v1.8.3/linker-arm64.ipk
|
||||
- name: upload-arm64
|
||||
id: upload-arm64
|
||||
uses: actions/upload-release-asset@master
|
||||
|
63
.github/workflows/nuget.yml
vendored
63
.github/workflows/nuget.yml
vendored
@@ -37,6 +37,7 @@ jobs:
|
||||
dotnet build ./src/linker.messenger.pcp -c release
|
||||
dotnet build ./src/linker.messenger.plan -c release
|
||||
dotnet build ./src/linker.messenger.relay -c release
|
||||
dotnet build ./src/linker.messenger.cdkey -c release
|
||||
dotnet build ./src/linker.messenger.serializer.memorypack -c release
|
||||
dotnet build ./src/linker.messenger.sforward -c release
|
||||
dotnet build ./src/linker.messenger.signin -c release
|
||||
@@ -70,6 +71,7 @@ jobs:
|
||||
dotnet pack ./src/linker.messenger.pcp -c release
|
||||
dotnet pack ./src/linker.messenger.plan -c release
|
||||
dotnet pack ./src/linker.messenger.relay -c release
|
||||
dotnet pack ./src/linker.messenger.cdkey -c release
|
||||
dotnet pack ./src/linker.messenger.serializer.memorypack -c release
|
||||
dotnet pack ./src/linker.messenger.sforward -c release
|
||||
dotnet pack ./src/linker.messenger.signin -c release
|
||||
@@ -87,33 +89,34 @@ jobs:
|
||||
|
||||
- name: Push
|
||||
run: |
|
||||
dotnet nuget push ./src/linker.libs/bin/release/linker.libs.1.8.2.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.messenger/bin/release/linker.messenger.1.8.2.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.messenger.access/bin/release/linker.messenger.access.1.8.2.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.messenger.action/bin/release/linker.messenger.action.1.8.2.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.messenger.api/bin/release/linker.messenger.api.1.8.2.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.messenger.channel/bin/release/linker.messenger.channel.1.8.2.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.messenger.decenter/bin/release/linker.messenger.decenter.1.8.2.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.messenger.entry/bin/release/linker.messenger.entry.1.8.2.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.messenger.exroute/bin/release/linker.messenger.exroute.1.8.2.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.messenger.flow/bin/release/linker.messenger.flow.1.8.2.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.messenger.forward/bin/release/linker.messenger.forward.1.8.2.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.messenger.listen/bin/release/linker.messenger.listen.1.8.2.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.messenger.logger/bin/release/linker.messenger.logger.1.8.2.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.messenger.pcp/bin/release/linker.messenger.pcp.1.8.2.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.messenger.plan/bin/release/linker.messenger.plan.1.8.2.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.messenger.relay/bin/release/linker.messenger.relay.1.8.2.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.messenger.serializer.memorypack/bin/release/linker.messenger.serializer.memorypack.1.8.2.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.messenger.sforward/bin/release/linker.messenger.sforward.1.8.2.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.messenger.signin/bin/release/linker.messenger.signin.1.8.2.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.messenger.socks5/bin/release/linker.messenger.socks5.1.8.2.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.messenger.store.file/bin/release/linker.messenger.store.file.1.8.2.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.messenger.sync/bin/release/linker.messenger.sync.1.8.2.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.messenger.tunnel/bin/release/linker.messenger.tunnel.1.8.2.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.messenger.tuntap/bin/release/linker.messenger.tuntap.1.8.2.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.messenger.updater/bin/release/linker.messenger.updater.1.8.2.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.messenger.firewall/bin/release/linker.messenger.firewall.1.8.2.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.messenger.wakeup/bin/release/linker.messenger.wakeup.1.8.2.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.tun/bin/release/linker.tun.1.8.2.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.snat/bin/release/linker.snat.1.8.2.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.tunnel/bin/release/linker.tunnel.1.8.2.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.libs/bin/release/linker.libs.1.8.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.messenger/bin/release/linker.messenger.1.8.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.messenger.access/bin/release/linker.messenger.access.1.8.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.messenger.action/bin/release/linker.messenger.action.1.8.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.messenger.api/bin/release/linker.messenger.api.1.8.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.messenger.channel/bin/release/linker.messenger.channel.1.8.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.messenger.decenter/bin/release/linker.messenger.decenter.1.8.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.messenger.entry/bin/release/linker.messenger.entry.1.8.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.messenger.exroute/bin/release/linker.messenger.exroute.1.8.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.messenger.flow/bin/release/linker.messenger.flow.1.8.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.messenger.forward/bin/release/linker.messenger.forward.1.8.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.messenger.listen/bin/release/linker.messenger.listen.1.8.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.messenger.logger/bin/release/linker.messenger.logger.1.8.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.messenger.pcp/bin/release/linker.messenger.pcp.1.8.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.messenger.plan/bin/release/linker.messenger.plan.1.8.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.messenger.relay/bin/release/linker.messenger.relay.1.8.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.messenger.cdkey/bin/release/linker.messenger.cdkey.1.8.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.messenger.serializer.memorypack/bin/release/linker.messenger.serializer.memorypack.1.8.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.messenger.sforward/bin/release/linker.messenger.sforward.1.8.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.messenger.signin/bin/release/linker.messenger.signin.1.8.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.messenger.socks5/bin/release/linker.messenger.socks5.1.8.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.messenger.store.file/bin/release/linker.messenger.store.file.1.8.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.messenger.sync/bin/release/linker.messenger.sync.1.8.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.messenger.tunnel/bin/release/linker.messenger.tunnel.1.8.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.messenger.tuntap/bin/release/linker.messenger.tuntap.1.8.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.messenger.updater/bin/release/linker.messenger.updater.1.8.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.messenger.firewall/bin/release/linker.messenger.firewall.1.8.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.messenger.wakeup/bin/release/linker.messenger.wakeup.1.8.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.tun/bin/release/linker.tun.1.8.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.snat/bin/release/linker.snat.1.8.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
dotnet nuget push ./src/linker.tunnel/bin/release/linker.tunnel.1.8.3.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{ secrets.NUGET_KEY }} --no-symbols
|
||||
|
16
linker.sln
16
linker.sln
@@ -67,7 +67,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "linker.snat", "src\linker.s
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "linker.messenger.firewall", "src\linker.messenger.firewall\linker.messenger.firewall.csproj", "{F97DB5A9-3807-4441-A520-7B1211C1CE8A}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "linker.messenger.wakeup", "src\linker.messenger.wakeup\linker.messenger.wakeup.csproj", "{FF0F6D11-6FD5-4CB1-9121-14623B226319}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "linker.messenger.wakeup", "src\linker.messenger.wakeup\linker.messenger.wakeup.csproj", "{FF0F6D11-6FD5-4CB1-9121-14623B226319}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "linker.messenger.cdkey", "src\linker.messenger.cdkey\linker.messenger.cdkey.csproj", "{B03C0E46-1C0F-46C2-B026-8F02F5C643D4}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
@@ -481,6 +483,18 @@ Global
|
||||
{FF0F6D11-6FD5-4CB1-9121-14623B226319}.Release|x64.Build.0 = Release|Any CPU
|
||||
{FF0F6D11-6FD5-4CB1-9121-14623B226319}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{FF0F6D11-6FD5-4CB1-9121-14623B226319}.Release|x86.Build.0 = Release|Any CPU
|
||||
{B03C0E46-1C0F-46C2-B026-8F02F5C643D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{B03C0E46-1C0F-46C2-B026-8F02F5C643D4}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{B03C0E46-1C0F-46C2-B026-8F02F5C643D4}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{B03C0E46-1C0F-46C2-B026-8F02F5C643D4}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{B03C0E46-1C0F-46C2-B026-8F02F5C643D4}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{B03C0E46-1C0F-46C2-B026-8F02F5C643D4}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{B03C0E46-1C0F-46C2-B026-8F02F5C643D4}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{B03C0E46-1C0F-46C2-B026-8F02F5C643D4}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{B03C0E46-1C0F-46C2-B026-8F02F5C643D4}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{B03C0E46-1C0F-46C2-B026-8F02F5C643D4}.Release|x64.Build.0 = Release|Any CPU
|
||||
{B03C0E46-1C0F-46C2-B026-8F02F5C643D4}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{B03C0E46-1C0F-46C2-B026-8F02F5C643D4}.Release|x86.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
@@ -41,16 +41,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.8.2" . --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.8.3" . --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.8.2" . --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.8.3" . --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.8.2" . --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.8.3" . --push
|
||||
cd ../../../../../
|
||||
done
|
||||
done
|
@@ -22,7 +22,7 @@ do
|
||||
mkdir -p public/publish-ipk/${r}/data/usr/bin/linker
|
||||
cp -rf public/publish/${r}/* public/publish-ipk/${r}/data/usr/bin/linker/
|
||||
|
||||
sed -i "s|{version}|1.8.2|g" public/publish-ipk/${r}/control/control
|
||||
sed -i "s|{version}|1.8.3|g" public/publish-ipk/${r}/control/control
|
||||
sed -i 's/\r$//' public/publish-ipk/${r}/data/etc/init.d/linker
|
||||
sed -i 's/\r$//' public/publish-ipk/${r}/control/control
|
||||
sed -i 's/\r$//' public/publish-ipk/${r}/control/postinst
|
||||
|
@@ -189,7 +189,7 @@ namespace linker.app
|
||||
|
||||
private void RunLinker()
|
||||
{
|
||||
Helper.currentDirectory = FileSystem.Current.AppDataDirectory;
|
||||
Helper.SetCurrentDirectory(FileSystem.Current.AppDataDirectory);
|
||||
|
||||
InitLogger();
|
||||
|
||||
|
@@ -28,7 +28,7 @@
|
||||
<ApplicationId>com.snltty.linker.app</ApplicationId>
|
||||
|
||||
<Title>linker.app</Title>
|
||||
<Version>1.8.2</Version>
|
||||
<Version>1.8.3</Version>
|
||||
<Authors>snltty</Authors>
|
||||
<Company>snltty</Company>
|
||||
<Copyright>snltty</Copyright>
|
||||
@@ -38,7 +38,7 @@
|
||||
<PackageReleaseNotes>linker</PackageReleaseNotes>
|
||||
|
||||
<!-- Versions -->
|
||||
<ApplicationDisplayVersion>1.8.2</ApplicationDisplayVersion>
|
||||
<ApplicationDisplayVersion>1.8.3</ApplicationDisplayVersion>
|
||||
<ApplicationVersion>1</ApplicationVersion>
|
||||
|
||||
<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'ios'">11.0</SupportedOSPlatformVersion>
|
||||
|
@@ -58,7 +58,7 @@ namespace linker.libs
|
||||
public static string Execute(string fileName, string arg, string[] commands, out string error)
|
||||
{
|
||||
using Process proc = new Process();
|
||||
proc.StartInfo.WorkingDirectory = Path.GetFullPath(Path.Join(Helper.currentDirectory,"./"));
|
||||
proc.StartInfo.WorkingDirectory = Path.GetFullPath(Path.Join(Helper.CurrentDirectory, "./"));
|
||||
proc.StartInfo.CreateNoWindow = true;
|
||||
proc.StartInfo.FileName = fileName;
|
||||
proc.StartInfo.UseShellExecute = false;
|
||||
|
@@ -70,13 +70,11 @@ namespace linker.libs
|
||||
encryptoTransform.Dispose();
|
||||
decryptoTransform.Dispose();
|
||||
}
|
||||
private (byte[] Key, byte[] IV) GenerateKeyAndIV(string password)
|
||||
private static (byte[] Key, byte[] IV) GenerateKeyAndIV(string password)
|
||||
{
|
||||
byte[] key = new byte[16];
|
||||
byte[] iv = new byte[16];
|
||||
|
||||
using SHA384 sha = SHA384.Create();
|
||||
byte[] hash = sha.ComputeHash(Encoding.UTF8.GetBytes(password));
|
||||
byte[] hash = SHA384.HashData(Encoding.UTF8.GetBytes(password));
|
||||
|
||||
Array.Copy(hash, 0, key, 0, key.Length);
|
||||
Array.Copy(hash, key.Length, iv, 0, iv.Length);
|
||||
|
@@ -24,7 +24,9 @@ namespace linker.libs
|
||||
GC.Collect();
|
||||
GC.Collect(2, GCCollectionMode.Aggressive);
|
||||
|
||||
#pragma warning disable CA1816 // Dispose 方法应调用 SuppressFinalize
|
||||
GC.SuppressFinalize(true);
|
||||
#pragma warning restore CA1816 // Dispose 方法应调用 SuppressFinalize
|
||||
GC.WaitForPendingFinalizers();
|
||||
if (Environment.OSVersion.Platform == PlatformID.Win32NT)
|
||||
{
|
||||
|
@@ -6,16 +6,26 @@ namespace linker.libs
|
||||
{
|
||||
public static class Helper
|
||||
{
|
||||
public static byte[] EmptyArray = Array.Empty<byte>();
|
||||
public static byte[] TrueArray = new byte[] { 1 };
|
||||
public static byte[] FalseArray = new byte[] { 0 };
|
||||
static byte[] emptyArray = [];
|
||||
public static byte[] EmptyArray => emptyArray;
|
||||
static byte[] trueArray => [1];
|
||||
public static byte[] TrueArray => trueArray;
|
||||
static byte[] falseArray => [0];
|
||||
public static byte[] FalseArray => falseArray;
|
||||
|
||||
public const string GlobalString = "snltty";
|
||||
public static string currentDirectory = "./";
|
||||
|
||||
|
||||
private static string currentDirectory = "./";
|
||||
public static string CurrentDirectory => currentDirectory;
|
||||
public static void SetCurrentDirectory(string path)
|
||||
{
|
||||
currentDirectory = path;
|
||||
}
|
||||
|
||||
|
||||
public static event EventHandler OnAppExit;
|
||||
public static CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
|
||||
static CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
|
||||
public static void AppExit(int code)
|
||||
{
|
||||
OnAppExit?.Invoke(null, EventArgs.Empty);
|
||||
|
@@ -26,7 +26,7 @@ namespace linker.libs
|
||||
{
|
||||
while (true)
|
||||
{
|
||||
while (queue.Count > 0)
|
||||
while (queue.IsEmpty == false)
|
||||
{
|
||||
if (queue.TryDequeue(out LoggerModel model))
|
||||
{
|
||||
@@ -39,7 +39,7 @@ namespace linker.libs
|
||||
}
|
||||
|
||||
|
||||
public int lockNum = 0;
|
||||
public int lockNum;
|
||||
public void Lock()
|
||||
{
|
||||
Interlocked.Increment(ref lockNum);
|
||||
|
@@ -40,7 +40,7 @@ namespace linker.libs
|
||||
}
|
||||
}
|
||||
|
||||
public static class NetworkHelper
|
||||
public static partial class NetworkHelper
|
||||
{
|
||||
public static IPEndPoint TransEndpointFamily(IPEndPoint ep)
|
||||
{
|
||||
@@ -132,8 +132,7 @@ namespace linker.libs
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
static List<string> starts = new() { "10.", "100.", "192.168.", "172." };
|
||||
private readonly static List<string> starts = ["10.", "100.", "192.168.", "172."];
|
||||
public static ushort GetRouteLevel(string server, out List<IPAddress> result)
|
||||
{
|
||||
result = new List<IPAddress>();
|
||||
@@ -159,7 +158,7 @@ namespace linker.libs
|
||||
string str = CommandHelper.Linux(string.Empty, new string[] { $"traceroute {server} -4 -m 5 -w 1" });
|
||||
string[] lines = str.Split(Environment.NewLine);
|
||||
|
||||
Regex regex = new Regex(@"(\d+\.\d+\.\d+\.\d+)");
|
||||
Regex regex = MyRegex();
|
||||
for (ushort i = 1; i < lines.Length; i++)
|
||||
{
|
||||
string ip = regex.Match(lines[i]).Groups[1].Value;
|
||||
@@ -186,7 +185,7 @@ namespace linker.libs
|
||||
{
|
||||
using Ping pinger = new();
|
||||
PingReply reply = pinger.Send(target, 100, Encoding.ASCII.GetBytes(Helper.GlobalString), new PingOptions { Ttl = i, DontFragment = true });
|
||||
if(reply.Status != IPStatus.Success)
|
||||
if (reply.Status != IPStatus.Success)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
@@ -208,7 +207,7 @@ namespace linker.libs
|
||||
}
|
||||
|
||||
|
||||
private static byte[] ipv6LocalBytes = new byte[] { 254, 128, 0, 0, 0, 0, 0, 0 };
|
||||
private readonly static byte[] ipv6LocalBytes = [254, 128, 0, 0, 0, 0, 0, 0];
|
||||
|
||||
private static IPAddress[] GetIP()
|
||||
{
|
||||
@@ -223,7 +222,7 @@ namespace linker.libs
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
try
|
||||
{
|
||||
return NetworkInterface.GetAllNetworkInterfaces()
|
||||
@@ -245,9 +244,9 @@ namespace linker.libs
|
||||
.Where(c => c.Equals(IPAddress.IPv6Loopback) == false)
|
||||
.Where(c =>
|
||||
{
|
||||
byte[] addressBytes = c.GetAddressBytes();
|
||||
byte[] addressBytes = c.GetAddressBytes();
|
||||
return (
|
||||
addressBytes[0] == 0xFD
|
||||
addressBytes[0] == 0xFD
|
||||
|| (addressBytes[0] == 0xFE && (addressBytes[1] == 0x80 || addressBytes[1] == 0xC0))
|
||||
) == false;
|
||||
})
|
||||
@@ -359,7 +358,10 @@ namespace linker.libs
|
||||
#pragma warning restore 618
|
||||
#else
|
||||
|
||||
public static bool IPv6Support = Socket.OSSupportsIPv6;
|
||||
public static bool IPv6Support => Socket.OSSupportsIPv6;
|
||||
|
||||
[GeneratedRegex(@"(\d+\.\d+\.\d+\.\d+)")]
|
||||
private static partial Regex MyRegex();
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
@@ -21,7 +21,7 @@ namespace linker.libs
|
||||
|
||||
public sealed class NumberSpaceUInt32
|
||||
{
|
||||
private uint num = 0;
|
||||
private uint num;
|
||||
|
||||
public NumberSpaceUInt32(uint defaultVal = 0)
|
||||
{
|
||||
|
@@ -5,7 +5,7 @@ namespace linker.libs
|
||||
{
|
||||
public sealed class OperatingManager
|
||||
{
|
||||
private uint operating = 0;
|
||||
private uint operating;
|
||||
public bool Operating => operating == 1;
|
||||
|
||||
public bool StartOperation()
|
||||
|
@@ -5,7 +5,7 @@ namespace linker.libs
|
||||
public sealed class ReceiveDataBuffer
|
||||
{
|
||||
private Memory<byte> items { get; set; }
|
||||
private int size = 0;
|
||||
private int size ;
|
||||
public int Size
|
||||
{
|
||||
get
|
||||
|
@@ -17,7 +17,7 @@ namespace linker.libs
|
||||
|
||||
private static string GetSystemIdAndroid()
|
||||
{
|
||||
string localAppDataPath = Path.Join(Helper.currentDirectory, "machine-id.txt");
|
||||
string localAppDataPath = Path.Join(Helper.CurrentDirectory, "machine-id.txt");
|
||||
if (Directory.Exists(Path.GetDirectoryName(localAppDataPath)) == false)
|
||||
{
|
||||
Directory.CreateDirectory(Path.GetDirectoryName(localAppDataPath));
|
||||
|
@@ -6,7 +6,8 @@ namespace linker.libs
|
||||
{
|
||||
public static class VersionHelper
|
||||
{
|
||||
public static string version = $"v{string.Join(".", Assembly.GetExecutingAssembly().GetName().Version.ToString().Split('.').Take(3))}";
|
||||
static string version = $"v{string.Join(".", Assembly.GetExecutingAssembly().GetName().Version.ToString().Split('.').Take(3))}";
|
||||
public static string Version => version;
|
||||
|
||||
/// <summary>
|
||||
/// 比较版本,相差多少
|
||||
@@ -24,7 +25,7 @@ namespace linker.libs
|
||||
if (v2Span[0] == 'v') v2Span = v2Span.Slice(1);
|
||||
|
||||
|
||||
return Compare(Version.Parse(v1Span), Version.Parse(v2Span), abs);
|
||||
return Compare(System.Version.Parse(v1Span), System.Version.Parse(v2Span), abs);
|
||||
}
|
||||
/// <summary>
|
||||
/// 比较版本,相差多少
|
||||
|
@@ -6,7 +6,7 @@ namespace linker.libs
|
||||
{
|
||||
public sealed class VersionManager
|
||||
{
|
||||
private ulong version = 0;
|
||||
private ulong version;
|
||||
|
||||
public ulong Value => version;
|
||||
|
||||
|
@@ -47,8 +47,7 @@ namespace linker.libs.extends
|
||||
/// <returns></returns>
|
||||
public static string Md5(this string input)
|
||||
{
|
||||
MD5 md5Hasher = MD5.Create();
|
||||
byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(input));
|
||||
byte[] data = SHA256.HashData(Encoding.Default.GetBytes(input));
|
||||
StringBuilder sBuilder = new();
|
||||
for (int i = 0; i < data.Length; i++)
|
||||
{
|
||||
@@ -361,7 +360,7 @@ namespace linker.libs.extends
|
||||
public static string GetUTF16String(this Memory<byte> memory, int strLength)
|
||||
{
|
||||
if (memory.Length == 0)
|
||||
return string.Empty;
|
||||
return string.Empty;
|
||||
return ReadUtf16(memory.Span, strLength);
|
||||
}
|
||||
/// <summary>
|
||||
|
@@ -14,9 +14,9 @@
|
||||
<Copyright>snltty</Copyright>
|
||||
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
|
||||
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
|
||||
<Version>1.8.2</Version>
|
||||
<AssemblyVersion>1.8.2</AssemblyVersion>
|
||||
<FileVersion>1.8.2</FileVersion>
|
||||
<Version>1.8.3</Version>
|
||||
<AssemblyVersion>1.8.3</AssemblyVersion>
|
||||
<FileVersion>1.8.3</FileVersion>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
<DebugType>full</DebugType>
|
||||
|
@@ -58,7 +58,7 @@ namespace linker.libs.timer
|
||||
|
||||
|
||||
private /*volatile*/ long _startTime;
|
||||
private long _pendingTimeouts = 0;
|
||||
private long _pendingTimeouts;
|
||||
|
||||
private long GetCurrentMs() { return DateTime.UtcNow.Ticks / 10000 - _base; }
|
||||
|
||||
@@ -186,10 +186,7 @@ namespace linker.libs.timer
|
||||
/// <returns>a handle which is associated with the specified task</returns>
|
||||
public Timeout NewTimeout(TimerTask task, TimeSpan span)
|
||||
{
|
||||
if (task == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(task));
|
||||
}
|
||||
ArgumentNullException.ThrowIfNull(task);
|
||||
|
||||
if (_workerState == WORKER_STATE_SHUTDOWN)
|
||||
return null;
|
||||
@@ -247,7 +244,7 @@ namespace linker.libs.timer
|
||||
|
||||
|
||||
|
||||
private readonly ISet<Timeout> _unprocessedTimeouts = new HashSet<Timeout>();
|
||||
private readonly HashSet<Timeout> _unprocessedTimeouts = [];
|
||||
private long _tick;
|
||||
|
||||
private void Run()
|
||||
|
@@ -22,7 +22,7 @@ namespace linker.libs.web
|
||||
/// <summary>
|
||||
/// 请求id
|
||||
/// </summary>
|
||||
public long RequestId { get; set; } = 0;
|
||||
public long RequestId { get; set; }
|
||||
/// <summary>
|
||||
/// 状态码
|
||||
/// </summary>
|
||||
@@ -47,7 +47,7 @@ namespace linker.libs.web
|
||||
/// <summary>
|
||||
/// 请求id
|
||||
/// </summary>
|
||||
public uint RequestId { get; set; } = 0;
|
||||
public uint RequestId { get; set; }
|
||||
/// <summary>
|
||||
/// 数据
|
||||
/// </summary>
|
||||
@@ -63,7 +63,7 @@ namespace linker.libs.web
|
||||
/// <summary>
|
||||
/// 请求id
|
||||
/// </summary>
|
||||
public uint RequestId { get; set; } = 0;
|
||||
public uint RequestId { get; set; }
|
||||
/// <summary>
|
||||
/// 数据
|
||||
/// </summary>
|
||||
|
@@ -141,9 +141,9 @@ namespace linker.libs.web
|
||||
private string GetContentType(string path)
|
||||
{
|
||||
string ext = Path.GetExtension(path);
|
||||
if (types.ContainsKey(ext))
|
||||
if (types.TryGetValue(ext,out string value))
|
||||
{
|
||||
return types[ext];
|
||||
return value;
|
||||
}
|
||||
return "application/octet-stream";
|
||||
}
|
||||
|
@@ -13,8 +13,8 @@ namespace linker.libs.websocket
|
||||
{
|
||||
private int bufferSize = 4 * 1024;
|
||||
private SocketAsyncEventArgs readEventArgs;
|
||||
private bool connected = false;
|
||||
private bool connecSuccess = false;
|
||||
private bool connected ;
|
||||
private bool connecSuccess;
|
||||
|
||||
|
||||
/// <summary>
|
||||
@@ -93,7 +93,7 @@ namespace linker.libs.websocket
|
||||
{
|
||||
if (connected)
|
||||
{
|
||||
throw new Exception("connected");
|
||||
return;
|
||||
}
|
||||
|
||||
var socket = new Socket(ep.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
|
||||
@@ -457,11 +457,11 @@ namespace linker.libs.websocket
|
||||
/// <summary>
|
||||
/// 当前帧数据
|
||||
/// </summary>
|
||||
public WebSocketFrameInfo FrameInfo = null;
|
||||
public WebSocketFrameInfo FrameInfo;
|
||||
/// <summary>
|
||||
/// 当前帧的数据下标
|
||||
/// </summary>
|
||||
public int FrameIndex { get; set; } = 0;
|
||||
public int FrameIndex { get; set; }
|
||||
/// <summary>
|
||||
/// 数据帧缓存
|
||||
/// </summary>
|
||||
|
@@ -13,7 +13,6 @@ namespace linker.libs.websocket
|
||||
/// </summary>
|
||||
public static class WebSocketParser
|
||||
{
|
||||
private readonly static SHA1 sha1 = SHA1.Create();
|
||||
private readonly static Memory<byte> magicCode = Encoding.UTF8.GetBytes("258EAFA5-E914-47DA-95CA-C5AB0DC85B11");
|
||||
/// <summary>
|
||||
/// 构建连接数据
|
||||
@@ -124,7 +123,7 @@ namespace linker.libs.websocket
|
||||
Encoding.UTF8.GetBytes(key).AsMemory().CopyTo(acceptBytes);
|
||||
magicCode.CopyTo(acceptBytes.AsMemory(key.Length));
|
||||
|
||||
string acceptStr = Convert.ToBase64String(sha1.ComputeHash(acceptBytes, 0, keyLength));
|
||||
string acceptStr = Convert.ToBase64String(SHA256.HashData(acceptBytes.AsSpan(0, keyLength)));
|
||||
|
||||
return acceptStr;
|
||||
}
|
||||
@@ -174,7 +173,7 @@ namespace linker.libs.websocket
|
||||
{
|
||||
if (remark.Mask > 0 && remark.MaskData.Length != 4)
|
||||
{
|
||||
throw new Exception("mask data just 4byte");
|
||||
throw new ArgumentException("mask data just 4byte");
|
||||
}
|
||||
|
||||
length = 1 + 1 + remark.Data.Length;
|
||||
@@ -634,13 +633,13 @@ namespace linker.libs.websocket
|
||||
}
|
||||
public sealed class WebsocketHeaderKey
|
||||
{
|
||||
public static string Connection = "connection";
|
||||
public static string Upgrade = "upgrade";
|
||||
public static string Origin = "origin";
|
||||
public static string SecWebSocketVersion = "sec-websocket-version";
|
||||
public static string SecWebSocketKey = "sec-websocket-key";
|
||||
public static string SecWebSocketExtensions = "sec-websocket-extensions";
|
||||
public static string SecWebSocketProtocol = "sec-websocket-protocol";
|
||||
public static string SecWebSocketAccept = "sec-websocket-accept";
|
||||
public const string Connection = "connection";
|
||||
public const string Upgrade = "upgrade";
|
||||
public const string Origin = "origin";
|
||||
public const string SecWebSocketVersion = "sec-websocket-version";
|
||||
public const string SecWebSocketKey = "sec-websocket-key";
|
||||
public const string SecWebSocketExtensions = "sec-websocket-extensions";
|
||||
public const string SecWebSocketProtocol = "sec-websocket-protocol";
|
||||
public const string SecWebSocketAccept = "sec-websocket-accept";
|
||||
}
|
||||
}
|
||||
|
@@ -385,10 +385,10 @@ namespace linker.libs.websocket
|
||||
{
|
||||
public uint Id { get; set; }
|
||||
public Socket Socket { get; init; }
|
||||
public bool Connected { get; set; } = false;
|
||||
public bool Connected { get; set; }
|
||||
public bool SocketConnected => Socket != null && Socket.Connected;
|
||||
|
||||
private bool Closed = false;
|
||||
private bool Closed;
|
||||
public int ConnectResponse(WebsocketHeaderInfo header)
|
||||
{
|
||||
var data = WebSocketParser.BuildConnectResponseData(header);
|
||||
@@ -466,11 +466,11 @@ namespace linker.libs.websocket
|
||||
/// <summary>
|
||||
/// 当前帧数据
|
||||
/// </summary>
|
||||
public WebSocketFrameInfo FrameInfo = null;
|
||||
public WebSocketFrameInfo FrameInfo;
|
||||
/// <summary>
|
||||
/// 当前帧的数据下标
|
||||
/// </summary>
|
||||
public int FrameIndex { get; set; } = 0;
|
||||
public int FrameIndex { get; set; }
|
||||
/// <summary>
|
||||
/// 数据帧缓存
|
||||
/// </summary>
|
||||
@@ -480,7 +480,7 @@ namespace linker.libs.websocket
|
||||
/// </summary>
|
||||
public WebSocketFrameInfo.EnumOpcode Opcode { get; set; }
|
||||
public byte[] PoolBuffer { get; set; }
|
||||
public bool Disposabled { get; private set; } = false;
|
||||
public bool Disposabled { get; private set; }
|
||||
public void Clear()
|
||||
{
|
||||
Disposabled = true;
|
||||
|
@@ -27,9 +27,9 @@ public static unsafe class ADVAPI32
|
||||
}
|
||||
public class USEROBJECTFLAGS
|
||||
{
|
||||
public int fInherit = 0;
|
||||
public int fReserved = 0;
|
||||
public int dwFlags = 0;
|
||||
public int fInherit ;
|
||||
public int fReserved;
|
||||
public int dwFlags;
|
||||
}
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct SECURITY_ATTRIBUTES
|
||||
|
@@ -3,7 +3,7 @@ using static linker.libs.winapis.User32;
|
||||
|
||||
namespace linker.libs.winapis
|
||||
{
|
||||
internal class MouseHelper
|
||||
internal sealed class MouseHelper
|
||||
{
|
||||
public static bool MouseMove(int x, int y)
|
||||
{
|
||||
|
@@ -3,7 +3,7 @@ using System.Runtime.InteropServices;
|
||||
|
||||
namespace linker.libs.winapis
|
||||
{
|
||||
internal class Powrprof
|
||||
internal sealed class Powrprof
|
||||
{
|
||||
|
||||
[DllImport("powrprof.dll")]
|
||||
|
@@ -1,12 +1,11 @@
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Security;
|
||||
|
||||
namespace linker.libs.winapis;
|
||||
|
||||
public static class WTSAPI32
|
||||
{
|
||||
public static nint WTS_CURRENT_SERVER_HANDLE = nint.Zero;
|
||||
public static nint WTS_CURRENT_SERVER_HANDLE => nint.Zero;
|
||||
|
||||
public enum WTS_CONNECTSTATE_CLASS
|
||||
{
|
||||
|
@@ -358,7 +358,7 @@ namespace linker.libs.winapis
|
||||
{
|
||||
users.Add(new WindowUserInfo { LastLogon = info.LastLogon, Sid = stringSid });
|
||||
}
|
||||
NetApiBufferFree(bufptr);
|
||||
int value = NetApiBufferFree(bufptr);
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
@@ -366,7 +366,7 @@ namespace linker.libs.winapis
|
||||
}
|
||||
finally
|
||||
{
|
||||
NetApiBufferFree(bufPtr);
|
||||
int _ = NetApiBufferFree(bufPtr);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -133,7 +133,7 @@ namespace linker.libs.winapis
|
||||
}
|
||||
MIB_TCPTABLE_OWNER_PID tcpTable = (MIB_TCPTABLE_OWNER_PID)Marshal.PtrToStructure(tcpTablePtr, typeof(MIB_TCPTABLE_OWNER_PID));
|
||||
|
||||
IntPtr rowPtr = (IntPtr)((long)tcpTablePtr + Marshal.SizeOf(tcpTable.dwNumEntries));
|
||||
IntPtr rowPtr = (nint)((long)tcpTablePtr + Marshal.SizeOf(tcpTable.dwNumEntries));
|
||||
for (int i = 0; i < tcpTable.dwNumEntries; i++)
|
||||
{
|
||||
MIB_TCPROW_OWNER_PID row = (MIB_TCPROW_OWNER_PID)Marshal.PtrToStructure(rowPtr, typeof(MIB_TCPROW_OWNER_PID));
|
||||
@@ -148,7 +148,7 @@ namespace linker.libs.winapis
|
||||
|
||||
connections.Add(new ConnectionInfo { LocalEndPoint = localEndPoint, RemoteEndPoint = remoteEndPoint, Pid = row.owningPid });
|
||||
|
||||
rowPtr = (IntPtr)((long)rowPtr + Marshal.SizeOf(row));
|
||||
rowPtr = (nint)((long)rowPtr + Marshal.SizeOf(row));
|
||||
}
|
||||
}
|
||||
finally
|
||||
@@ -165,7 +165,7 @@ namespace linker.libs.winapis
|
||||
MIB_UDPTABLE_OWNER_PID udpTable;
|
||||
uint udpTableSize = 0;
|
||||
// 获取 UDP 表格大小
|
||||
GetExtendedUdpTable(IntPtr.Zero, ref udpTableSize, true, AF_INET, 5, 0);
|
||||
uint value = GetExtendedUdpTable(IntPtr.Zero, ref udpTableSize, true, AF_INET, 5, 0);
|
||||
// 分配内存
|
||||
IntPtr udpTablePtr = Marshal.AllocHGlobal((int)udpTableSize);
|
||||
|
||||
|
@@ -21,13 +21,13 @@ namespace linker.messenger.access
|
||||
{
|
||||
AccessUpdateInfo info = serializer.Deserialize<AccessUpdateInfo>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
info.FromMachineId = connection.Id;
|
||||
if (signCaching.TryGet(connection.Id, out SignCacheInfo cache) && signCaching.TryGet(info.ToMachineId, out SignCacheInfo cache1) && cache1.GroupId == cache.GroupId)
|
||||
if (signCaching.TryGet(connection.Id, info.ToMachineId, out SignCacheInfo from, out SignCacheInfo to))
|
||||
{
|
||||
uint requiestid = connection.ReceiveRequestWrap.RequestId;
|
||||
|
||||
sender.SendReply(new MessageRequestWrap
|
||||
{
|
||||
Connection = cache1.Connection,
|
||||
Connection = to.Connection,
|
||||
MessengerId = (ushort)AccessMessengerIds.AccessUpdate,
|
||||
Payload = serializer.Serialize(info),
|
||||
Timeout = 3000,
|
||||
@@ -47,13 +47,13 @@ namespace linker.messenger.access
|
||||
{
|
||||
AccessBitsUpdateInfo info = serializer.Deserialize<AccessBitsUpdateInfo>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
info.FromMachineId = connection.Id;
|
||||
if (signCaching.TryGet(connection.Id, out SignCacheInfo cache) && signCaching.TryGet(info.ToMachineId, out SignCacheInfo cache1) && cache1.GroupId == cache.GroupId)
|
||||
if (signCaching.TryGet(connection.Id, info.ToMachineId, out SignCacheInfo from, out SignCacheInfo to))
|
||||
{
|
||||
uint requiestid = connection.ReceiveRequestWrap.RequestId;
|
||||
|
||||
sender.SendReply(new MessageRequestWrap
|
||||
{
|
||||
Connection = cache1.Connection,
|
||||
Connection = to.Connection,
|
||||
MessengerId = (ushort)AccessMessengerIds.AccessStrUpdate,
|
||||
Payload = serializer.Serialize(info),
|
||||
Timeout = 3000,
|
||||
@@ -73,11 +73,11 @@ namespace linker.messenger.access
|
||||
public void SetApiPasswordForward(IConnection connection)
|
||||
{
|
||||
ApiPasswordUpdateInfo info = serializer.Deserialize<ApiPasswordUpdateInfo>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
if (signCaching.TryGet(connection.Id, out SignCacheInfo cache) && signCaching.TryGet(info.MachineId, out SignCacheInfo cache1) && cache1.GroupId == cache.GroupId)
|
||||
if (signCaching.TryGet(connection.Id, info.MachineId, out SignCacheInfo from, out SignCacheInfo to))
|
||||
{
|
||||
sender.SendOnly(new MessageRequestWrap
|
||||
{
|
||||
Connection = cache1.Connection,
|
||||
Connection = to.Connection,
|
||||
MessengerId = (ushort)AccessMessengerIds.SetApiPassword,
|
||||
Payload = serializer.Serialize(info.Password)
|
||||
});
|
||||
|
@@ -16,9 +16,9 @@
|
||||
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
|
||||
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
|
||||
<PackageReleaseNotes>linker messenger api access</PackageReleaseNotes>
|
||||
<Version>1.8.2</Version>
|
||||
<AssemblyVersion>1.8.2</AssemblyVersion>
|
||||
<FileVersion>1.8.2</FileVersion>
|
||||
<Version>1.8.3</Version>
|
||||
<AssemblyVersion>1.8.3</AssemblyVersion>
|
||||
<FileVersion>1.8.3</FileVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
|
@@ -16,9 +16,9 @@
|
||||
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
|
||||
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
|
||||
<PackageReleaseNotes>linker messenger api action</PackageReleaseNotes>
|
||||
<Version>1.8.2</Version>
|
||||
<AssemblyVersion>1.8.2</AssemblyVersion>
|
||||
<FileVersion>1.8.2</FileVersion>
|
||||
<Version>1.8.3</Version>
|
||||
<AssemblyVersion>1.8.3</AssemblyVersion>
|
||||
<FileVersion>1.8.3</FileVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
|
@@ -137,8 +137,8 @@ namespace linker.messenger.api
|
||||
[AccessDisplay("重置所有接口密码")]
|
||||
SetApiPasswordOther = 42,
|
||||
|
||||
[AccessDisplay("管理中继CDKEY")]
|
||||
RelayCdkey = 43,
|
||||
[AccessDisplay("管理CDKEY")]
|
||||
Cdkey = 43,
|
||||
|
||||
[AccessDisplay("管理本机防火墙")]
|
||||
FirewallSelf = 44,
|
||||
|
@@ -17,9 +17,9 @@
|
||||
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
|
||||
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
|
||||
<PackageReleaseNotes>linker messenger api</PackageReleaseNotes>
|
||||
<Version>1.8.2</Version>
|
||||
<AssemblyVersion>1.8.2</AssemblyVersion>
|
||||
<FileVersion>1.8.2</FileVersion>
|
||||
<Version>1.8.3</Version>
|
||||
<AssemblyVersion>1.8.3</AssemblyVersion>
|
||||
<FileVersion>1.8.3</FileVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
|
27
src/linker.messenger.cdkey/CdkeyConfigSync.cs
Normal file
27
src/linker.messenger.cdkey/CdkeyConfigSync.cs
Normal file
@@ -0,0 +1,27 @@
|
||||
using linker.libs;
|
||||
using linker.messenger.sync;
|
||||
|
||||
namespace linker.messenger.cdkey
|
||||
{
|
||||
public sealed class CdkeyConfigSyncSecretKey : ISync
|
||||
{
|
||||
public string Name => "CdkeySecretKey";
|
||||
|
||||
private readonly ISerializer serializer;
|
||||
private readonly ICdkeyClientStore cdkeyClientStore;
|
||||
public CdkeyConfigSyncSecretKey( ISerializer serializer, ICdkeyClientStore cdkeyClientStore)
|
||||
{
|
||||
this.serializer = serializer;
|
||||
this.cdkeyClientStore = cdkeyClientStore;
|
||||
}
|
||||
public Memory<byte> GetData()
|
||||
{
|
||||
return serializer.Serialize(cdkeyClientStore.SecretKey);
|
||||
}
|
||||
|
||||
public void SetData(Memory<byte> data)
|
||||
{
|
||||
cdkeyClientStore.SetSecretKey(serializer.Deserialize<string>(data.Span));
|
||||
}
|
||||
}
|
||||
}
|
16
src/linker.messenger.cdkey/CdkeyMessengerIds.cs
Normal file
16
src/linker.messenger.cdkey/CdkeyMessengerIds.cs
Normal file
@@ -0,0 +1,16 @@
|
||||
namespace linker.messenger.cdkey
|
||||
{
|
||||
public enum CdkeyMessengerIds : ushort
|
||||
{
|
||||
Min = 3500,
|
||||
|
||||
AddCdkey = 3501,
|
||||
PageCdkey = 3502,
|
||||
DelCdkey = 3503,
|
||||
AccessCdkey = 3504,
|
||||
TestCdkey = 3505,
|
||||
ImportCdkey = 3506,
|
||||
|
||||
Max = 3599
|
||||
}
|
||||
}
|
41
src/linker.messenger.cdkey/Entry.cs
Normal file
41
src/linker.messenger.cdkey/Entry.cs
Normal file
@@ -0,0 +1,41 @@
|
||||
using linker.libs.web;
|
||||
using linker.messenger.sync;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
namespace linker.messenger.cdkey
|
||||
{
|
||||
public static class Entry
|
||||
{
|
||||
public static ServiceCollection AddCdkeyClient(this ServiceCollection serviceCollection)
|
||||
{
|
||||
serviceCollection.AddSingleton<CdkeyApiController>();
|
||||
|
||||
serviceCollection.AddSingleton<CdkeyConfigSyncSecretKey>();
|
||||
|
||||
return serviceCollection;
|
||||
}
|
||||
public static ServiceProvider UseCdkeyClient(this ServiceProvider serviceProvider)
|
||||
{
|
||||
SyncTreansfer syncTransfer = serviceProvider.GetService<SyncTreansfer>();
|
||||
syncTransfer.AddSyncs(new List<ISync> { serviceProvider.GetService<CdkeyConfigSyncSecretKey>() });
|
||||
|
||||
linker.messenger.api.IWebServer apiServer = serviceProvider.GetService<linker.messenger.api.IWebServer>();
|
||||
apiServer.AddPlugins(new List<IApiController> { serviceProvider.GetService<CdkeyApiController>() });
|
||||
|
||||
return serviceProvider;
|
||||
}
|
||||
|
||||
|
||||
public static ServiceCollection AddCdkeyServer(this ServiceCollection serviceCollection)
|
||||
{
|
||||
serviceCollection.AddSingleton<CdkeyServerMessenger>();
|
||||
return serviceCollection;
|
||||
}
|
||||
public static ServiceProvider UseCdkeyServer(this ServiceProvider serviceProvider)
|
||||
{
|
||||
IMessengerResolver messengerResolver = serviceProvider.GetService<IMessengerResolver>();
|
||||
messengerResolver.AddMessenger(new List<IMessenger> { serviceProvider.GetService<CdkeyServerMessenger>() });
|
||||
|
||||
return serviceProvider;
|
||||
}
|
||||
}
|
||||
}
|
15
src/linker.messenger.cdkey/ICdkeyClientStore.cs
Normal file
15
src/linker.messenger.cdkey/ICdkeyClientStore.cs
Normal file
@@ -0,0 +1,15 @@
|
||||
namespace linker.messenger.cdkey
|
||||
{
|
||||
public interface ICdkeyClientStore
|
||||
{
|
||||
public string SecretKey { get; }
|
||||
|
||||
/// <summary>
|
||||
/// 设置密钥
|
||||
/// </summary>
|
||||
/// <param name="secretKey"></param>
|
||||
/// <returns></returns>
|
||||
public bool SetSecretKey(string secretKey);
|
||||
}
|
||||
|
||||
}
|
@@ -1,16 +1,21 @@
|
||||
using linker.libs;
|
||||
using System.Net;
|
||||
|
||||
namespace linker.messenger.relay.server
|
||||
namespace linker.messenger.cdkey
|
||||
{
|
||||
public interface IRelayServerCdkeyStore
|
||||
public interface ICdkeyServerStore
|
||||
{
|
||||
/// <summary>
|
||||
/// 验证密钥
|
||||
/// </summary>
|
||||
/// <param name="secretKey"></param>
|
||||
/// <returns></returns>
|
||||
public bool ValidateSecretKey(string secretKey);
|
||||
/// <summary>
|
||||
/// 添加
|
||||
/// </summary>
|
||||
/// <param name="info"></param>
|
||||
/// <returns></returns>
|
||||
public Task<bool> Add(RelayServerCdkeyStoreInfo info);
|
||||
public Task<bool> Add(CdkeyStoreInfo info);
|
||||
/// <summary>
|
||||
/// 删除
|
||||
/// </summary>
|
||||
@@ -30,26 +35,26 @@ namespace linker.messenger.relay.server
|
||||
/// </summary>
|
||||
/// <param name="base64"></param>
|
||||
/// <returns></returns>
|
||||
public Task<RelayServerCdkeyTestResultInfo> Test(RelayServerCdkeyImportInfo info);
|
||||
public Task<CdkeyTestResultInfo> Test(CdkeyImportInfo info);
|
||||
/// <summary>
|
||||
/// 导入卡密
|
||||
/// </summary>
|
||||
/// <param name="base64"></param>
|
||||
/// <returns></returns>
|
||||
public Task<string> Import(RelayServerCdkeyImportInfo info);
|
||||
public Task<string> Import(CdkeyImportInfo info);
|
||||
|
||||
/// <summary>
|
||||
/// 获取有效的CDKEY
|
||||
/// </summary>
|
||||
/// <param name="userid"></param>
|
||||
/// <returns></returns>
|
||||
public Task<List<RelayServerCdkeyStoreInfo>> GetAvailable(string userid);
|
||||
public Task<List<CdkeyStoreInfo>> GetAvailable(string userid, string type);
|
||||
/// <summary>
|
||||
/// 获取CDKEY列表
|
||||
/// </summary>
|
||||
/// <param name="ids"></param>
|
||||
/// <returns></returns>
|
||||
public Task<List<RelayServerCdkeyStoreInfo>> Get(List<int> ids);
|
||||
public Task<List<CdkeyStoreInfo>> Get(List<int> ids);
|
||||
/// <summary>
|
||||
/// 消耗流量
|
||||
/// </summary>
|
||||
@@ -65,12 +70,12 @@ namespace linker.messenger.relay.server
|
||||
/// <summary>
|
||||
/// 分页
|
||||
/// </summary>
|
||||
/// <param name="relayServerCdkeyPageRequestInfo"></param>
|
||||
/// <param name="info"></param>
|
||||
/// <returns></returns>
|
||||
public Task<RelayServerCdkeyPageResultInfo> Page(RelayServerCdkeyPageRequestInfo relayServerCdkeyPageRequestInfo);
|
||||
public Task<CdkeyPageResultInfo> Page(CdkeyPageRequestInfo info);
|
||||
}
|
||||
|
||||
public sealed class RelayServerCdkeyConfigInfo
|
||||
public sealed class CdkeyConfigInfo
|
||||
{
|
||||
/// <summary>
|
||||
/// 加解密密钥
|
||||
@@ -82,7 +87,10 @@ namespace linker.messenger.relay.server
|
||||
#endif
|
||||
}
|
||||
|
||||
public sealed partial class RelayServerCdkeyPageRequestInfo
|
||||
/// <summary>
|
||||
/// 搜索CDKEY分页请求信息
|
||||
/// </summary>
|
||||
public sealed partial class CdkeyPageRequestInfo
|
||||
{
|
||||
public int Page { get; set; }
|
||||
public int Size { get; set; }
|
||||
@@ -93,10 +101,11 @@ namespace linker.messenger.relay.server
|
||||
public string OrderId { get; set; }
|
||||
public string Contact { get; set; }
|
||||
public string SecretKey { get; set; }
|
||||
public RelayServerCdkeyPageRequestFlag Flag { get; set; }
|
||||
public string Type { get; set; }
|
||||
public CdkeyPageRequestFlag Flag { get; set; }
|
||||
}
|
||||
[Flags]
|
||||
public enum RelayServerCdkeyPageRequestFlag
|
||||
public enum CdkeyPageRequestFlag
|
||||
{
|
||||
All = 0,
|
||||
TimeIn = 1,
|
||||
@@ -107,21 +116,29 @@ namespace linker.messenger.relay.server
|
||||
Deleted = 32,
|
||||
}
|
||||
|
||||
|
||||
public sealed partial class RelayServerCdkeyPageResultInfo
|
||||
/// <summary>
|
||||
/// 搜索结果
|
||||
/// </summary>
|
||||
public sealed partial class CdkeyPageResultInfo
|
||||
{
|
||||
public int Page { get; set; }
|
||||
public int Size { get; set; }
|
||||
public int Count { get; set; }
|
||||
public List<RelayServerCdkeyStoreInfo> List { get; set; }
|
||||
public List<CdkeyStoreInfo> List { get; set; }
|
||||
}
|
||||
|
||||
public sealed partial class RelayServerCdkeyAddInfo
|
||||
/// <summary>
|
||||
/// 添加cdkey
|
||||
/// </summary>
|
||||
public sealed partial class CdkeyAddInfo
|
||||
{
|
||||
public string SecretKey { get; set; }
|
||||
public RelayServerCdkeyStoreInfo Data { get; set; }
|
||||
public CdkeyStoreInfo Data { get; set; }
|
||||
}
|
||||
public sealed partial class RelayServerCdkeyDelInfo
|
||||
/// <summary>
|
||||
/// 删除cdkey
|
||||
/// </summary>
|
||||
public sealed partial class CdkeyDelInfo
|
||||
{
|
||||
public string SecretKey { get; set; }
|
||||
public string UserId { get; set; }
|
||||
@@ -129,10 +146,29 @@ namespace linker.messenger.relay.server
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 中继CDKEY存储
|
||||
/// cdkey
|
||||
/// </summary>
|
||||
public sealed partial class RelayServerCdkeyStoreInfo : RelayServerCdkeyInfo
|
||||
public partial class CdkeyInfo
|
||||
{
|
||||
public int Id { get; set; }
|
||||
/// <summary>
|
||||
/// 带宽Mbps
|
||||
/// </summary>
|
||||
public double Bandwidth { get; set; }
|
||||
/// <summary>
|
||||
/// 剩余流量
|
||||
/// </summary>
|
||||
public long LastBytes { get; set; }
|
||||
}
|
||||
/// <summary>
|
||||
/// CDKEY存储
|
||||
/// </summary>
|
||||
public sealed partial class CdkeyStoreInfo : CdkeyInfo
|
||||
{
|
||||
/// <summary>
|
||||
/// 类别
|
||||
/// </summary>
|
||||
public string Type { get; set; }
|
||||
/// <summary>
|
||||
/// 用户标识
|
||||
/// </summary>
|
||||
@@ -194,25 +230,28 @@ namespace linker.messenger.relay.server
|
||||
public bool Deleted { get; set; }
|
||||
}
|
||||
|
||||
public sealed partial class RelayServerCdkeyTestResultInfo
|
||||
/// <summary>
|
||||
/// cdkey测试结果
|
||||
/// </summary>
|
||||
public sealed partial class CdkeyTestResultInfo
|
||||
{
|
||||
public RelayServerCdkeyOrderInfo Order { get; set; }
|
||||
public CdkeyOrderInfo Order { get; set; }
|
||||
public string Cdkey { get; set; }
|
||||
public List<string> Field { get; set; } = new List<string>();
|
||||
}
|
||||
/// <summary>
|
||||
/// 导入中继cdkey
|
||||
/// 导入cdkey
|
||||
/// </summary>
|
||||
public sealed partial class RelayServerCdkeyImportInfo
|
||||
public sealed partial class CdkeyImportInfo
|
||||
{
|
||||
public string SecretKey { get; set; }
|
||||
public string UserId { get; set; }
|
||||
public string Base64 { get; set; }
|
||||
}
|
||||
/// <summary>
|
||||
/// 导入中继cdkey
|
||||
/// cdkey订单
|
||||
/// </summary>
|
||||
public sealed partial class RelayServerCdkeyOrderInfo
|
||||
public sealed partial class CdkeyOrderInfo
|
||||
{
|
||||
/// <summary>
|
||||
/// 总流量
|
160
src/linker.messenger.cdkey/RelayApiController.cs
Normal file
160
src/linker.messenger.cdkey/RelayApiController.cs
Normal file
@@ -0,0 +1,160 @@
|
||||
using linker.libs;
|
||||
using linker.libs.extends;
|
||||
using linker.libs.web;
|
||||
using linker.messenger.api;
|
||||
using linker.messenger.signin;
|
||||
|
||||
namespace linker.messenger.cdkey
|
||||
{
|
||||
/// <summary>
|
||||
/// 中继管理接口
|
||||
/// </summary>
|
||||
public sealed class CdkeyApiController : IApiController
|
||||
{
|
||||
private readonly SignInClientState signInClientState;
|
||||
private readonly IMessengerSender messengerSender;
|
||||
private readonly ISerializer serializer;
|
||||
private readonly ISignInClientStore signInClientStore;
|
||||
private readonly ICdkeyClientStore cdkeyClientStore;
|
||||
|
||||
|
||||
public CdkeyApiController(SignInClientState signInClientState, IMessengerSender messengerSender, ISerializer serializer, ISignInClientStore signInClientStore, ICdkeyClientStore cdkeyClientStore)
|
||||
{
|
||||
this.signInClientState = signInClientState;
|
||||
this.messengerSender = messengerSender;
|
||||
this.serializer = serializer;
|
||||
this.signInClientStore = signInClientStore;
|
||||
this.cdkeyClientStore = cdkeyClientStore;
|
||||
}
|
||||
|
||||
public string GetSecretKey(ApiControllerParamsInfo param)
|
||||
{
|
||||
return cdkeyClientStore.SecretKey;
|
||||
}
|
||||
public void SetSecretKey(ApiControllerParamsInfo param)
|
||||
{
|
||||
cdkeyClientStore.SetSecretKey(param.Content);
|
||||
}
|
||||
|
||||
|
||||
public async Task<bool> AccessCdkey(ApiControllerParamsInfo param)
|
||||
{
|
||||
var resp = await messengerSender.SendReply(new MessageRequestWrap
|
||||
{
|
||||
Connection = signInClientState.Connection,
|
||||
MessengerId = (ushort)CdkeyMessengerIds.AccessCdkey,
|
||||
Payload = serializer.Serialize(cdkeyClientStore.SecretKey)
|
||||
}).ConfigureAwait(false);
|
||||
return resp.Code == MessageResponeCodes.OK && resp.Data.Span.SequenceEqual(Helper.TrueArray);
|
||||
}
|
||||
|
||||
[Access(AccessValue.Cdkey)]
|
||||
public async Task<bool> AddCdkey(ApiControllerParamsInfo param)
|
||||
{
|
||||
CdkeyStoreInfo info = param.Content.DeJson<CdkeyStoreInfo>();
|
||||
var resp = await messengerSender.SendReply(new MessageRequestWrap
|
||||
{
|
||||
Connection = signInClientState.Connection,
|
||||
MessengerId = (ushort)CdkeyMessengerIds.AddCdkey,
|
||||
Payload = serializer.Serialize(new CdkeyAddInfo
|
||||
{
|
||||
Data = info,
|
||||
SecretKey = cdkeyClientStore.SecretKey
|
||||
})
|
||||
}).ConfigureAwait(false);
|
||||
|
||||
return resp.Code == MessageResponeCodes.OK && resp.Data.Span.SequenceEqual(Helper.TrueArray);
|
||||
}
|
||||
|
||||
[Access(AccessValue.Cdkey)]
|
||||
public async Task<bool> DelCdkey(ApiControllerParamsInfo param)
|
||||
{
|
||||
var resp = await messengerSender.SendReply(new MessageRequestWrap
|
||||
{
|
||||
Connection = signInClientState.Connection,
|
||||
MessengerId = (ushort)CdkeyMessengerIds.DelCdkey,
|
||||
Payload = serializer.Serialize(new CdkeyDelInfo
|
||||
{
|
||||
Id = int.Parse(param.Content),
|
||||
UserId = signInClientStore.Server.UserId,
|
||||
SecretKey = cdkeyClientStore.SecretKey
|
||||
})
|
||||
}).ConfigureAwait(false);
|
||||
|
||||
return resp.Code == MessageResponeCodes.OK && resp.Data.Span.SequenceEqual(Helper.TrueArray);
|
||||
}
|
||||
|
||||
[Access(AccessValue.Cdkey)]
|
||||
public async Task<CdkeyPageResultInfo> PageCdkey(ApiControllerParamsInfo param)
|
||||
{
|
||||
CdkeyPageRequestInfo info = param.Content.DeJson<CdkeyPageRequestInfo>();
|
||||
info.SecretKey = cdkeyClientStore.SecretKey;
|
||||
var resp = await messengerSender.SendReply(new MessageRequestWrap
|
||||
{
|
||||
Connection = signInClientState.Connection,
|
||||
MessengerId = (ushort)CdkeyMessengerIds.PageCdkey,
|
||||
Payload = serializer.Serialize(info)
|
||||
}).ConfigureAwait(false);
|
||||
if (resp.Code == MessageResponeCodes.OK)
|
||||
{
|
||||
return serializer.Deserialize<CdkeyPageResultInfo>(resp.Data.Span);
|
||||
}
|
||||
|
||||
return new CdkeyPageResultInfo();
|
||||
}
|
||||
public async Task<CdkeyPageResultInfo> MyCdkey(ApiControllerParamsInfo param)
|
||||
{
|
||||
CdkeyPageRequestInfo info = param.Content.DeJson<CdkeyPageRequestInfo>();
|
||||
info.SecretKey = cdkeyClientStore.SecretKey;
|
||||
info.UserId = signInClientStore.Server.UserId;
|
||||
var resp = await messengerSender.SendReply(new MessageRequestWrap
|
||||
{
|
||||
Connection = signInClientState.Connection,
|
||||
MessengerId = (ushort)CdkeyMessengerIds.PageCdkey,
|
||||
Payload = serializer.Serialize(info)
|
||||
}).ConfigureAwait(false);
|
||||
if (resp.Code == MessageResponeCodes.OK)
|
||||
{
|
||||
return serializer.Deserialize<CdkeyPageResultInfo>(resp.Data.Span);
|
||||
}
|
||||
|
||||
return new CdkeyPageResultInfo();
|
||||
}
|
||||
public async Task<CdkeyTestResultInfo> TestCdkey(ApiControllerParamsInfo param)
|
||||
{
|
||||
CdkeyImportInfo info = param.Content.DeJson<CdkeyImportInfo>();
|
||||
info.SecretKey = cdkeyClientStore.SecretKey;
|
||||
info.UserId = signInClientStore.Server.UserId;
|
||||
var resp = await messengerSender.SendReply(new MessageRequestWrap
|
||||
{
|
||||
Connection = signInClientState.Connection,
|
||||
MessengerId = (ushort)CdkeyMessengerIds.TestCdkey,
|
||||
Payload = serializer.Serialize(info)
|
||||
}).ConfigureAwait(false);
|
||||
if (resp.Code == MessageResponeCodes.OK)
|
||||
{
|
||||
return serializer.Deserialize<CdkeyTestResultInfo>(resp.Data.Span);
|
||||
}
|
||||
|
||||
return new CdkeyTestResultInfo();
|
||||
}
|
||||
|
||||
public async Task<string> ImportCdkey(ApiControllerParamsInfo param)
|
||||
{
|
||||
CdkeyImportInfo info = param.Content.DeJson<CdkeyImportInfo>();
|
||||
info.SecretKey = cdkeyClientStore.SecretKey;
|
||||
info.UserId = signInClientStore.Server.UserId;
|
||||
var resp = await messengerSender.SendReply(new MessageRequestWrap
|
||||
{
|
||||
Connection = signInClientState.Connection,
|
||||
MessengerId = (ushort)CdkeyMessengerIds.ImportCdkey,
|
||||
Payload = serializer.Serialize(info)
|
||||
}).ConfigureAwait(false);
|
||||
if (resp.Code == MessageResponeCodes.OK)
|
||||
{
|
||||
return serializer.Deserialize<string>(resp.Data.Span);
|
||||
}
|
||||
return "Network";
|
||||
}
|
||||
}
|
||||
}
|
146
src/linker.messenger.cdkey/RelayMessenger.cs
Normal file
146
src/linker.messenger.cdkey/RelayMessenger.cs
Normal file
@@ -0,0 +1,146 @@
|
||||
using linker.libs;
|
||||
using linker.messenger.signin;
|
||||
|
||||
namespace linker.messenger.cdkey
|
||||
{
|
||||
/// <summary>
|
||||
/// 中继服务端
|
||||
/// </summary>
|
||||
public class CdkeyServerMessenger : IMessenger
|
||||
{
|
||||
private readonly IMessengerSender messengerSender;
|
||||
private readonly SignInServerCaching signCaching;
|
||||
private readonly ISerializer serializer;
|
||||
private readonly ICdkeyServerStore cdkeyStore;
|
||||
|
||||
public CdkeyServerMessenger(IMessengerSender messengerSender, SignInServerCaching signCaching, ISerializer serializer, ICdkeyServerStore cdkeyStore)
|
||||
{
|
||||
this.messengerSender = messengerSender;
|
||||
this.signCaching = signCaching;
|
||||
this.serializer = serializer;
|
||||
this.cdkeyStore = cdkeyStore;
|
||||
}
|
||||
/// <summary>
|
||||
/// 添加CDKEY
|
||||
/// </summary>
|
||||
/// <param name="connection"></param>
|
||||
[MessengerId((ushort)CdkeyMessengerIds.AddCdkey)]
|
||||
public async Task AddCdkey(IConnection connection)
|
||||
{
|
||||
CdkeyAddInfo info = serializer.Deserialize<CdkeyAddInfo>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
if (signCaching.TryGet(connection.Id, out SignCacheInfo cache) == false)
|
||||
{
|
||||
connection.Write(Helper.FalseArray);
|
||||
return;
|
||||
}
|
||||
if (cdkeyStore.ValidateSecretKey(info.SecretKey) == false)
|
||||
{
|
||||
connection.Write(Helper.FalseArray);
|
||||
return;
|
||||
}
|
||||
|
||||
await cdkeyStore.Add(info.Data).ConfigureAwait(false);
|
||||
connection.Write(Helper.TrueArray);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 删除Cdkey
|
||||
/// </summary>
|
||||
/// <param name="connection"></param>
|
||||
/// <returns></returns>
|
||||
[MessengerId((ushort)CdkeyMessengerIds.DelCdkey)]
|
||||
public async Task DelCdkey(IConnection connection)
|
||||
{
|
||||
CdkeyDelInfo info = serializer.Deserialize<CdkeyDelInfo>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
if (signCaching.TryGet(connection.Id, out SignCacheInfo cache) == false)
|
||||
{
|
||||
connection.Write(Helper.FalseArray);
|
||||
return;
|
||||
}
|
||||
if (cdkeyStore.ValidateSecretKey(info.SecretKey))
|
||||
{
|
||||
await cdkeyStore.Del(info.Id).ConfigureAwait(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
await cdkeyStore.Del(info.Id, info.UserId).ConfigureAwait(false);
|
||||
}
|
||||
connection.Write(Helper.TrueArray);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查询CDKEY
|
||||
/// </summary>
|
||||
/// <param name="connection"></param>
|
||||
/// <returns></returns>
|
||||
[MessengerId((ushort)CdkeyMessengerIds.PageCdkey)]
|
||||
public async Task PageCdkey(IConnection connection)
|
||||
{
|
||||
CdkeyPageRequestInfo info = serializer.Deserialize<CdkeyPageRequestInfo>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
if (signCaching.TryGet(connection.Id, out SignCacheInfo cache) == false)
|
||||
{
|
||||
connection.Write(serializer.Serialize(new CdkeyPageResultInfo { }));
|
||||
return;
|
||||
}
|
||||
if (cdkeyStore.ValidateSecretKey(info.SecretKey) == false && string.IsNullOrWhiteSpace(info.UserId))
|
||||
{
|
||||
connection.Write(serializer.Serialize(new CdkeyPageResultInfo { }));
|
||||
return;
|
||||
}
|
||||
|
||||
var page = await cdkeyStore.Page(info).ConfigureAwait(false);
|
||||
|
||||
connection.Write(serializer.Serialize(page));
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 测试cdkey
|
||||
/// </summary>
|
||||
/// <param name="connection"></param>
|
||||
/// <returns></returns>
|
||||
[MessengerId((ushort)CdkeyMessengerIds.TestCdkey)]
|
||||
public async Task TestCdkey(IConnection connection)
|
||||
{
|
||||
CdkeyImportInfo info = serializer.Deserialize<CdkeyImportInfo>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
if (signCaching.TryGet(connection.Id, out SignCacheInfo cache) == false)
|
||||
{
|
||||
connection.Write(serializer.Serialize(new CdkeyTestResultInfo { }));
|
||||
return;
|
||||
}
|
||||
if (cdkeyStore.ValidateSecretKey(info.SecretKey) == false)
|
||||
{
|
||||
connection.Write(serializer.Serialize(new CdkeyTestResultInfo { }));
|
||||
return;
|
||||
}
|
||||
CdkeyTestResultInfo test = await cdkeyStore.Test(info).ConfigureAwait(false);
|
||||
connection.Write(serializer.Serialize(test));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 导入cdkey
|
||||
/// </summary>
|
||||
/// <param name="connection"></param>
|
||||
/// <returns></returns>
|
||||
[MessengerId((ushort)CdkeyMessengerIds.ImportCdkey)]
|
||||
public async Task ImportCdkey(IConnection connection)
|
||||
{
|
||||
CdkeyImportInfo info = serializer.Deserialize<CdkeyImportInfo>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
if (signCaching.TryGet(connection.Id, out SignCacheInfo cache) == false)
|
||||
{
|
||||
connection.Write(Helper.FalseArray);
|
||||
return;
|
||||
}
|
||||
string result = await cdkeyStore.Import(info).ConfigureAwait(false);
|
||||
connection.Write(serializer.Serialize(result));
|
||||
}
|
||||
|
||||
|
||||
[MessengerId((ushort)CdkeyMessengerIds.AccessCdkey)]
|
||||
public void AccessCdkey(IConnection connection)
|
||||
{
|
||||
string key = serializer.Deserialize<string>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
connection.Write(cdkeyStore.ValidateSecretKey(key) ? Helper.TrueArray : Helper.FalseArray);
|
||||
}
|
||||
}
|
||||
}
|
47
src/linker.messenger.cdkey/linker.messenger.cdkey.csproj
Normal file
47
src/linker.messenger.cdkey/linker.messenger.cdkey.csproj
Normal file
@@ -0,0 +1,47 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFrameworks>net8.0</TargetFrameworks>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>disable</Nullable>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<PublishAot>false</PublishAot>
|
||||
<JsonSerializerIsReflectionEnabledByDefault>true</JsonSerializerIsReflectionEnabledByDefault>
|
||||
<EnablePreviewFeatures>True</EnablePreviewFeatures>
|
||||
<Title>linker messenger cdkey</Title>
|
||||
<Authors>snltty</Authors>
|
||||
<Company>snltty</Company>
|
||||
<Description>linker messenger cdkey</Description>
|
||||
<Copyright>snltty</Copyright>
|
||||
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
|
||||
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
|
||||
<PackageReleaseNotes>linker messenger cdkey</PackageReleaseNotes>
|
||||
<Version>1.8.3</Version>
|
||||
<AssemblyVersion>1.8.3</AssemblyVersion>
|
||||
<FileVersion>1.8.3</FileVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
<DebugType>full</DebugType>
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
|
||||
<DebugType>full</DebugType>
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<Optimize>True</Optimize>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Debug|net8.0|AnyCPU'">
|
||||
<DebugType>embedded</DebugType>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Release|net8.0|AnyCPU'">
|
||||
<DebugType>embedded</DebugType>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\linker.libs\linker.libs.csproj" />
|
||||
<ProjectReference Include="..\linker.messenger.signin\linker.messenger.signin.csproj" />
|
||||
<ProjectReference Include="..\linker.messenger.sync\linker.messenger.sync.csproj" />
|
||||
<ProjectReference Include="..\linker.messenger\linker.messenger.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
@@ -16,9 +16,9 @@
|
||||
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
|
||||
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
|
||||
<PackageReleaseNotes>linker messenger channel</PackageReleaseNotes>
|
||||
<Version>1.8.2</Version>
|
||||
<AssemblyVersion>1.8.2</AssemblyVersion>
|
||||
<FileVersion>1.8.2</FileVersion>
|
||||
<Version>1.8.3</Version>
|
||||
<AssemblyVersion>1.8.3</AssemblyVersion>
|
||||
<FileVersion>1.8.3</FileVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
|
@@ -16,9 +16,9 @@
|
||||
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
|
||||
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
|
||||
<PackageReleaseNotes>linker messenger decenter</PackageReleaseNotes>
|
||||
<Version>1.8.2</Version>
|
||||
<AssemblyVersion>1.8.2</AssemblyVersion>
|
||||
<FileVersion>1.8.2</FileVersion>
|
||||
<Version>1.8.3</Version>
|
||||
<AssemblyVersion>1.8.3</AssemblyVersion>
|
||||
<FileVersion>1.8.3</FileVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
|
@@ -48,7 +48,7 @@ namespace linker.messenger.decenter
|
||||
}
|
||||
|
||||
Memory<byte> memory = serializer.Serialize(info);
|
||||
List<SignCacheInfo> caches = signCaching.Get(signin.GroupId).Where(c => c.MachineId != connection.Id && c.Connected).ToList();
|
||||
List<SignCacheInfo> caches = signCaching.Get(signin).Where(c => c.MachineId != connection.Id && c.Connected).ToList();
|
||||
List<Task<bool>> tasks = caches.Select(c => sender.SendOnly(new MessageRequestWrap
|
||||
{
|
||||
Connection = c.Connection,
|
||||
@@ -69,7 +69,7 @@ namespace linker.messenger.decenter
|
||||
return;
|
||||
}
|
||||
|
||||
IEnumerable<Memory<byte>> data = dic.Where(c => c.Key != connection.Id && c.Value.SignIn.GroupId == signin.GroupId).Select(c => c.Value.Data);
|
||||
IEnumerable<Memory<byte>> data = dic.Where(c => c.Key != connection.Id && c.Value.SignIn.SameGroup(signin)).Select(c => c.Value.Data);
|
||||
connection.Write(serializer.Serialize(data));
|
||||
}
|
||||
|
||||
@@ -85,7 +85,7 @@ namespace linker.messenger.decenter
|
||||
return;
|
||||
}
|
||||
|
||||
IEnumerable<Memory<byte>> data = dic.Where(c => c.Key != connection.Id && c.Value.SignIn.GroupId == signin.GroupId).Select(c => c.Value.Data);
|
||||
IEnumerable<Memory<byte>> data = dic.Where(c => c.Key != connection.Id && c.Value.SignIn.SameGroup(signin)).Select(c => c.Value.Data);
|
||||
connection.Write(serializer.Serialize(new DecenterPullPageResultInfo
|
||||
{
|
||||
Count = data.Count(),
|
||||
@@ -103,7 +103,7 @@ namespace linker.messenger.decenter
|
||||
{
|
||||
uint requiestid = connection.ReceiveRequestWrap.RequestId;
|
||||
|
||||
List<SignCacheInfo> caches = signCaching.Get(cache.GroupId).Where(c => c.MachineId != connection.Id && c.Connected).ToList();
|
||||
List<SignCacheInfo> caches = signCaching.Get(cache).Where(c => c.MachineId != connection.Id && c.Connected).ToList();
|
||||
List<Task<MessageResponeInfo>> tasks = new List<Task<MessageResponeInfo>>();
|
||||
foreach (SignCacheInfo item in caches)
|
||||
{
|
||||
|
@@ -22,6 +22,7 @@ using linker.messenger.plan;
|
||||
using System.Text.Json;
|
||||
using linker.messenger.firewall;
|
||||
using linker.messenger.wakeup;
|
||||
using linker.messenger.cdkey;
|
||||
|
||||
namespace linker.messenger.entry
|
||||
{
|
||||
@@ -67,6 +68,8 @@ namespace linker.messenger.entry
|
||||
.AddPcpClient().AddPcpServer()
|
||||
//中继
|
||||
.AddRelayClient().AddRelayServer()
|
||||
//cdkey
|
||||
.AddCdkeyClient().AddCdkeyServer()
|
||||
//服务器穿透
|
||||
.AddSForwardClient().AddSForwardServer()
|
||||
//登录
|
||||
@@ -97,11 +100,11 @@ namespace linker.messenger.entry
|
||||
|
||||
//防火墙
|
||||
.AddFirewallClient().AddFirewallServer()
|
||||
|
||||
|
||||
//唤醒
|
||||
.AddWakeupClient().AddWakeupServer();
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// <summary>
|
||||
/// 注入
|
||||
@@ -182,7 +185,8 @@ namespace linker.messenger.entry
|
||||
if ((modules & ExcludeModule.Wakeup) != ExcludeModule.Wakeup)
|
||||
serviceProvider.UseWakeupServer();
|
||||
|
||||
serviceProvider.UseAccessServer().UseDecenterServer().UsePcpServer().UseRelayServer()
|
||||
serviceProvider.UseAccessServer().UseDecenterServer().UsePcpServer()
|
||||
.UseRelayServer().UseCdkeyServer()
|
||||
.UseSignInServer().UseSyncServer().UseTunnelServer().UseFlowServer();
|
||||
|
||||
serviceProvider.UseListen();
|
||||
@@ -214,7 +218,9 @@ namespace linker.messenger.entry
|
||||
serviceProvider.UseWakeupClient();
|
||||
|
||||
|
||||
serviceProvider.UseExRoute().UseAccessClient().UseDecenterClient().UsePcpClient().UseRelayClient().UseSyncClient().UseTunnelClient().UseFlowClient();
|
||||
serviceProvider.UseExRoute().UseAccessClient().UseDecenterClient().UsePcpClient()
|
||||
.UseRelayClient().UseCdkeyClient()
|
||||
.UseSyncClient().UseTunnelClient().UseFlowClient();
|
||||
|
||||
serviceProvider.UseSignInClient();
|
||||
|
||||
|
@@ -16,9 +16,9 @@
|
||||
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
|
||||
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
|
||||
<PackageReleaseNotes>linker messenger entry</PackageReleaseNotes>
|
||||
<Version>1.8.2</Version>
|
||||
<AssemblyVersion>1.8.2</AssemblyVersion>
|
||||
<FileVersion>1.8.2</FileVersion>
|
||||
<Version>1.8.3</Version>
|
||||
<AssemblyVersion>1.8.3</AssemblyVersion>
|
||||
<FileVersion>1.8.3</FileVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
@@ -40,6 +40,7 @@
|
||||
<ProjectReference Include="..\linker.messenger.access\linker.messenger.access.csproj" />
|
||||
<ProjectReference Include="..\linker.messenger.action\linker.messenger.action.csproj" />
|
||||
<ProjectReference Include="..\linker.messenger.api\linker.messenger.api.csproj" />
|
||||
<ProjectReference Include="..\linker.messenger.cdkey\linker.messenger.cdkey.csproj" />
|
||||
<ProjectReference Include="..\linker.messenger.channel\linker.messenger.channel.csproj" />
|
||||
<ProjectReference Include="..\linker.messenger.decenter\linker.messenger.decenter.csproj" />
|
||||
<ProjectReference Include="..\linker.messenger.exroute\linker.messenger.exroute.csproj" />
|
||||
|
@@ -16,9 +16,9 @@
|
||||
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
|
||||
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
|
||||
<PackageReleaseNotes>linker messenger exroute</PackageReleaseNotes>
|
||||
<Version>1.8.2</Version>
|
||||
<AssemblyVersion>1.8.2</AssemblyVersion>
|
||||
<FileVersion>1.8.2</FileVersion>
|
||||
<Version>1.8.3</Version>
|
||||
<AssemblyVersion>1.8.3</AssemblyVersion>
|
||||
<FileVersion>1.8.3</FileVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
|
@@ -25,12 +25,12 @@ namespace linker.messenger.firewall
|
||||
public void GetForward(IConnection connection)
|
||||
{
|
||||
FirewallSearchForwardInfo info = serializer.Deserialize<FirewallSearchForwardInfo>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
if (signCaching.TryGet(info.MachineId, out SignCacheInfo cacheTo) && signCaching.TryGet(connection.Id, out SignCacheInfo cacheFrom) && cacheFrom.GroupId == cacheTo.GroupId)
|
||||
if (signCaching.TryGet(connection.Id, info.MachineId, out SignCacheInfo from, out SignCacheInfo to))
|
||||
{
|
||||
uint requestid = connection.ReceiveRequestWrap.RequestId;
|
||||
sender.SendReply(new MessageRequestWrap
|
||||
{
|
||||
Connection = cacheTo.Connection,
|
||||
Connection = to.Connection,
|
||||
MessengerId = (ushort)FirewallMessengerIds.Get,
|
||||
Payload = serializer.Serialize(info.Data)
|
||||
}).ContinueWith(async (result) =>
|
||||
@@ -60,12 +60,12 @@ namespace linker.messenger.firewall
|
||||
public async Task AddForward(IConnection connection)
|
||||
{
|
||||
FirewallAddForwardInfo info = serializer.Deserialize<FirewallAddForwardInfo>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
if (signCaching.TryGet(info.MachineId, out SignCacheInfo cacheTo) && signCaching.TryGet(connection.Id, out SignCacheInfo cacheFrom) && cacheFrom.GroupId == cacheTo.GroupId)
|
||||
if (signCaching.TryGet(connection.Id, info.MachineId, out SignCacheInfo from, out SignCacheInfo to))
|
||||
{
|
||||
uint requestid = connection.ReceiveRequestWrap.RequestId;
|
||||
await sender.SendOnly(new MessageRequestWrap
|
||||
{
|
||||
Connection = cacheTo.Connection,
|
||||
Connection = to.Connection,
|
||||
MessengerId = (ushort)FirewallMessengerIds.Add,
|
||||
Payload = serializer.Serialize(info.Data)
|
||||
}).ConfigureAwait(false);
|
||||
@@ -79,12 +79,12 @@ namespace linker.messenger.firewall
|
||||
public async Task RemoveForward(IConnection connection)
|
||||
{
|
||||
FirewallRemoveForwardInfo info = serializer.Deserialize<FirewallRemoveForwardInfo>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
if (signCaching.TryGet(info.MachineId, out SignCacheInfo cacheTo) && signCaching.TryGet(connection.Id, out SignCacheInfo cacheFrom) && cacheFrom.GroupId == cacheTo.GroupId)
|
||||
if (signCaching.TryGet(connection.Id, info.MachineId, out SignCacheInfo from, out SignCacheInfo to))
|
||||
{
|
||||
uint requestid = connection.ReceiveRequestWrap.RequestId;
|
||||
await sender.SendOnly(new MessageRequestWrap
|
||||
{
|
||||
Connection = cacheTo.Connection,
|
||||
Connection = to.Connection,
|
||||
MessengerId = (ushort)FirewallMessengerIds.Remove,
|
||||
Payload = serializer.Serialize(info.Id)
|
||||
}).ConfigureAwait(false);
|
||||
@@ -100,12 +100,12 @@ namespace linker.messenger.firewall
|
||||
public async Task StateForward(IConnection connection)
|
||||
{
|
||||
FirewallStateForwardInfo info = serializer.Deserialize<FirewallStateForwardInfo>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
if (signCaching.TryGet(info.MachineId, out SignCacheInfo cacheTo) && signCaching.TryGet(connection.Id, out SignCacheInfo cacheFrom) && cacheFrom.GroupId == cacheTo.GroupId)
|
||||
if (signCaching.TryGet(connection.Id, info.MachineId, out SignCacheInfo from, out SignCacheInfo to))
|
||||
{
|
||||
uint requestid = connection.ReceiveRequestWrap.RequestId;
|
||||
await sender.SendOnly(new MessageRequestWrap
|
||||
{
|
||||
Connection = cacheTo.Connection,
|
||||
Connection = to.Connection,
|
||||
MessengerId = (ushort)FirewallMessengerIds.State,
|
||||
Payload = serializer.Serialize(info.State)
|
||||
}).ConfigureAwait(false);
|
||||
|
@@ -17,9 +17,9 @@
|
||||
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
|
||||
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
|
||||
<PackageReleaseNotes>linker messenger firewall</PackageReleaseNotes>
|
||||
<Version>1.8.2</Version>
|
||||
<AssemblyVersion>1.8.2</AssemblyVersion>
|
||||
<FileVersion>1.8.2</FileVersion>
|
||||
<Version>1.8.3</Version>
|
||||
<AssemblyVersion>1.8.3</AssemblyVersion>
|
||||
<FileVersion>1.8.3</FileVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
|
@@ -17,9 +17,9 @@
|
||||
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
|
||||
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
|
||||
<PackageReleaseNotes>linker messenger flow</PackageReleaseNotes>
|
||||
<Version>1.8.2</Version>
|
||||
<AssemblyVersion>1.8.2</AssemblyVersion>
|
||||
<FileVersion>1.8.2</FileVersion>
|
||||
<Version>1.8.3</Version>
|
||||
<AssemblyVersion>1.8.3</AssemblyVersion>
|
||||
<FileVersion>1.8.3</FileVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
|
@@ -121,12 +121,12 @@ namespace linker.messenger.flow.messenger
|
||||
public void StopwatchForward(IConnection connection)
|
||||
{
|
||||
string machineid = serializer.Deserialize<string>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
if (signCaching.TryGet(machineid, out SignCacheInfo cacheTo) && signCaching.TryGet(connection.Id, out SignCacheInfo cacheFrom) && cacheTo.GroupId == cacheFrom.GroupId)
|
||||
if (signCaching.TryGet(connection.Id,machineid, out SignCacheInfo from, out SignCacheInfo to))
|
||||
{
|
||||
uint requestid = connection.ReceiveRequestWrap.RequestId;
|
||||
_ = messengerSender.SendReply(new MessageRequestWrap
|
||||
{
|
||||
Connection = cacheTo.Connection,
|
||||
Connection = to.Connection,
|
||||
MessengerId = (ushort)FlowMessengerIds.Stopwatch
|
||||
}).ContinueWith(async (result) =>
|
||||
{
|
||||
|
@@ -24,12 +24,12 @@ namespace linker.messenger.forward
|
||||
public void GetForward(IConnection connection)
|
||||
{
|
||||
string machineId = serializer.Deserialize<string>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
if (signCaching.TryGet(machineId, out SignCacheInfo cacheTo) && signCaching.TryGet(connection.Id, out SignCacheInfo cacheFrom) && cacheFrom.GroupId == cacheTo.GroupId)
|
||||
if (signCaching.TryGet(connection.Id,machineId, out SignCacheInfo from, out SignCacheInfo to))
|
||||
{
|
||||
uint requestid = connection.ReceiveRequestWrap.RequestId;
|
||||
sender.SendReply(new MessageRequestWrap
|
||||
{
|
||||
Connection = cacheTo.Connection,
|
||||
Connection = to.Connection,
|
||||
MessengerId = (ushort)ForwardMessengerIds.Get,
|
||||
Payload = connection.ReceiveRequestWrap.Payload
|
||||
}).ContinueWith(async (result) =>
|
||||
@@ -55,12 +55,12 @@ namespace linker.messenger.forward
|
||||
public async Task AddForward(IConnection connection)
|
||||
{
|
||||
ForwardAddForwardInfo info = serializer.Deserialize<ForwardAddForwardInfo>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
if (signCaching.TryGet(info.MachineId, out SignCacheInfo cacheTo) && signCaching.TryGet(connection.Id, out SignCacheInfo cacheFrom) && cacheFrom.GroupId == cacheTo.GroupId)
|
||||
if (signCaching.TryGet(connection.Id, info.MachineId, out SignCacheInfo from, out SignCacheInfo to))
|
||||
{
|
||||
uint requestid = connection.ReceiveRequestWrap.RequestId;
|
||||
await sender.SendOnly(new MessageRequestWrap
|
||||
{
|
||||
Connection = cacheTo.Connection,
|
||||
Connection = to.Connection,
|
||||
MessengerId = (ushort)ForwardMessengerIds.Add,
|
||||
Payload = serializer.Serialize(info.Data)
|
||||
}).ConfigureAwait(false);
|
||||
@@ -74,12 +74,12 @@ namespace linker.messenger.forward
|
||||
public async Task RemoveForward(IConnection connection)
|
||||
{
|
||||
ForwardRemoveForwardInfo info = serializer.Deserialize<ForwardRemoveForwardInfo>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
if (signCaching.TryGet(info.MachineId, out SignCacheInfo cacheTo) && signCaching.TryGet(connection.Id, out SignCacheInfo cacheFrom) && cacheFrom.GroupId == cacheTo.GroupId)
|
||||
if (signCaching.TryGet(connection.Id, info.MachineId, out SignCacheInfo from, out SignCacheInfo to))
|
||||
{
|
||||
uint requestid = connection.ReceiveRequestWrap.RequestId;
|
||||
await sender.SendOnly(new MessageRequestWrap
|
||||
{
|
||||
Connection = cacheTo.Connection,
|
||||
Connection = to.Connection,
|
||||
MessengerId = (ushort)ForwardMessengerIds.Remove,
|
||||
Payload = serializer.Serialize(info.Id)
|
||||
}).ConfigureAwait(false);
|
||||
@@ -91,11 +91,11 @@ namespace linker.messenger.forward
|
||||
public async Task SubTestForward(IConnection connection)
|
||||
{
|
||||
string machineid = serializer.Deserialize<string>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
if (signCaching.TryGet(machineid, out SignCacheInfo cacheTo) && signCaching.TryGet(connection.Id, out SignCacheInfo cacheFrom) && cacheFrom.GroupId == cacheTo.GroupId)
|
||||
if (signCaching.TryGet(connection.Id,machineid, out SignCacheInfo from, out SignCacheInfo to))
|
||||
{
|
||||
await sender.SendOnly(new MessageRequestWrap
|
||||
{
|
||||
Connection = cacheTo.Connection,
|
||||
Connection = to.Connection,
|
||||
MessengerId = (ushort)ForwardMessengerIds.SubTest
|
||||
}).ConfigureAwait(false);
|
||||
}
|
||||
@@ -106,20 +106,23 @@ namespace linker.messenger.forward
|
||||
{
|
||||
Dictionary<string, List<ForwardTestInfo>> tests = serializer.Deserialize<Dictionary<string, List<ForwardTestInfo>>>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
|
||||
var from = signCaching.TryGet(connection.Id, out SignCacheInfo cacheFrom);
|
||||
if(signCaching.TryGet(connection.Id, out SignCacheInfo from) == false)
|
||||
{
|
||||
return;
|
||||
}
|
||||
uint requiestid = connection.ReceiveRequestWrap.RequestId;
|
||||
|
||||
var tasks = new List<TaskInfo>();
|
||||
foreach (var item in tests)
|
||||
{
|
||||
if (signCaching.TryGet(item.Key, out SignCacheInfo cacheTo) && cacheFrom.GroupId == cacheTo.GroupId)
|
||||
if (signCaching.TryGet(item.Key, out SignCacheInfo to) && from.SameGroup(to))
|
||||
{
|
||||
tasks.Add(new TaskInfo
|
||||
{
|
||||
MachineId = item.Key,
|
||||
Task = sender.SendReply(new MessageRequestWrap
|
||||
{
|
||||
Connection = cacheTo.Connection,
|
||||
Connection = to.Connection,
|
||||
MessengerId = (ushort)ForwardMessengerIds.Test,
|
||||
Payload = serializer.Serialize(item.Value),
|
||||
Timeout = 3000
|
||||
|
@@ -17,9 +17,9 @@
|
||||
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
|
||||
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
|
||||
<PackageReleaseNotes>linker messenger forward</PackageReleaseNotes>
|
||||
<Version>1.8.2</Version>
|
||||
<AssemblyVersion>1.8.2</AssemblyVersion>
|
||||
<FileVersion>1.8.2</FileVersion>
|
||||
<Version>1.8.3</Version>
|
||||
<AssemblyVersion>1.8.3</AssemblyVersion>
|
||||
<FileVersion>1.8.3</FileVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
|
@@ -17,9 +17,9 @@
|
||||
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
|
||||
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
|
||||
<PackageReleaseNotes>linker messenger listen</PackageReleaseNotes>
|
||||
<Version>1.8.2</Version>
|
||||
<AssemblyVersion>1.8.2</AssemblyVersion>
|
||||
<FileVersion>1.8.2</FileVersion>
|
||||
<Version>1.8.3</Version>
|
||||
<AssemblyVersion>1.8.3</AssemblyVersion>
|
||||
<FileVersion>1.8.3</FileVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
|
@@ -43,9 +43,9 @@ namespace linker.messenger.logger
|
||||
|
||||
private static void LoggerConsole()
|
||||
{
|
||||
if (Directory.Exists(Path.Join(Helper.currentDirectory, "logs")) == false)
|
||||
if (Directory.Exists(Path.Join(Helper.CurrentDirectory, "logs")) == false)
|
||||
{
|
||||
Directory.CreateDirectory(Path.Join(Helper.currentDirectory, "logs"));
|
||||
Directory.CreateDirectory(Path.Join(Helper.CurrentDirectory, "logs"));
|
||||
}
|
||||
LoggerHelper.Instance.OnLogger += (model) =>
|
||||
{
|
||||
@@ -72,7 +72,7 @@ namespace linker.messenger.logger
|
||||
Console.ForegroundColor = currentForeColor;
|
||||
try
|
||||
{
|
||||
using StreamWriter sw = File.AppendText(Path.Join(Helper.currentDirectory, "logs", $"{DateTime.Now:yyyy-MM-dd}.log"));
|
||||
using StreamWriter sw = File.AppendText(Path.Join(Helper.CurrentDirectory, "logs", $"{DateTime.Now:yyyy-MM-dd}.log"));
|
||||
sw.WriteLine(line);
|
||||
sw.Flush();
|
||||
sw.Close();
|
||||
@@ -84,7 +84,7 @@ namespace linker.messenger.logger
|
||||
};
|
||||
TimerHelper.SetIntervalLong(() =>
|
||||
{
|
||||
string[] files = Directory.GetFiles(Path.Combine(Helper.currentDirectory, "logs")).OrderBy(c => c).ToArray();
|
||||
string[] files = Directory.GetFiles(Path.Combine(Helper.CurrentDirectory, "logs")).OrderBy(c => c).ToArray();
|
||||
for (int i = 0; i < files.Length - 180; i++)
|
||||
{
|
||||
try
|
||||
|
@@ -16,9 +16,9 @@
|
||||
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
|
||||
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
|
||||
<PackageReleaseNotes>linker messenger logger</PackageReleaseNotes>
|
||||
<Version>1.8.2</Version>
|
||||
<AssemblyVersion>1.8.2</AssemblyVersion>
|
||||
<FileVersion>1.8.2</FileVersion>
|
||||
<Version>1.8.3</Version>
|
||||
<AssemblyVersion>1.8.3</AssemblyVersion>
|
||||
<FileVersion>1.8.3</FileVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
|
@@ -50,18 +50,18 @@ namespace linker.messenger.pcp
|
||||
[MessengerId((ushort)PcpMessengerIds.BeginForward)]
|
||||
public async Task BeginForward(IConnection connection)
|
||||
{
|
||||
TunnelTransportInfo tunnelTransportInfo = serializer.Deserialize<TunnelTransportInfo>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
TunnelTransportInfo info = serializer.Deserialize<TunnelTransportInfo>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
|
||||
if (signCaching.TryGet(tunnelTransportInfo.Remote.MachineId, out SignCacheInfo cacheTo) && signCaching.TryGet(connection.Id, out SignCacheInfo cacheFrom) && cacheFrom.GroupId == cacheTo.GroupId)
|
||||
if (signCaching.TryGet(connection.Id, info.Remote.MachineId, out SignCacheInfo from, out SignCacheInfo to))
|
||||
{
|
||||
tunnelTransportInfo.Local.MachineName = cacheFrom.MachineName;
|
||||
tunnelTransportInfo.Remote.MachineName = cacheTo.MachineName;
|
||||
info.Local.MachineName = from.MachineName;
|
||||
info.Remote.MachineName = to.MachineName;
|
||||
|
||||
await messengerSender.SendOnly(new MessageRequestWrap
|
||||
{
|
||||
Connection = cacheTo.Connection,
|
||||
Connection = to.Connection,
|
||||
MessengerId = (ushort)PcpMessengerIds.Begin,
|
||||
Payload = serializer.Serialize(tunnelTransportInfo)
|
||||
Payload = serializer.Serialize(info)
|
||||
}).ConfigureAwait(false);
|
||||
connection.Write(Helper.TrueArray);
|
||||
}
|
||||
@@ -71,16 +71,16 @@ namespace linker.messenger.pcp
|
||||
[MessengerId((ushort)PcpMessengerIds.FailForward)]
|
||||
public async Task FailForward(IConnection connection)
|
||||
{
|
||||
TunnelTransportInfo tunnelTransportInfo = serializer.Deserialize<TunnelTransportInfo>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
if (signCaching.TryGet(tunnelTransportInfo.Remote.MachineId, out SignCacheInfo cache) && signCaching.TryGet(connection.Id, out SignCacheInfo cache1) && cache.GroupId == cache1.GroupId)
|
||||
TunnelTransportInfo info = serializer.Deserialize<TunnelTransportInfo>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
if (signCaching.TryGet(connection.Id, info.Remote.MachineId, out SignCacheInfo from, out SignCacheInfo to))
|
||||
{
|
||||
tunnelTransportInfo.Local.MachineName = cache1.MachineName;
|
||||
tunnelTransportInfo.Remote.MachineName = cache.MachineName;
|
||||
info.Local.MachineName = from.MachineName;
|
||||
info.Remote.MachineName = to.MachineName;
|
||||
await messengerSender.SendOnly(new MessageRequestWrap
|
||||
{
|
||||
Connection = cache.Connection,
|
||||
Connection = to.Connection,
|
||||
MessengerId = (ushort)PcpMessengerIds.Fail,
|
||||
Payload = serializer.Serialize(tunnelTransportInfo)
|
||||
Payload = serializer.Serialize(info)
|
||||
}).ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
@@ -89,16 +89,16 @@ namespace linker.messenger.pcp
|
||||
[MessengerId((ushort)PcpMessengerIds.SuccessForward)]
|
||||
public async Task SuccessForward(IConnection connection)
|
||||
{
|
||||
TunnelTransportInfo tunnelTransportInfo = serializer.Deserialize<TunnelTransportInfo>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
if (signCaching.TryGet(tunnelTransportInfo.Remote.MachineId, out SignCacheInfo cache) && signCaching.TryGet(connection.Id, out SignCacheInfo cache1) && cache.GroupId == cache1.GroupId)
|
||||
TunnelTransportInfo info = serializer.Deserialize<TunnelTransportInfo>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
if (signCaching.TryGet(connection.Id, info.Remote.MachineId, out SignCacheInfo from, out SignCacheInfo to))
|
||||
{
|
||||
tunnelTransportInfo.Local.MachineName = cache1.MachineName;
|
||||
tunnelTransportInfo.Remote.MachineName = cache.MachineName;
|
||||
info.Local.MachineName = from.MachineName;
|
||||
info.Remote.MachineName = to.MachineName;
|
||||
await messengerSender.SendOnly(new MessageRequestWrap
|
||||
{
|
||||
Connection = cache.Connection,
|
||||
Connection = to.Connection,
|
||||
MessengerId = (ushort)PcpMessengerIds.Success,
|
||||
Payload = serializer.Serialize(tunnelTransportInfo)
|
||||
Payload = serializer.Serialize(info)
|
||||
}).ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
|
@@ -17,9 +17,9 @@
|
||||
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
|
||||
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
|
||||
<PackageReleaseNotes>linker messenger pcp</PackageReleaseNotes>
|
||||
<Version>1.8.2</Version>
|
||||
<AssemblyVersion>1.8.2</AssemblyVersion>
|
||||
<FileVersion>1.8.2</FileVersion>
|
||||
<Version>1.8.3</Version>
|
||||
<AssemblyVersion>1.8.3</AssemblyVersion>
|
||||
<FileVersion>1.8.3</FileVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
|
@@ -70,12 +70,12 @@ namespace linker.messenger.plan
|
||||
public async Task GetForward(IConnection connection)
|
||||
{
|
||||
PlanGetInfo info = serializer.Deserialize<PlanGetInfo>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
if (signCaching.TryGet(info.MachineId, out SignCacheInfo cacheTo) && signCaching.TryGet(connection.Id, out SignCacheInfo cacheFrom) && cacheFrom.GroupId == cacheTo.GroupId)
|
||||
{
|
||||
if (signCaching.TryGet(connection.Id, info.MachineId, out SignCacheInfo from, out SignCacheInfo to))
|
||||
{
|
||||
uint requestid = connection.ReceiveRequestWrap.RequestId;
|
||||
await messengerSender.SendReply(new MessageRequestWrap
|
||||
{
|
||||
Connection = cacheTo.Connection,
|
||||
Connection = to.Connection,
|
||||
MessengerId = (ushort)PlanMessengerIds.Get,
|
||||
Payload = connection.ReceiveRequestWrap.Payload
|
||||
}).ContinueWith(async (result) =>
|
||||
@@ -97,12 +97,12 @@ namespace linker.messenger.plan
|
||||
public async Task AddForward(IConnection connection)
|
||||
{
|
||||
PlanAddInfo info = serializer.Deserialize<PlanAddInfo>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
if (signCaching.TryGet(info.MachineId, out SignCacheInfo cacheTo) && signCaching.TryGet(connection.Id, out SignCacheInfo cacheFrom) && cacheFrom.GroupId == cacheTo.GroupId)
|
||||
if (signCaching.TryGet(connection.Id, info.MachineId, out SignCacheInfo from, out SignCacheInfo to))
|
||||
{
|
||||
uint requestid = connection.ReceiveRequestWrap.RequestId;
|
||||
await messengerSender.SendReply(new MessageRequestWrap
|
||||
{
|
||||
Connection = cacheTo.Connection,
|
||||
Connection = to.Connection,
|
||||
MessengerId = (ushort)PlanMessengerIds.Add,
|
||||
Payload = connection.ReceiveRequestWrap.Payload
|
||||
}).ContinueWith(async (result) =>
|
||||
@@ -124,12 +124,12 @@ namespace linker.messenger.plan
|
||||
public async Task RemoveForward(IConnection connection)
|
||||
{
|
||||
PlanRemoveInfo info = serializer.Deserialize<PlanRemoveInfo>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
if (signCaching.TryGet(info.MachineId, out SignCacheInfo cacheTo) && signCaching.TryGet(connection.Id, out SignCacheInfo cacheFrom) && cacheFrom.GroupId == cacheTo.GroupId)
|
||||
if (signCaching.TryGet(connection.Id, info.MachineId, out SignCacheInfo from, out SignCacheInfo to))
|
||||
{
|
||||
uint requestid = connection.ReceiveRequestWrap.RequestId;
|
||||
await messengerSender.SendReply(new MessageRequestWrap
|
||||
{
|
||||
Connection = cacheTo.Connection,
|
||||
Connection = to.Connection,
|
||||
MessengerId = (ushort)PlanMessengerIds.Remove,
|
||||
Payload = connection.ReceiveRequestWrap.Payload
|
||||
}).ContinueWith(async (result) =>
|
||||
|
@@ -16,9 +16,9 @@
|
||||
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
|
||||
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
|
||||
<PackageReleaseNotes>linker messenger plan</PackageReleaseNotes>
|
||||
<Version>1.8.2</Version>
|
||||
<AssemblyVersion>1.8.2</AssemblyVersion>
|
||||
<FileVersion>1.8.2</FileVersion>
|
||||
<Version>1.8.3</Version>
|
||||
<AssemblyVersion>1.8.3</AssemblyVersion>
|
||||
<FileVersion>1.8.3</FileVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
|
@@ -77,126 +77,6 @@ namespace linker.messenger.relay
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
public async Task<bool> AccessCdkey(ApiControllerParamsInfo param)
|
||||
{
|
||||
var resp = await messengerSender.SendReply(new MessageRequestWrap
|
||||
{
|
||||
Connection = signInClientState.Connection,
|
||||
MessengerId = (ushort)RelayMessengerIds.AccessCdkey,
|
||||
Payload = serializer.Serialize(relayClientStore.Server.SecretKey)
|
||||
}).ConfigureAwait(false);
|
||||
return resp.Code == MessageResponeCodes.OK && resp.Data.Span.SequenceEqual(Helper.TrueArray);
|
||||
}
|
||||
|
||||
[Access(AccessValue.RelayCdkey)]
|
||||
public async Task<bool> AddCdkey(ApiControllerParamsInfo param)
|
||||
{
|
||||
RelayServerCdkeyStoreInfo info = param.Content.DeJson<RelayServerCdkeyStoreInfo>();
|
||||
var resp = await messengerSender.SendReply(new MessageRequestWrap
|
||||
{
|
||||
Connection = signInClientState.Connection,
|
||||
MessengerId = (ushort)RelayMessengerIds.AddCdkey,
|
||||
Payload = serializer.Serialize(new RelayServerCdkeyAddInfo
|
||||
{
|
||||
Data = info,
|
||||
SecretKey = relayClientStore.Server.SecretKey
|
||||
})
|
||||
}).ConfigureAwait(false);
|
||||
|
||||
return resp.Code == MessageResponeCodes.OK && resp.Data.Span.SequenceEqual(Helper.TrueArray);
|
||||
}
|
||||
|
||||
[Access(AccessValue.RelayCdkey)]
|
||||
public async Task<bool> DelCdkey(ApiControllerParamsInfo param)
|
||||
{
|
||||
var resp = await messengerSender.SendReply(new MessageRequestWrap
|
||||
{
|
||||
Connection = signInClientState.Connection,
|
||||
MessengerId = (ushort)RelayMessengerIds.DelCdkey,
|
||||
Payload = serializer.Serialize(new RelayServerCdkeyDelInfo
|
||||
{
|
||||
Id = int.Parse(param.Content),
|
||||
UserId = signInClientStore.Server.UserId,
|
||||
SecretKey = relayClientStore.Server.SecretKey
|
||||
})
|
||||
}).ConfigureAwait(false);
|
||||
|
||||
return resp.Code == MessageResponeCodes.OK && resp.Data.Span.SequenceEqual(Helper.TrueArray);
|
||||
}
|
||||
|
||||
[Access(AccessValue.RelayCdkey)]
|
||||
public async Task<RelayServerCdkeyPageResultInfo> PageCdkey(ApiControllerParamsInfo param)
|
||||
{
|
||||
RelayServerCdkeyPageRequestInfo info = param.Content.DeJson<RelayServerCdkeyPageRequestInfo>();
|
||||
info.SecretKey = relayClientStore.Server.SecretKey;
|
||||
var resp = await messengerSender.SendReply(new MessageRequestWrap
|
||||
{
|
||||
Connection = signInClientState.Connection,
|
||||
MessengerId = (ushort)RelayMessengerIds.PageCdkey,
|
||||
Payload = serializer.Serialize(info)
|
||||
}).ConfigureAwait(false);
|
||||
if (resp.Code == MessageResponeCodes.OK)
|
||||
{
|
||||
return serializer.Deserialize<RelayServerCdkeyPageResultInfo>(resp.Data.Span);
|
||||
}
|
||||
|
||||
return new RelayServerCdkeyPageResultInfo();
|
||||
}
|
||||
public async Task<RelayServerCdkeyPageResultInfo> MyCdkey(ApiControllerParamsInfo param)
|
||||
{
|
||||
RelayServerCdkeyPageRequestInfo info = param.Content.DeJson<RelayServerCdkeyPageRequestInfo>();
|
||||
info.SecretKey = relayClientStore.Server.SecretKey;
|
||||
info.UserId = signInClientStore.Server.UserId;
|
||||
var resp = await messengerSender.SendReply(new MessageRequestWrap
|
||||
{
|
||||
Connection = signInClientState.Connection,
|
||||
MessengerId = (ushort)RelayMessengerIds.PageCdkey,
|
||||
Payload = serializer.Serialize(info)
|
||||
}).ConfigureAwait(false);
|
||||
if (resp.Code == MessageResponeCodes.OK)
|
||||
{
|
||||
return serializer.Deserialize<RelayServerCdkeyPageResultInfo>(resp.Data.Span);
|
||||
}
|
||||
|
||||
return new RelayServerCdkeyPageResultInfo();
|
||||
}
|
||||
public async Task<RelayServerCdkeyTestResultInfo> TestCdkey(ApiControllerParamsInfo param)
|
||||
{
|
||||
RelayServerCdkeyImportInfo info = param.Content.DeJson<RelayServerCdkeyImportInfo>();
|
||||
info.SecretKey = relayClientStore.Server.SecretKey;
|
||||
info.UserId = signInClientStore.Server.UserId;
|
||||
var resp = await messengerSender.SendReply(new MessageRequestWrap
|
||||
{
|
||||
Connection = signInClientState.Connection,
|
||||
MessengerId = (ushort)RelayMessengerIds.TestCdkey,
|
||||
Payload = serializer.Serialize(info)
|
||||
}).ConfigureAwait(false);
|
||||
if (resp.Code == MessageResponeCodes.OK)
|
||||
{
|
||||
return serializer.Deserialize<RelayServerCdkeyTestResultInfo>(resp.Data.Span);
|
||||
}
|
||||
|
||||
return new RelayServerCdkeyTestResultInfo();
|
||||
}
|
||||
|
||||
public async Task<string> ImportCdkey(ApiControllerParamsInfo param)
|
||||
{
|
||||
RelayServerCdkeyImportInfo info = param.Content.DeJson<RelayServerCdkeyImportInfo>();
|
||||
info.SecretKey = relayClientStore.Server.SecretKey;
|
||||
info.UserId = signInClientStore.Server.UserId;
|
||||
var resp = await messengerSender.SendReply(new MessageRequestWrap
|
||||
{
|
||||
Connection = signInClientState.Connection,
|
||||
MessengerId = (ushort)RelayMessengerIds.ImportCdkey,
|
||||
Payload = serializer.Serialize(info)
|
||||
}).ConfigureAwait(false);
|
||||
if (resp.Code == MessageResponeCodes.OK)
|
||||
{
|
||||
return serializer.Deserialize<string>(resp.Data.Span);
|
||||
}
|
||||
return "Network";
|
||||
}
|
||||
public async Task<bool> UpdateNode(ApiControllerParamsInfo param)
|
||||
{
|
||||
RelayServerNodeUpdateInfo info = param.Content.DeJson<RelayServerNodeUpdateInfo>();
|
||||
|
@@ -18,9 +18,9 @@
|
||||
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
|
||||
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
|
||||
<PackageReleaseNotes>linker messenger relay</PackageReleaseNotes>
|
||||
<Version>1.8.2</Version>
|
||||
<AssemblyVersion>1.8.2</AssemblyVersion>
|
||||
<FileVersion>1.8.2</FileVersion>
|
||||
<Version>1.8.3</Version>
|
||||
<AssemblyVersion>1.8.3</AssemblyVersion>
|
||||
<FileVersion>1.8.3</FileVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
@@ -43,6 +43,7 @@
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\linker.libs\linker.libs.csproj" />
|
||||
<ProjectReference Include="..\linker.messenger.cdkey\linker.messenger.cdkey.csproj" />
|
||||
<ProjectReference Include="..\linker.messenger.signin\linker.messenger.signin.csproj" />
|
||||
<ProjectReference Include="..\linker.messenger.sync\linker.messenger.sync.csproj" />
|
||||
<ProjectReference Include="..\linker.messenger\linker.messenger.csproj" />
|
||||
|
@@ -5,7 +5,7 @@ using linker.messenger.relay.client;
|
||||
using linker.messenger.relay.server;
|
||||
using linker.messenger.signin;
|
||||
using linker.messenger.relay.server.validator;
|
||||
using System.Reflection;
|
||||
using linker.messenger.cdkey;
|
||||
|
||||
namespace linker.messenger.relay.messenger
|
||||
{
|
||||
@@ -46,18 +46,18 @@ namespace linker.messenger.relay.messenger
|
||||
private readonly RelayServerMasterTransfer relayServerTransfer;
|
||||
private readonly RelayServerValidatorTransfer relayValidatorTransfer;
|
||||
private readonly ISerializer serializer;
|
||||
private readonly IRelayServerCdkeyStore relayServerCdkeyStore;
|
||||
private readonly ICdkeyServerStore cdkeyStore;
|
||||
private readonly IRelayServerStore relayServerStore;
|
||||
private readonly RelayServerNodeTransfer relayServerNodeTransfer;
|
||||
|
||||
public RelayServerMessenger(IMessengerSender messengerSender, SignInServerCaching signCaching, ISerializer serializer, RelayServerMasterTransfer relayServerTransfer, RelayServerValidatorTransfer relayValidatorTransfer, IRelayServerCdkeyStore relayServerCdkeyStore, IRelayServerStore relayServerStore, RelayServerNodeTransfer relayServerNodeTransfer)
|
||||
public RelayServerMessenger(IMessengerSender messengerSender, SignInServerCaching signCaching, ISerializer serializer, RelayServerMasterTransfer relayServerTransfer, RelayServerValidatorTransfer relayValidatorTransfer, ICdkeyServerStore cdkeyStore, IRelayServerStore relayServerStore, RelayServerNodeTransfer relayServerNodeTransfer)
|
||||
{
|
||||
this.messengerSender = messengerSender;
|
||||
this.signCaching = signCaching;
|
||||
this.relayServerTransfer = relayServerTransfer;
|
||||
this.relayValidatorTransfer = relayValidatorTransfer;
|
||||
this.serializer = serializer;
|
||||
this.relayServerCdkeyStore = relayServerCdkeyStore;
|
||||
this.cdkeyStore = cdkeyStore;
|
||||
this.relayServerStore = relayServerStore;
|
||||
this.relayServerNodeTransfer = relayServerNodeTransfer;
|
||||
}
|
||||
@@ -113,25 +113,25 @@ namespace linker.messenger.relay.messenger
|
||||
public async Task RelayAsk(IConnection connection)
|
||||
{
|
||||
RelayInfo info = serializer.Deserialize<RelayInfo>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
if (signCaching.TryGet(connection.Id, out SignCacheInfo cacheFrom) == false || signCaching.TryGet(info.RemoteMachineId, out SignCacheInfo cacheTo) == false || cacheFrom.GroupId != cacheTo.GroupId)
|
||||
if (signCaching.TryGet(connection.Id, info.RemoteMachineId, out SignCacheInfo from, out SignCacheInfo to))
|
||||
{
|
||||
connection.Write(serializer.Serialize(new RelayAskResultInfo { }));
|
||||
return;
|
||||
}
|
||||
|
||||
info.RemoteMachineId = cacheTo.MachineId;
|
||||
info.FromMachineId = cacheFrom.MachineId;
|
||||
info.RemoteMachineName = cacheTo.MachineName;
|
||||
info.FromMachineName = cacheFrom.MachineName;
|
||||
info.RemoteMachineId = to.MachineId;
|
||||
info.FromMachineId = from.MachineId;
|
||||
info.RemoteMachineName = to.MachineName;
|
||||
info.FromMachineName = from.MachineName;
|
||||
|
||||
RelayAskResultInfo result = new RelayAskResultInfo();
|
||||
string error = await relayValidatorTransfer.Validate(info, cacheFrom, cacheTo).ConfigureAwait(false);
|
||||
string error = await relayValidatorTransfer.Validate(info, from, to).ConfigureAwait(false);
|
||||
bool validated = string.IsNullOrWhiteSpace(error);
|
||||
result.Nodes = relayServerTransfer.GetNodes(validated).Select(c => (RelayServerNodeReportInfo)c).ToList();
|
||||
|
||||
if (result.Nodes.Count > 0)
|
||||
{
|
||||
result.FlowingId = relayServerTransfer.AddRelay(cacheFrom.MachineId, cacheFrom.MachineName, cacheTo.MachineId, cacheTo.MachineName, cacheFrom.GroupId, validated, new List<RelayServerCdkeyInfo>());
|
||||
result.FlowingId = relayServerTransfer.AddRelay(from.MachineId, from.MachineName, to.MachineId, to.MachineName, from.GroupId, validated, []);
|
||||
}
|
||||
|
||||
connection.Write(serializer.Serialize(result));
|
||||
@@ -140,29 +140,29 @@ namespace linker.messenger.relay.messenger
|
||||
public async Task RelayAsk170(IConnection connection)
|
||||
{
|
||||
RelayInfo170 info = serializer.Deserialize<RelayInfo170>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
if (signCaching.TryGet(connection.Id, out SignCacheInfo cacheFrom) == false || signCaching.TryGet(info.RemoteMachineId, out SignCacheInfo cacheTo) == false || cacheFrom.GroupId != cacheTo.GroupId)
|
||||
if (signCaching.TryGet(connection.Id, info.RemoteMachineId, out SignCacheInfo from, out SignCacheInfo to))
|
||||
{
|
||||
connection.Write(serializer.Serialize(new RelayAskResultInfo170 { }));
|
||||
return;
|
||||
}
|
||||
|
||||
info.RemoteMachineId = cacheTo.MachineId;
|
||||
info.FromMachineId = cacheFrom.MachineId;
|
||||
info.RemoteMachineName = cacheTo.MachineName;
|
||||
info.FromMachineName = cacheFrom.MachineName;
|
||||
info.RemoteMachineId = to.MachineId;
|
||||
info.FromMachineId = from.MachineId;
|
||||
info.RemoteMachineName = to.MachineName;
|
||||
info.FromMachineName = from.MachineName;
|
||||
|
||||
RelayAskResultInfo170 result = new RelayAskResultInfo170();
|
||||
string error = await relayValidatorTransfer.Validate(info, cacheFrom, cacheTo).ConfigureAwait(false);
|
||||
string error = await relayValidatorTransfer.Validate(info, from, to).ConfigureAwait(false);
|
||||
bool validated = string.IsNullOrWhiteSpace(error);
|
||||
result.Nodes = relayServerTransfer.GetNodes(validated);
|
||||
|
||||
if (result.Nodes.Count > 0)
|
||||
{
|
||||
List<RelayServerCdkeyInfo> cdkeys = info.UseCdkey
|
||||
? (await relayServerCdkeyStore.GetAvailable(info.UserId).ConfigureAwait(false)).Select(c => new RelayServerCdkeyInfo { Bandwidth = c.Bandwidth, Id = c.Id, LastBytes = c.LastBytes }).ToList()
|
||||
: new List<RelayServerCdkeyInfo>();
|
||||
List<CdkeyInfo> cdkeys = info.UseCdkey
|
||||
? (await cdkeyStore.GetAvailable(info.UserId, "Relay").ConfigureAwait(false)).Select(c => new CdkeyInfo { Bandwidth = c.Bandwidth, Id = c.Id, LastBytes = c.LastBytes }).ToList()
|
||||
: [];
|
||||
|
||||
result.FlowingId = relayServerTransfer.AddRelay(cacheFrom.MachineId, cacheFrom.MachineName, cacheTo.MachineId, cacheTo.MachineName, cacheFrom.GroupId, validated, cdkeys);
|
||||
result.FlowingId = relayServerTransfer.AddRelay(from.MachineId, from.MachineName, to.MachineId, to.MachineName, from.GroupId, validated, cdkeys);
|
||||
}
|
||||
|
||||
connection.Write(serializer.Serialize(result));
|
||||
@@ -193,7 +193,7 @@ namespace linker.messenger.relay.messenger
|
||||
}
|
||||
public async Task RelayForward(IConnection connection, RelayInfo info, ushort id, Func<byte[]> data)
|
||||
{
|
||||
if (signCaching.TryGet(connection.Id, out SignCacheInfo cacheFrom) == false || signCaching.TryGet(info.RemoteMachineId, out SignCacheInfo cacheTo) == false || cacheFrom.GroupId != cacheTo.GroupId)
|
||||
if (signCaching.TryGet(connection.Id, info.RemoteMachineId, out SignCacheInfo from, out SignCacheInfo to))
|
||||
{
|
||||
connection.Write(Helper.FalseArray);
|
||||
return;
|
||||
@@ -202,11 +202,11 @@ namespace linker.messenger.relay.messenger
|
||||
//需要验证
|
||||
if (relayServerTransfer.NodeValidate(info.NodeId))
|
||||
{
|
||||
info.RemoteMachineId = cacheTo.MachineId;
|
||||
info.FromMachineId = cacheFrom.MachineId;
|
||||
info.RemoteMachineName = cacheTo.MachineName;
|
||||
info.FromMachineName = cacheFrom.MachineName;
|
||||
string result = await relayValidatorTransfer.Validate(info, cacheFrom, cacheTo).ConfigureAwait(false);
|
||||
info.RemoteMachineId = to.MachineId;
|
||||
info.FromMachineId = from.MachineId;
|
||||
info.RemoteMachineName = to.MachineName;
|
||||
info.FromMachineName = from.MachineName;
|
||||
string result = await relayValidatorTransfer.Validate(info, from, to).ConfigureAwait(false);
|
||||
if (string.IsNullOrWhiteSpace(result) == false)
|
||||
{
|
||||
connection.Write(Helper.FalseArray);
|
||||
@@ -214,16 +214,16 @@ namespace linker.messenger.relay.messenger
|
||||
}
|
||||
}
|
||||
|
||||
info.RemoteMachineId = cacheFrom.MachineId;
|
||||
info.FromMachineId = cacheTo.MachineId;
|
||||
info.RemoteMachineName = cacheFrom.MachineName;
|
||||
info.FromMachineName = cacheTo.MachineName;
|
||||
info.RemoteMachineId = from.MachineId;
|
||||
info.FromMachineId = to.MachineId;
|
||||
info.RemoteMachineName = from.MachineName;
|
||||
info.FromMachineName = to.MachineName;
|
||||
try
|
||||
{
|
||||
uint requiestid = connection.ReceiveRequestWrap.RequestId;
|
||||
_ = messengerSender.SendReply(new MessageRequestWrap
|
||||
{
|
||||
Connection = cacheTo.Connection,
|
||||
Connection = to.Connection,
|
||||
MessengerId = (ushort)RelayMessengerIds.Relay,
|
||||
Payload = data()
|
||||
}).ContinueWith(async (result) =>
|
||||
@@ -326,135 +326,6 @@ namespace linker.messenger.relay.messenger
|
||||
relayServerNodeTransfer.UpdateLastBytes(info);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 检查权限
|
||||
/// </summary>
|
||||
/// <param name="connection"></param>
|
||||
/// <returns></returns>
|
||||
[MessengerId((ushort)RelayMessengerIds.AccessCdkey)]
|
||||
public void AccessCdkey(IConnection connection)
|
||||
{
|
||||
string secretKey = serializer.Deserialize<string>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
connection.Write(relayServerStore.ValidateSecretKey(secretKey) ? Helper.TrueArray : Helper.FalseArray);
|
||||
}
|
||||
/// <summary>
|
||||
/// 添加CDKEY
|
||||
/// </summary>
|
||||
/// <param name="connection"></param>
|
||||
[MessengerId((ushort)RelayMessengerIds.AddCdkey)]
|
||||
public async Task AddCdkey(IConnection connection)
|
||||
{
|
||||
RelayServerCdkeyAddInfo info = serializer.Deserialize<RelayServerCdkeyAddInfo>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
if (signCaching.TryGet(connection.Id, out SignCacheInfo cache) == false)
|
||||
{
|
||||
connection.Write(Helper.FalseArray);
|
||||
return;
|
||||
}
|
||||
if (relayServerStore.ValidateSecretKey(info.SecretKey)==false)
|
||||
{
|
||||
connection.Write(Helper.FalseArray);
|
||||
return;
|
||||
}
|
||||
|
||||
await relayServerCdkeyStore.Add(info.Data).ConfigureAwait(false);
|
||||
connection.Write(Helper.TrueArray);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 删除Cdkey
|
||||
/// </summary>
|
||||
/// <param name="connection"></param>
|
||||
/// <returns></returns>
|
||||
[MessengerId((ushort)RelayMessengerIds.DelCdkey)]
|
||||
public async Task DelCdkey(IConnection connection)
|
||||
{
|
||||
RelayServerCdkeyDelInfo info = serializer.Deserialize<RelayServerCdkeyDelInfo>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
if (signCaching.TryGet(connection.Id, out SignCacheInfo cache) == false)
|
||||
{
|
||||
connection.Write(Helper.FalseArray);
|
||||
return;
|
||||
}
|
||||
if (relayServerStore.ValidateSecretKey(info.SecretKey))
|
||||
{
|
||||
await relayServerCdkeyStore.Del(info.Id).ConfigureAwait(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
await relayServerCdkeyStore.Del(info.Id, info.UserId).ConfigureAwait(false);
|
||||
}
|
||||
connection.Write(Helper.TrueArray);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查询CDKEY
|
||||
/// </summary>
|
||||
/// <param name="connection"></param>
|
||||
/// <returns></returns>
|
||||
[MessengerId((ushort)RelayMessengerIds.PageCdkey)]
|
||||
public async Task PageCdkey(IConnection connection)
|
||||
{
|
||||
RelayServerCdkeyPageRequestInfo info = serializer.Deserialize<RelayServerCdkeyPageRequestInfo>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
if (signCaching.TryGet(connection.Id, out SignCacheInfo cache) == false)
|
||||
{
|
||||
connection.Write(serializer.Serialize(new RelayServerCdkeyPageResultInfo { }));
|
||||
return;
|
||||
}
|
||||
if (relayServerStore.ValidateSecretKey(info.SecretKey)==false && string.IsNullOrWhiteSpace(info.UserId))
|
||||
{
|
||||
connection.Write(serializer.Serialize(new RelayServerCdkeyPageResultInfo { }));
|
||||
return;
|
||||
}
|
||||
|
||||
var page = await relayServerCdkeyStore.Page(info).ConfigureAwait(false);
|
||||
|
||||
connection.Write(serializer.Serialize(page));
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 测试cdkey
|
||||
/// </summary>
|
||||
/// <param name="connection"></param>
|
||||
/// <returns></returns>
|
||||
[MessengerId((ushort)RelayMessengerIds.TestCdkey)]
|
||||
public async Task TestCdkey(IConnection connection)
|
||||
{
|
||||
RelayServerCdkeyImportInfo info = serializer.Deserialize<RelayServerCdkeyImportInfo>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
if (signCaching.TryGet(connection.Id, out SignCacheInfo cache) == false)
|
||||
{
|
||||
connection.Write(serializer.Serialize(new RelayServerCdkeyTestResultInfo { }));
|
||||
return;
|
||||
}
|
||||
if (relayServerStore.ValidateSecretKey(info.SecretKey) == false)
|
||||
{
|
||||
connection.Write(serializer.Serialize(new RelayServerCdkeyTestResultInfo { }));
|
||||
return;
|
||||
}
|
||||
RelayServerCdkeyTestResultInfo test = await relayServerCdkeyStore.Test(info).ConfigureAwait(false);
|
||||
connection.Write(serializer.Serialize(test));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 导入cdkey
|
||||
/// </summary>
|
||||
/// <param name="connection"></param>
|
||||
/// <returns></returns>
|
||||
[MessengerId((ushort)RelayMessengerIds.ImportCdkey)]
|
||||
public async Task ImportCdkey(IConnection connection)
|
||||
{
|
||||
RelayServerCdkeyImportInfo info = serializer.Deserialize<RelayServerCdkeyImportInfo>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
if (signCaching.TryGet(connection.Id, out SignCacheInfo cache) == false)
|
||||
{
|
||||
connection.Write(Helper.FalseArray);
|
||||
return;
|
||||
}
|
||||
string result = await relayServerCdkeyStore.Import(info).ConfigureAwait(false);
|
||||
connection.Write(serializer.Serialize(result));
|
||||
}
|
||||
|
||||
|
||||
[MessengerId((ushort)RelayMessengerIds.CheckKey)]
|
||||
public void CheckKey(IConnection connection)
|
||||
{
|
||||
|
@@ -15,19 +15,11 @@
|
||||
NodeDelay = 2106,
|
||||
NodeDelayForward = 2107,
|
||||
|
||||
AddCdkey = 2108,
|
||||
PageCdkey = 2109,
|
||||
DelCdkey = 2110,
|
||||
AccessCdkey = 2111,
|
||||
|
||||
|
||||
NodeGetCache = 2112,
|
||||
NodeReport = 2113,
|
||||
TrafficReport = 2114,
|
||||
|
||||
TestCdkey = 2115,
|
||||
ImportCdkey = 2116,
|
||||
|
||||
UpdateNode = 2117,
|
||||
UpdateNodeForward = 2118,
|
||||
|
||||
|
@@ -1,6 +1,6 @@
|
||||
using linker.libs;
|
||||
using linker.libs.extends;
|
||||
using linker.libs.timer;
|
||||
using linker.messenger.cdkey;
|
||||
using linker.messenger.relay.messenger;
|
||||
using linker.messenger.relay.server.caching;
|
||||
using System.Collections.Concurrent;
|
||||
@@ -22,11 +22,11 @@ namespace linker.messenger.relay.server
|
||||
private readonly IRelayServerCaching relayCaching;
|
||||
private readonly ISerializer serializer;
|
||||
private readonly IRelayServerMasterStore relayServerMasterStore;
|
||||
private readonly IRelayServerCdkeyStore relayServerCdkeyStore;
|
||||
private readonly ICdkeyServerStore relayServerCdkeyStore;
|
||||
private readonly IMessengerSender messengerSender;
|
||||
|
||||
|
||||
public RelayServerMasterTransfer(IRelayServerCaching relayCaching, ISerializer serializer, IRelayServerMasterStore relayServerMasterStore, IRelayServerCdkeyStore relayServerCdkeyStore, IMessengerSender messengerSender)
|
||||
public RelayServerMasterTransfer(IRelayServerCaching relayCaching, ISerializer serializer, IRelayServerMasterStore relayServerMasterStore, ICdkeyServerStore relayServerCdkeyStore, IMessengerSender messengerSender)
|
||||
{
|
||||
this.relayCaching = relayCaching;
|
||||
this.serializer = serializer;
|
||||
@@ -37,7 +37,7 @@ namespace linker.messenger.relay.server
|
||||
}
|
||||
|
||||
|
||||
public ulong AddRelay(string fromid, string fromName, string toid, string toName, string groupid, bool validated, List<RelayServerCdkeyInfo> cdkeys)
|
||||
public ulong AddRelay(string fromid, string fromName, string toid, string toName, string groupid, bool validated, List<CdkeyInfo> cdkeys)
|
||||
{
|
||||
ulong flowingId = Interlocked.Increment(ref relayFlowingId);
|
||||
|
||||
|
@@ -1,6 +1,7 @@
|
||||
using linker.libs;
|
||||
using linker.libs.extends;
|
||||
using linker.libs.timer;
|
||||
using linker.messenger.cdkey;
|
||||
using linker.messenger.relay.messenger;
|
||||
using linker.tunnel.connection;
|
||||
using System.Buffers;
|
||||
@@ -239,7 +240,7 @@ namespace linker.messenger.relay.server
|
||||
return;
|
||||
}
|
||||
|
||||
RelayServerCdkeyInfo currentCdkey = relayCache.Cache.Cdkey.Where(c => c.LastBytes > 0).OrderByDescending(c => c.Bandwidth).FirstOrDefault();
|
||||
CdkeyInfo currentCdkey = relayCache.Cache.Cdkey.Where(c => c.LastBytes > 0).OrderByDescending(c => c.Bandwidth).FirstOrDefault();
|
||||
//有cdkey,且带宽大于节点带宽,就用cdkey的带宽
|
||||
if (currentCdkey != null && (currentCdkey.Bandwidth == 0 || currentCdkey.Bandwidth >= node.MaxBandwidth || node.MaxGbTotalLastBytes == 0))
|
||||
{
|
||||
@@ -259,11 +260,11 @@ namespace linker.messenger.relay.server
|
||||
{
|
||||
if (dic.Count == 0) return;
|
||||
|
||||
Dictionary<int, RelayServerCdkeyInfo> cdkeys = trafficDict.Values.SelectMany(c => c.Cache.Cdkey).ToDictionary(c => c.Id, c => c);
|
||||
Dictionary<int, CdkeyInfo> cdkeys = trafficDict.Values.SelectMany(c => c.Cache.Cdkey).ToDictionary(c => c.Id, c => c);
|
||||
//更新剩余流量
|
||||
foreach (KeyValuePair<int, long> item in dic)
|
||||
{
|
||||
if (cdkeys.TryGetValue(item.Key, out RelayServerCdkeyInfo info))
|
||||
if (cdkeys.TryGetValue(item.Key, out CdkeyInfo info))
|
||||
{
|
||||
info.LastBytes = item.Value;
|
||||
}
|
||||
|
@@ -7,6 +7,7 @@ using linker.libs;
|
||||
using System;
|
||||
using System.Text;
|
||||
using linker.libs.timer;
|
||||
using linker.messenger.cdkey;
|
||||
|
||||
namespace linker.messenger.relay.server
|
||||
{
|
||||
@@ -207,7 +208,7 @@ namespace linker.messenger.relay.server
|
||||
{
|
||||
await socket.SendAsync(new byte[] { 0 }).ConfigureAwait(false);
|
||||
|
||||
|
||||
|
||||
relayDic.TryAdd(relayCache.FlowId, tcs);
|
||||
Socket answerSocket = await tcs.Task.WaitAsync(TimeSpan.FromMilliseconds(15000)).ConfigureAwait(false);
|
||||
|
||||
@@ -418,7 +419,7 @@ namespace linker.messenger.relay.server
|
||||
public string GroupId { get; set; }
|
||||
public bool Validated { get; set; }
|
||||
|
||||
public List<RelayServerCdkeyInfo> Cdkey { get; set; }
|
||||
public List<CdkeyInfo> Cdkey { get; set; }
|
||||
}
|
||||
public sealed class RelayTrafficCacheInfo
|
||||
{
|
||||
@@ -426,19 +427,7 @@ namespace linker.messenger.relay.server
|
||||
public long SendtCache;
|
||||
public RelaySpeedLimit Limit { get; set; }
|
||||
public RelayCacheInfo Cache { get; set; }
|
||||
public RelayServerCdkeyInfo CurrentCdkey { get; set; }
|
||||
}
|
||||
public partial class RelayServerCdkeyInfo
|
||||
{
|
||||
public int Id { get; set; }
|
||||
/// <summary>
|
||||
/// 带宽Mbps
|
||||
/// </summary>
|
||||
public double Bandwidth { get; set; }
|
||||
/// <summary>
|
||||
/// 剩余流量
|
||||
/// </summary>
|
||||
public long LastBytes { get; set; }
|
||||
public CdkeyInfo CurrentCdkey { get; set; }
|
||||
}
|
||||
|
||||
public sealed partial class RelayMessageInfo
|
||||
|
635
src/linker.messenger.serializer.memorypack/CdkeySerializer.cs
Normal file
635
src/linker.messenger.serializer.memorypack/CdkeySerializer.cs
Normal file
@@ -0,0 +1,635 @@
|
||||
using linker.messenger.cdkey;
|
||||
using MemoryPack;
|
||||
|
||||
namespace linker.messenger.serializer.memorypack
|
||||
{
|
||||
|
||||
[MemoryPackable]
|
||||
public readonly partial struct SerializableCdkeyInfo
|
||||
{
|
||||
[MemoryPackIgnore]
|
||||
public readonly CdkeyInfo info;
|
||||
|
||||
[MemoryPackInclude]
|
||||
int Id => info.Id;
|
||||
|
||||
[MemoryPackInclude]
|
||||
double Bandwidth => info.Bandwidth;
|
||||
[MemoryPackInclude]
|
||||
long LastBytes => info.LastBytes;
|
||||
|
||||
[MemoryPackConstructor]
|
||||
SerializableCdkeyInfo(int id, double bandwidth, long lastBytes)
|
||||
{
|
||||
var info = new CdkeyInfo
|
||||
{
|
||||
Id = id,
|
||||
Bandwidth = bandwidth,
|
||||
LastBytes = lastBytes
|
||||
};
|
||||
this.info = info;
|
||||
}
|
||||
|
||||
public SerializableCdkeyInfo(CdkeyInfo info)
|
||||
{
|
||||
this.info = info;
|
||||
}
|
||||
}
|
||||
public class CdkeyInfoFormatter : MemoryPackFormatter<CdkeyInfo>
|
||||
{
|
||||
public override void Serialize<TBufferWriter>(ref MemoryPackWriter<TBufferWriter> writer, scoped ref CdkeyInfo value)
|
||||
{
|
||||
if (value == null)
|
||||
{
|
||||
writer.WriteNullObjectHeader();
|
||||
return;
|
||||
}
|
||||
|
||||
writer.WritePackable(new SerializableCdkeyInfo(value));
|
||||
}
|
||||
|
||||
public override void Deserialize(ref MemoryPackReader reader, scoped ref CdkeyInfo value)
|
||||
{
|
||||
if (reader.PeekIsNull())
|
||||
{
|
||||
reader.Advance(1); // skip null block
|
||||
value = null;
|
||||
return;
|
||||
}
|
||||
|
||||
var wrapped = reader.ReadPackable<SerializableCdkeyInfo>();
|
||||
value = wrapped.info;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
[MemoryPackable]
|
||||
public readonly partial struct SerializableCdkeyStoreInfo
|
||||
{
|
||||
[MemoryPackIgnore]
|
||||
public readonly CdkeyStoreInfo info;
|
||||
|
||||
[MemoryPackInclude]
|
||||
double Bandwidth => info.Bandwidth;
|
||||
[MemoryPackInclude]
|
||||
long LastBytes => info.LastBytes;
|
||||
|
||||
[MemoryPackInclude]
|
||||
int Id => info.Id;
|
||||
[MemoryPackInclude]
|
||||
string UserId => info.UserId;
|
||||
|
||||
[MemoryPackInclude]
|
||||
DateTime AddTime => info.AddTime;
|
||||
[MemoryPackInclude]
|
||||
DateTime StartTime => info.StartTime;
|
||||
[MemoryPackInclude]
|
||||
DateTime EndTime => info.EndTime;
|
||||
[MemoryPackInclude]
|
||||
DateTime UseTime => info.UseTime;
|
||||
|
||||
[MemoryPackInclude]
|
||||
long MaxBytes => info.MaxBytes;
|
||||
|
||||
[MemoryPackInclude]
|
||||
double CostPrice => info.CostPrice;
|
||||
[MemoryPackInclude]
|
||||
double Price => info.Price;
|
||||
[MemoryPackInclude]
|
||||
double UserPrice => info.UserPrice;
|
||||
[MemoryPackInclude]
|
||||
double PayPrice => info.PayPrice;
|
||||
[MemoryPackInclude]
|
||||
string Remark => info.Remark;
|
||||
[MemoryPackInclude]
|
||||
string OrderId => info.OrderId;
|
||||
[MemoryPackInclude]
|
||||
string Contact => info.Contact;
|
||||
[MemoryPackInclude]
|
||||
bool Deleted => info.Deleted;
|
||||
|
||||
[MemoryPackInclude]
|
||||
string Type => info.Type;
|
||||
|
||||
[MemoryPackConstructor]
|
||||
SerializableCdkeyStoreInfo(double bandwidth, long lastBytes, int id, string userid, DateTime addTime, DateTime startTime, DateTime endTime, DateTime useTime, long maxBytes, double costPrice, double price, double userPrice, double payPrice, string remark, string orderId, string contact, bool deleted, string type)
|
||||
{
|
||||
var info = new CdkeyStoreInfo
|
||||
{
|
||||
Bandwidth = bandwidth,
|
||||
LastBytes = lastBytes,
|
||||
Id = id,
|
||||
UserId = userid,
|
||||
AddTime = addTime,
|
||||
StartTime = startTime,
|
||||
EndTime = endTime,
|
||||
UseTime = useTime,
|
||||
MaxBytes = maxBytes,
|
||||
CostPrice = costPrice,
|
||||
Price = price,
|
||||
UserPrice = userPrice,
|
||||
PayPrice = payPrice,
|
||||
Remark = remark,
|
||||
OrderId = orderId,
|
||||
Contact = contact,
|
||||
Deleted = deleted,
|
||||
Type = type
|
||||
};
|
||||
this.info = info;
|
||||
}
|
||||
|
||||
public SerializableCdkeyStoreInfo(CdkeyStoreInfo info)
|
||||
{
|
||||
this.info = info;
|
||||
}
|
||||
}
|
||||
public class CdkeyStoreInfoFormatter : MemoryPackFormatter<CdkeyStoreInfo>
|
||||
{
|
||||
public override void Serialize<TBufferWriter>(ref MemoryPackWriter<TBufferWriter> writer, scoped ref CdkeyStoreInfo value)
|
||||
{
|
||||
if (value == null)
|
||||
{
|
||||
writer.WriteNullObjectHeader();
|
||||
return;
|
||||
}
|
||||
|
||||
writer.WritePackable(new SerializableCdkeyStoreInfo(value));
|
||||
}
|
||||
|
||||
public override void Deserialize(ref MemoryPackReader reader, scoped ref CdkeyStoreInfo value)
|
||||
{
|
||||
if (reader.PeekIsNull())
|
||||
{
|
||||
reader.Advance(1); // skip null block
|
||||
value = null;
|
||||
return;
|
||||
}
|
||||
|
||||
var wrapped = reader.ReadPackable<SerializableCdkeyStoreInfo>();
|
||||
value = wrapped.info;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
[MemoryPackable]
|
||||
public readonly partial struct SerializableCdkeyAddInfo
|
||||
{
|
||||
[MemoryPackIgnore]
|
||||
public readonly CdkeyAddInfo info;
|
||||
|
||||
[MemoryPackInclude]
|
||||
string SecretKey => info.SecretKey;
|
||||
[MemoryPackInclude, MemoryPackAllowSerialize]
|
||||
CdkeyStoreInfo Data => info.Data;
|
||||
|
||||
[MemoryPackConstructor]
|
||||
SerializableCdkeyAddInfo(string secretKey, CdkeyStoreInfo data)
|
||||
{
|
||||
var info = new CdkeyAddInfo
|
||||
{
|
||||
SecretKey = secretKey,
|
||||
Data = data
|
||||
};
|
||||
this.info = info;
|
||||
}
|
||||
|
||||
public SerializableCdkeyAddInfo(CdkeyAddInfo info)
|
||||
{
|
||||
this.info = info;
|
||||
}
|
||||
}
|
||||
public class CdkeyAddInfoFormatter : MemoryPackFormatter<CdkeyAddInfo>
|
||||
{
|
||||
public override void Serialize<TBufferWriter>(ref MemoryPackWriter<TBufferWriter> writer, scoped ref CdkeyAddInfo value)
|
||||
{
|
||||
if (value == null)
|
||||
{
|
||||
writer.WriteNullObjectHeader();
|
||||
return;
|
||||
}
|
||||
|
||||
writer.WritePackable(new SerializableCdkeyAddInfo(value));
|
||||
}
|
||||
|
||||
public override void Deserialize(ref MemoryPackReader reader, scoped ref CdkeyAddInfo value)
|
||||
{
|
||||
if (reader.PeekIsNull())
|
||||
{
|
||||
reader.Advance(1); // skip null block
|
||||
value = null;
|
||||
return;
|
||||
}
|
||||
|
||||
var wrapped = reader.ReadPackable<SerializableCdkeyAddInfo>();
|
||||
value = wrapped.info;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
[MemoryPackable]
|
||||
public readonly partial struct SerializableCdkeyDelInfo
|
||||
{
|
||||
[MemoryPackIgnore]
|
||||
public readonly CdkeyDelInfo info;
|
||||
|
||||
[MemoryPackInclude]
|
||||
string SecretKey => info.SecretKey;
|
||||
[MemoryPackInclude]
|
||||
string UserId => info.UserId;
|
||||
[MemoryPackInclude]
|
||||
int Id => info.Id;
|
||||
|
||||
[MemoryPackConstructor]
|
||||
SerializableCdkeyDelInfo(string secretKey, string userid, int id)
|
||||
{
|
||||
var info = new CdkeyDelInfo
|
||||
{
|
||||
SecretKey = secretKey,
|
||||
UserId = userid,
|
||||
Id = id
|
||||
};
|
||||
this.info = info;
|
||||
}
|
||||
|
||||
public SerializableCdkeyDelInfo(CdkeyDelInfo info)
|
||||
{
|
||||
this.info = info;
|
||||
}
|
||||
}
|
||||
public class CdkeyDelInfoFormatter : MemoryPackFormatter<CdkeyDelInfo>
|
||||
{
|
||||
public override void Serialize<TBufferWriter>(ref MemoryPackWriter<TBufferWriter> writer, scoped ref CdkeyDelInfo value)
|
||||
{
|
||||
if (value == null)
|
||||
{
|
||||
writer.WriteNullObjectHeader();
|
||||
return;
|
||||
}
|
||||
|
||||
writer.WritePackable(new SerializableCdkeyDelInfo(value));
|
||||
}
|
||||
|
||||
public override void Deserialize(ref MemoryPackReader reader, scoped ref CdkeyDelInfo value)
|
||||
{
|
||||
if (reader.PeekIsNull())
|
||||
{
|
||||
reader.Advance(1); // skip null block
|
||||
value = null;
|
||||
return;
|
||||
}
|
||||
|
||||
var wrapped = reader.ReadPackable<SerializableCdkeyDelInfo>();
|
||||
value = wrapped.info;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
[MemoryPackable]
|
||||
public readonly partial struct SerializableCdkeyPageRequestInfo
|
||||
{
|
||||
[MemoryPackIgnore]
|
||||
public readonly CdkeyPageRequestInfo info;
|
||||
|
||||
[MemoryPackInclude]
|
||||
int Page => info.Page;
|
||||
[MemoryPackInclude]
|
||||
int Size => info.Size;
|
||||
[MemoryPackInclude]
|
||||
string Order => info.Order;
|
||||
[MemoryPackInclude]
|
||||
string Sort => info.Sort;
|
||||
|
||||
[MemoryPackInclude]
|
||||
string UserId => info.UserId;
|
||||
[MemoryPackInclude]
|
||||
string Remark => info.Remark;
|
||||
[MemoryPackInclude]
|
||||
string OrderId => info.OrderId;
|
||||
[MemoryPackInclude]
|
||||
string Contact => info.Contact;
|
||||
[MemoryPackInclude]
|
||||
string SecretKey => info.SecretKey;
|
||||
[MemoryPackInclude]
|
||||
CdkeyPageRequestFlag Flag => info.Flag;
|
||||
|
||||
[MemoryPackInclude]
|
||||
string Type => info.Type;
|
||||
|
||||
[MemoryPackConstructor]
|
||||
SerializableCdkeyPageRequestInfo(int page, int size, string order, string sort, string userid, string remark, string orderid, string contact, string secretKey, CdkeyPageRequestFlag flag, string type)
|
||||
{
|
||||
var info = new CdkeyPageRequestInfo
|
||||
{
|
||||
Sort = sort,
|
||||
Order = order,
|
||||
Size = size,
|
||||
Page = page,
|
||||
UserId = userid,
|
||||
Remark = remark,
|
||||
OrderId = orderid,
|
||||
Contact = contact,
|
||||
SecretKey = secretKey,
|
||||
Flag = flag,
|
||||
Type = type
|
||||
};
|
||||
this.info = info;
|
||||
}
|
||||
|
||||
public SerializableCdkeyPageRequestInfo(CdkeyPageRequestInfo info)
|
||||
{
|
||||
this.info = info;
|
||||
}
|
||||
}
|
||||
public class CdkeyPageRequestInfoFormatter : MemoryPackFormatter<CdkeyPageRequestInfo>
|
||||
{
|
||||
public override void Serialize<TBufferWriter>(ref MemoryPackWriter<TBufferWriter> writer, scoped ref CdkeyPageRequestInfo value)
|
||||
{
|
||||
if (value == null)
|
||||
{
|
||||
writer.WriteNullObjectHeader();
|
||||
return;
|
||||
}
|
||||
|
||||
writer.WritePackable(new SerializableCdkeyPageRequestInfo(value));
|
||||
}
|
||||
|
||||
public override void Deserialize(ref MemoryPackReader reader, scoped ref CdkeyPageRequestInfo value)
|
||||
{
|
||||
if (reader.PeekIsNull())
|
||||
{
|
||||
reader.Advance(1); // skip null block
|
||||
value = null;
|
||||
return;
|
||||
}
|
||||
|
||||
var wrapped = reader.ReadPackable<SerializableCdkeyPageRequestInfo>();
|
||||
value = wrapped.info;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
[MemoryPackable]
|
||||
public readonly partial struct SerializableCdkeyPageResultInfo
|
||||
{
|
||||
[MemoryPackIgnore]
|
||||
public readonly CdkeyPageResultInfo info;
|
||||
|
||||
[MemoryPackInclude]
|
||||
int Page => info.Page;
|
||||
[MemoryPackInclude]
|
||||
int Size => info.Size;
|
||||
[MemoryPackInclude]
|
||||
int Count => info.Count;
|
||||
[MemoryPackInclude]
|
||||
List<CdkeyStoreInfo> List => info.List;
|
||||
|
||||
[MemoryPackConstructor]
|
||||
SerializableCdkeyPageResultInfo(int page, int size, int count, List<CdkeyStoreInfo> list)
|
||||
{
|
||||
var info = new CdkeyPageResultInfo
|
||||
{
|
||||
Count = count,
|
||||
List = list,
|
||||
Size = size,
|
||||
Page = page
|
||||
};
|
||||
this.info = info;
|
||||
}
|
||||
|
||||
public SerializableCdkeyPageResultInfo(CdkeyPageResultInfo info)
|
||||
{
|
||||
this.info = info;
|
||||
}
|
||||
}
|
||||
public class CdkeyPageResultInfoFormatter : MemoryPackFormatter<CdkeyPageResultInfo>
|
||||
{
|
||||
public override void Serialize<TBufferWriter>(ref MemoryPackWriter<TBufferWriter> writer, scoped ref CdkeyPageResultInfo value)
|
||||
{
|
||||
if (value == null)
|
||||
{
|
||||
writer.WriteNullObjectHeader();
|
||||
return;
|
||||
}
|
||||
|
||||
writer.WritePackable(new SerializableCdkeyPageResultInfo(value));
|
||||
}
|
||||
|
||||
public override void Deserialize(ref MemoryPackReader reader, scoped ref CdkeyPageResultInfo value)
|
||||
{
|
||||
if (reader.PeekIsNull())
|
||||
{
|
||||
reader.Advance(1); // skip null block
|
||||
value = null;
|
||||
return;
|
||||
}
|
||||
|
||||
var wrapped = reader.ReadPackable<SerializableCdkeyPageResultInfo>();
|
||||
value = wrapped.info;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
[MemoryPackable]
|
||||
public readonly partial struct SerializableCdkeyImportInfo
|
||||
{
|
||||
[MemoryPackIgnore]
|
||||
public readonly CdkeyImportInfo info;
|
||||
|
||||
[MemoryPackInclude]
|
||||
string SecretKey => info.SecretKey;
|
||||
[MemoryPackInclude]
|
||||
string UserId => info.UserId;
|
||||
[MemoryPackInclude]
|
||||
string Base64 => info.Base64;
|
||||
|
||||
[MemoryPackConstructor]
|
||||
SerializableCdkeyImportInfo(string secretKey, string userid, string base64)
|
||||
{
|
||||
var info = new CdkeyImportInfo
|
||||
{
|
||||
SecretKey = secretKey,
|
||||
UserId = userid,
|
||||
Base64 = base64
|
||||
};
|
||||
this.info = info;
|
||||
}
|
||||
|
||||
public SerializableCdkeyImportInfo(CdkeyImportInfo info)
|
||||
{
|
||||
this.info = info;
|
||||
}
|
||||
}
|
||||
public class CdkeyImportInfoFormatter : MemoryPackFormatter<CdkeyImportInfo>
|
||||
{
|
||||
public override void Serialize<TBufferWriter>(ref MemoryPackWriter<TBufferWriter> writer, scoped ref CdkeyImportInfo value)
|
||||
{
|
||||
if (value == null)
|
||||
{
|
||||
writer.WriteNullObjectHeader();
|
||||
return;
|
||||
}
|
||||
|
||||
writer.WritePackable(new SerializableCdkeyImportInfo(value));
|
||||
}
|
||||
|
||||
public override void Deserialize(ref MemoryPackReader reader, scoped ref CdkeyImportInfo value)
|
||||
{
|
||||
if (reader.PeekIsNull())
|
||||
{
|
||||
reader.Advance(1); // skip null block
|
||||
value = null;
|
||||
return;
|
||||
}
|
||||
|
||||
var wrapped = reader.ReadPackable<SerializableCdkeyImportInfo>();
|
||||
value = wrapped.info;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
[MemoryPackable]
|
||||
public readonly partial struct SerializableCdkeyTestResultInfo
|
||||
{
|
||||
[MemoryPackIgnore]
|
||||
public readonly CdkeyTestResultInfo info;
|
||||
|
||||
[MemoryPackInclude, MemoryPackAllowSerialize]
|
||||
CdkeyOrderInfo Order => info.Order;
|
||||
[MemoryPackInclude]
|
||||
string Cdkey => info.Cdkey;
|
||||
[MemoryPackInclude]
|
||||
List<string> Field => info.Field;
|
||||
|
||||
[MemoryPackConstructor]
|
||||
SerializableCdkeyTestResultInfo(CdkeyOrderInfo order, string cdkey, List<string> field)
|
||||
{
|
||||
var info = new CdkeyTestResultInfo
|
||||
{
|
||||
Order = order,
|
||||
Cdkey = cdkey,
|
||||
Field = field
|
||||
};
|
||||
this.info = info;
|
||||
}
|
||||
|
||||
public SerializableCdkeyTestResultInfo(CdkeyTestResultInfo info)
|
||||
{
|
||||
this.info = info;
|
||||
}
|
||||
}
|
||||
public class CdkeyTestResultInfoFormatter : MemoryPackFormatter<CdkeyTestResultInfo>
|
||||
{
|
||||
public override void Serialize<TBufferWriter>(ref MemoryPackWriter<TBufferWriter> writer, scoped ref CdkeyTestResultInfo value)
|
||||
{
|
||||
if (value == null)
|
||||
{
|
||||
writer.WriteNullObjectHeader();
|
||||
return;
|
||||
}
|
||||
|
||||
writer.WritePackable(new SerializableCdkeyTestResultInfo(value));
|
||||
}
|
||||
|
||||
public override void Deserialize(ref MemoryPackReader reader, scoped ref CdkeyTestResultInfo value)
|
||||
{
|
||||
if (reader.PeekIsNull())
|
||||
{
|
||||
reader.Advance(1); // skip null block
|
||||
value = null;
|
||||
return;
|
||||
}
|
||||
|
||||
var wrapped = reader.ReadPackable<SerializableCdkeyTestResultInfo>();
|
||||
value = wrapped.info;
|
||||
}
|
||||
}
|
||||
|
||||
[MemoryPackable]
|
||||
public readonly partial struct SerializableCdkeyOrderInfo
|
||||
{
|
||||
[MemoryPackIgnore]
|
||||
public readonly CdkeyOrderInfo info;
|
||||
|
||||
[MemoryPackInclude]
|
||||
int GB => info.GB;
|
||||
[MemoryPackInclude]
|
||||
int Speed => info.Speed;
|
||||
[MemoryPackInclude]
|
||||
string Time => info.Time;
|
||||
[MemoryPackInclude]
|
||||
string WidgetUserId => info.WidgetUserId;
|
||||
[MemoryPackInclude]
|
||||
string OrderId => info.OrderId;
|
||||
[MemoryPackInclude]
|
||||
string Contact => info.Contact;
|
||||
|
||||
[MemoryPackInclude]
|
||||
double CostPrice => info.CostPrice;
|
||||
[MemoryPackInclude]
|
||||
double Price => info.Price;
|
||||
[MemoryPackInclude]
|
||||
double UserPrice => info.UserPrice;
|
||||
[MemoryPackInclude]
|
||||
double PayPrice => info.PayPrice;
|
||||
[MemoryPackInclude]
|
||||
int Count => info.Count;
|
||||
[MemoryPackInclude]
|
||||
string Type => info.Type;
|
||||
|
||||
|
||||
[MemoryPackConstructor]
|
||||
SerializableCdkeyOrderInfo(int gb, int speed, string time, string widgetUserId, string orderId, string contact, double costPrice, double price, double userPrice, double payPrice, int count, string type)
|
||||
{
|
||||
var info = new CdkeyOrderInfo
|
||||
{
|
||||
GB = gb,
|
||||
Speed = speed,
|
||||
Time = time,
|
||||
WidgetUserId = widgetUserId,
|
||||
OrderId = orderId,
|
||||
Contact = contact,
|
||||
CostPrice = costPrice,
|
||||
Price = price,
|
||||
UserPrice = userPrice,
|
||||
PayPrice = payPrice,
|
||||
Count = count,
|
||||
Type = type
|
||||
};
|
||||
this.info = info;
|
||||
}
|
||||
|
||||
public SerializableCdkeyOrderInfo(CdkeyOrderInfo info)
|
||||
{
|
||||
this.info = info;
|
||||
}
|
||||
}
|
||||
public class CdkeyOrderInfoFormatter : MemoryPackFormatter<CdkeyOrderInfo>
|
||||
{
|
||||
public override void Serialize<TBufferWriter>(ref MemoryPackWriter<TBufferWriter> writer, scoped ref CdkeyOrderInfo value)
|
||||
{
|
||||
if (value == null)
|
||||
{
|
||||
writer.WriteNullObjectHeader();
|
||||
return;
|
||||
}
|
||||
|
||||
writer.WritePackable(new SerializableCdkeyOrderInfo(value));
|
||||
}
|
||||
|
||||
public override void Deserialize(ref MemoryPackReader reader, scoped ref CdkeyOrderInfo value)
|
||||
{
|
||||
if (reader.PeekIsNull())
|
||||
{
|
||||
reader.Advance(1); // skip null block
|
||||
value = null;
|
||||
return;
|
||||
}
|
||||
|
||||
var wrapped = reader.ReadPackable<SerializableCdkeyOrderInfo>();
|
||||
value = wrapped.info;
|
||||
}
|
||||
}
|
||||
}
|
@@ -66,20 +66,21 @@ namespace linker.messenger.serializer.memorypack
|
||||
MemoryPackFormatterProvider.Register(new RelayAskResultInfo170Formatter());
|
||||
MemoryPackFormatterProvider.Register(new RelayCacheInfoFormatter());
|
||||
MemoryPackFormatterProvider.Register(new RelayMessageInfoFormatter());
|
||||
MemoryPackFormatterProvider.Register(new RelayServerCdkeyInfoFormatter());
|
||||
MemoryPackFormatterProvider.Register(new RelayServerCdkeyStoreInfoFormatter());
|
||||
MemoryPackFormatterProvider.Register(new RelayServerCdkeyPageRequestInfoFormatter());
|
||||
MemoryPackFormatterProvider.Register(new RelayServerCdkeyPageResultInfoFormatter());
|
||||
MemoryPackFormatterProvider.Register(new RelayServerCdkeyAddInfoFormatter());
|
||||
MemoryPackFormatterProvider.Register(new RelayServerCdkeyDelInfoFormatter());
|
||||
|
||||
MemoryPackFormatterProvider.Register(new RelayTrafficUpdateInfoFormatter());
|
||||
MemoryPackFormatterProvider.Register(new RelayServerCdkeyImportInfoFormatter());
|
||||
MemoryPackFormatterProvider.Register(new RelayServerCdkeyTestResultInfoFormatter());
|
||||
MemoryPackFormatterProvider.Register(new RelayServerCdkeyOrderInfoFormatter());
|
||||
|
||||
MemoryPackFormatterProvider.Register(new RelayServerNodeUpdateInfoFormatter());
|
||||
MemoryPackFormatterProvider.Register(new RelayServerNodeUpdateWrapInfoFormatter());
|
||||
|
||||
MemoryPackFormatterProvider.Register(new CdkeyInfoFormatter());
|
||||
MemoryPackFormatterProvider.Register(new CdkeyStoreInfoFormatter());
|
||||
MemoryPackFormatterProvider.Register(new CdkeyPageRequestInfoFormatter());
|
||||
MemoryPackFormatterProvider.Register(new CdkeyPageResultInfoFormatter());
|
||||
MemoryPackFormatterProvider.Register(new CdkeyAddInfoFormatter());
|
||||
MemoryPackFormatterProvider.Register(new CdkeyDelInfoFormatter());
|
||||
MemoryPackFormatterProvider.Register(new CdkeyImportInfoFormatter());
|
||||
MemoryPackFormatterProvider.Register(new CdkeyTestResultInfoFormatter());
|
||||
MemoryPackFormatterProvider.Register(new CdkeyOrderInfoFormatter());
|
||||
|
||||
|
||||
MemoryPackFormatterProvider.Register(new AccessUpdateInfoFormatter());
|
||||
MemoryPackFormatterProvider.Register(new AccessBitsUpdateInfoFormatter());
|
||||
|
@@ -1,9 +1,9 @@
|
||||
using linker.messenger.relay.client.transport;
|
||||
using linker.messenger.cdkey;
|
||||
using linker.messenger.relay.client.transport;
|
||||
using linker.messenger.relay.server;
|
||||
using linker.tunnel.connection;
|
||||
using MemoryPack;
|
||||
using System.Net;
|
||||
using System.Xml.Linq;
|
||||
|
||||
namespace linker.messenger.serializer.memorypack
|
||||
{
|
||||
@@ -761,10 +761,10 @@ namespace linker.messenger.serializer.memorypack
|
||||
|
||||
|
||||
[MemoryPackInclude, MemoryPackAllowSerialize]
|
||||
List<RelayServerCdkeyInfo> Cdkey => info.Cdkey;
|
||||
List<CdkeyInfo> Cdkey => info.Cdkey;
|
||||
|
||||
[MemoryPackConstructor]
|
||||
SerializableRelayCacheInfo(ulong flowId, string fromId, string fromName, string toId, string toName, string groupId, bool validated, List<RelayServerCdkeyInfo> cdkey)
|
||||
SerializableRelayCacheInfo(ulong flowId, string fromId, string fromName, string toId, string toName, string groupId, bool validated, List<CdkeyInfo> cdkey)
|
||||
{
|
||||
var info = new RelayCacheInfo
|
||||
{
|
||||
@@ -878,424 +878,6 @@ namespace linker.messenger.serializer.memorypack
|
||||
}
|
||||
}
|
||||
|
||||
[MemoryPackable]
|
||||
public readonly partial struct SerializableRelayServerCdkeyInfo
|
||||
{
|
||||
[MemoryPackIgnore]
|
||||
public readonly RelayServerCdkeyInfo info;
|
||||
|
||||
[MemoryPackInclude]
|
||||
int Id => info.Id;
|
||||
|
||||
[MemoryPackInclude]
|
||||
double Bandwidth => info.Bandwidth;
|
||||
[MemoryPackInclude]
|
||||
long LastBytes => info.LastBytes;
|
||||
|
||||
[MemoryPackConstructor]
|
||||
SerializableRelayServerCdkeyInfo(int id, double bandwidth, long lastBytes)
|
||||
{
|
||||
var info = new RelayServerCdkeyInfo
|
||||
{
|
||||
Id = id,
|
||||
Bandwidth = bandwidth,
|
||||
LastBytes = lastBytes
|
||||
};
|
||||
this.info = info;
|
||||
}
|
||||
|
||||
public SerializableRelayServerCdkeyInfo(RelayServerCdkeyInfo info)
|
||||
{
|
||||
this.info = info;
|
||||
}
|
||||
}
|
||||
public class RelayServerCdkeyInfoFormatter : MemoryPackFormatter<RelayServerCdkeyInfo>
|
||||
{
|
||||
public override void Serialize<TBufferWriter>(ref MemoryPackWriter<TBufferWriter> writer, scoped ref RelayServerCdkeyInfo value)
|
||||
{
|
||||
if (value == null)
|
||||
{
|
||||
writer.WriteNullObjectHeader();
|
||||
return;
|
||||
}
|
||||
|
||||
writer.WritePackable(new SerializableRelayServerCdkeyInfo(value));
|
||||
}
|
||||
|
||||
public override void Deserialize(ref MemoryPackReader reader, scoped ref RelayServerCdkeyInfo value)
|
||||
{
|
||||
if (reader.PeekIsNull())
|
||||
{
|
||||
reader.Advance(1); // skip null block
|
||||
value = null;
|
||||
return;
|
||||
}
|
||||
|
||||
var wrapped = reader.ReadPackable<SerializableRelayServerCdkeyInfo>();
|
||||
value = wrapped.info;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
[MemoryPackable]
|
||||
public readonly partial struct SerializableRelayServerCdkeyStoreInfo
|
||||
{
|
||||
[MemoryPackIgnore]
|
||||
public readonly RelayServerCdkeyStoreInfo info;
|
||||
|
||||
[MemoryPackInclude]
|
||||
double Bandwidth => info.Bandwidth;
|
||||
[MemoryPackInclude]
|
||||
long LastBytes => info.LastBytes;
|
||||
|
||||
[MemoryPackInclude]
|
||||
int Id => info.Id;
|
||||
[MemoryPackInclude]
|
||||
string UserId => info.UserId;
|
||||
|
||||
[MemoryPackInclude]
|
||||
DateTime AddTime => info.AddTime;
|
||||
[MemoryPackInclude]
|
||||
DateTime StartTime => info.StartTime;
|
||||
[MemoryPackInclude]
|
||||
DateTime EndTime => info.EndTime;
|
||||
[MemoryPackInclude]
|
||||
DateTime UseTime => info.UseTime;
|
||||
|
||||
[MemoryPackInclude]
|
||||
long MaxBytes => info.MaxBytes;
|
||||
|
||||
[MemoryPackInclude]
|
||||
double CostPrice => info.CostPrice;
|
||||
[MemoryPackInclude]
|
||||
double Price => info.Price;
|
||||
[MemoryPackInclude]
|
||||
double UserPrice => info.UserPrice;
|
||||
[MemoryPackInclude]
|
||||
double PayPrice => info.PayPrice;
|
||||
[MemoryPackInclude]
|
||||
string Remark => info.Remark;
|
||||
[MemoryPackInclude]
|
||||
string OrderId => info.OrderId;
|
||||
[MemoryPackInclude]
|
||||
string Contact => info.Contact;
|
||||
[MemoryPackInclude]
|
||||
bool Deleted => info.Deleted;
|
||||
|
||||
[MemoryPackConstructor]
|
||||
SerializableRelayServerCdkeyStoreInfo(double bandwidth, long lastBytes, int id, string userid, DateTime addTime, DateTime startTime, DateTime endTime, DateTime useTime, long maxBytes, double costPrice, double price, double userPrice, double payPrice, string remark, string orderId, string contact, bool deleted)
|
||||
{
|
||||
var info = new RelayServerCdkeyStoreInfo
|
||||
{
|
||||
Bandwidth = bandwidth,
|
||||
LastBytes = lastBytes,
|
||||
Id = id,
|
||||
UserId = userid,
|
||||
AddTime = addTime,
|
||||
StartTime = startTime,
|
||||
EndTime = endTime,
|
||||
UseTime = useTime,
|
||||
MaxBytes = maxBytes,
|
||||
CostPrice = costPrice,
|
||||
Price = price,
|
||||
UserPrice = userPrice,
|
||||
PayPrice = payPrice,
|
||||
Remark = remark,
|
||||
OrderId = orderId,
|
||||
Contact = contact,
|
||||
Deleted = deleted
|
||||
};
|
||||
this.info = info;
|
||||
}
|
||||
|
||||
public SerializableRelayServerCdkeyStoreInfo(RelayServerCdkeyStoreInfo info)
|
||||
{
|
||||
this.info = info;
|
||||
}
|
||||
}
|
||||
public class RelayServerCdkeyStoreInfoFormatter : MemoryPackFormatter<RelayServerCdkeyStoreInfo>
|
||||
{
|
||||
public override void Serialize<TBufferWriter>(ref MemoryPackWriter<TBufferWriter> writer, scoped ref RelayServerCdkeyStoreInfo value)
|
||||
{
|
||||
if (value == null)
|
||||
{
|
||||
writer.WriteNullObjectHeader();
|
||||
return;
|
||||
}
|
||||
|
||||
writer.WritePackable(new SerializableRelayServerCdkeyStoreInfo(value));
|
||||
}
|
||||
|
||||
public override void Deserialize(ref MemoryPackReader reader, scoped ref RelayServerCdkeyStoreInfo value)
|
||||
{
|
||||
if (reader.PeekIsNull())
|
||||
{
|
||||
reader.Advance(1); // skip null block
|
||||
value = null;
|
||||
return;
|
||||
}
|
||||
|
||||
var wrapped = reader.ReadPackable<SerializableRelayServerCdkeyStoreInfo>();
|
||||
value = wrapped.info;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
[MemoryPackable]
|
||||
public readonly partial struct SerializableRelayServerCdkeyAddInfo
|
||||
{
|
||||
[MemoryPackIgnore]
|
||||
public readonly RelayServerCdkeyAddInfo info;
|
||||
|
||||
[MemoryPackInclude]
|
||||
string SecretKey => info.SecretKey;
|
||||
[MemoryPackInclude, MemoryPackAllowSerialize]
|
||||
RelayServerCdkeyStoreInfo Data => info.Data;
|
||||
|
||||
[MemoryPackConstructor]
|
||||
SerializableRelayServerCdkeyAddInfo(string secretKey, RelayServerCdkeyStoreInfo data)
|
||||
{
|
||||
var info = new RelayServerCdkeyAddInfo
|
||||
{
|
||||
SecretKey = secretKey,
|
||||
Data = data
|
||||
};
|
||||
this.info = info;
|
||||
}
|
||||
|
||||
public SerializableRelayServerCdkeyAddInfo(RelayServerCdkeyAddInfo info)
|
||||
{
|
||||
this.info = info;
|
||||
}
|
||||
}
|
||||
public class RelayServerCdkeyAddInfoFormatter : MemoryPackFormatter<RelayServerCdkeyAddInfo>
|
||||
{
|
||||
public override void Serialize<TBufferWriter>(ref MemoryPackWriter<TBufferWriter> writer, scoped ref RelayServerCdkeyAddInfo value)
|
||||
{
|
||||
if (value == null)
|
||||
{
|
||||
writer.WriteNullObjectHeader();
|
||||
return;
|
||||
}
|
||||
|
||||
writer.WritePackable(new SerializableRelayServerCdkeyAddInfo(value));
|
||||
}
|
||||
|
||||
public override void Deserialize(ref MemoryPackReader reader, scoped ref RelayServerCdkeyAddInfo value)
|
||||
{
|
||||
if (reader.PeekIsNull())
|
||||
{
|
||||
reader.Advance(1); // skip null block
|
||||
value = null;
|
||||
return;
|
||||
}
|
||||
|
||||
var wrapped = reader.ReadPackable<SerializableRelayServerCdkeyAddInfo>();
|
||||
value = wrapped.info;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
[MemoryPackable]
|
||||
public readonly partial struct SerializableRelayServerCdkeyDelInfo
|
||||
{
|
||||
[MemoryPackIgnore]
|
||||
public readonly RelayServerCdkeyDelInfo info;
|
||||
|
||||
[MemoryPackInclude]
|
||||
string SecretKey => info.SecretKey;
|
||||
[MemoryPackInclude]
|
||||
string UserId => info.UserId;
|
||||
[MemoryPackInclude]
|
||||
int Id => info.Id;
|
||||
|
||||
[MemoryPackConstructor]
|
||||
SerializableRelayServerCdkeyDelInfo(string secretKey, string userid, int id)
|
||||
{
|
||||
var info = new RelayServerCdkeyDelInfo
|
||||
{
|
||||
SecretKey = secretKey,
|
||||
UserId = userid,
|
||||
Id = id
|
||||
};
|
||||
this.info = info;
|
||||
}
|
||||
|
||||
public SerializableRelayServerCdkeyDelInfo(RelayServerCdkeyDelInfo info)
|
||||
{
|
||||
this.info = info;
|
||||
}
|
||||
}
|
||||
public class RelayServerCdkeyDelInfoFormatter : MemoryPackFormatter<RelayServerCdkeyDelInfo>
|
||||
{
|
||||
public override void Serialize<TBufferWriter>(ref MemoryPackWriter<TBufferWriter> writer, scoped ref RelayServerCdkeyDelInfo value)
|
||||
{
|
||||
if (value == null)
|
||||
{
|
||||
writer.WriteNullObjectHeader();
|
||||
return;
|
||||
}
|
||||
|
||||
writer.WritePackable(new SerializableRelayServerCdkeyDelInfo(value));
|
||||
}
|
||||
|
||||
public override void Deserialize(ref MemoryPackReader reader, scoped ref RelayServerCdkeyDelInfo value)
|
||||
{
|
||||
if (reader.PeekIsNull())
|
||||
{
|
||||
reader.Advance(1); // skip null block
|
||||
value = null;
|
||||
return;
|
||||
}
|
||||
|
||||
var wrapped = reader.ReadPackable<SerializableRelayServerCdkeyDelInfo>();
|
||||
value = wrapped.info;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
[MemoryPackable]
|
||||
public readonly partial struct SerializableRelayServerCdkeyPageRequestInfo
|
||||
{
|
||||
[MemoryPackIgnore]
|
||||
public readonly RelayServerCdkeyPageRequestInfo info;
|
||||
|
||||
[MemoryPackInclude]
|
||||
int Page => info.Page;
|
||||
[MemoryPackInclude]
|
||||
int Size => info.Size;
|
||||
[MemoryPackInclude]
|
||||
string Order => info.Order;
|
||||
[MemoryPackInclude]
|
||||
string Sort => info.Sort;
|
||||
|
||||
[MemoryPackInclude]
|
||||
string UserId => info.UserId;
|
||||
[MemoryPackInclude]
|
||||
string Remark => info.Remark;
|
||||
[MemoryPackInclude]
|
||||
string OrderId => info.OrderId;
|
||||
[MemoryPackInclude]
|
||||
string Contact => info.Contact;
|
||||
[MemoryPackInclude]
|
||||
string SecretKey => info.SecretKey;
|
||||
[MemoryPackInclude]
|
||||
RelayServerCdkeyPageRequestFlag Flag => info.Flag;
|
||||
|
||||
[MemoryPackConstructor]
|
||||
SerializableRelayServerCdkeyPageRequestInfo(int page, int size, string order, string sort, string userid, string remark, string orderid, string contact, string secretKey, RelayServerCdkeyPageRequestFlag flag)
|
||||
{
|
||||
var info = new RelayServerCdkeyPageRequestInfo
|
||||
{
|
||||
Sort = sort,
|
||||
Order = order,
|
||||
Size = size,
|
||||
Page = page,
|
||||
UserId = userid,
|
||||
Remark = remark,
|
||||
OrderId = orderid,
|
||||
Contact = contact,
|
||||
SecretKey = secretKey,
|
||||
Flag = flag
|
||||
};
|
||||
this.info = info;
|
||||
}
|
||||
|
||||
public SerializableRelayServerCdkeyPageRequestInfo(RelayServerCdkeyPageRequestInfo info)
|
||||
{
|
||||
this.info = info;
|
||||
}
|
||||
}
|
||||
public class RelayServerCdkeyPageRequestInfoFormatter : MemoryPackFormatter<RelayServerCdkeyPageRequestInfo>
|
||||
{
|
||||
public override void Serialize<TBufferWriter>(ref MemoryPackWriter<TBufferWriter> writer, scoped ref RelayServerCdkeyPageRequestInfo value)
|
||||
{
|
||||
if (value == null)
|
||||
{
|
||||
writer.WriteNullObjectHeader();
|
||||
return;
|
||||
}
|
||||
|
||||
writer.WritePackable(new SerializableRelayServerCdkeyPageRequestInfo(value));
|
||||
}
|
||||
|
||||
public override void Deserialize(ref MemoryPackReader reader, scoped ref RelayServerCdkeyPageRequestInfo value)
|
||||
{
|
||||
if (reader.PeekIsNull())
|
||||
{
|
||||
reader.Advance(1); // skip null block
|
||||
value = null;
|
||||
return;
|
||||
}
|
||||
|
||||
var wrapped = reader.ReadPackable<SerializableRelayServerCdkeyPageRequestInfo>();
|
||||
value = wrapped.info;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
[MemoryPackable]
|
||||
public readonly partial struct SerializableRelayServerCdkeyPageResultInfo
|
||||
{
|
||||
[MemoryPackIgnore]
|
||||
public readonly RelayServerCdkeyPageResultInfo info;
|
||||
|
||||
[MemoryPackInclude]
|
||||
int Page => info.Page;
|
||||
[MemoryPackInclude]
|
||||
int Size => info.Size;
|
||||
[MemoryPackInclude]
|
||||
int Count => info.Count;
|
||||
[MemoryPackInclude]
|
||||
List<RelayServerCdkeyStoreInfo> List => info.List;
|
||||
|
||||
[MemoryPackConstructor]
|
||||
SerializableRelayServerCdkeyPageResultInfo(int page, int size, int count, List<RelayServerCdkeyStoreInfo> list)
|
||||
{
|
||||
var info = new RelayServerCdkeyPageResultInfo
|
||||
{
|
||||
Count = count,
|
||||
List = list,
|
||||
Size = size,
|
||||
Page = page
|
||||
};
|
||||
this.info = info;
|
||||
}
|
||||
|
||||
public SerializableRelayServerCdkeyPageResultInfo(RelayServerCdkeyPageResultInfo info)
|
||||
{
|
||||
this.info = info;
|
||||
}
|
||||
}
|
||||
public class RelayServerCdkeyPageResultInfoFormatter : MemoryPackFormatter<RelayServerCdkeyPageResultInfo>
|
||||
{
|
||||
public override void Serialize<TBufferWriter>(ref MemoryPackWriter<TBufferWriter> writer, scoped ref RelayServerCdkeyPageResultInfo value)
|
||||
{
|
||||
if (value == null)
|
||||
{
|
||||
writer.WriteNullObjectHeader();
|
||||
return;
|
||||
}
|
||||
|
||||
writer.WritePackable(new SerializableRelayServerCdkeyPageResultInfo(value));
|
||||
}
|
||||
|
||||
public override void Deserialize(ref MemoryPackReader reader, scoped ref RelayServerCdkeyPageResultInfo value)
|
||||
{
|
||||
if (reader.PeekIsNull())
|
||||
{
|
||||
reader.Advance(1); // skip null block
|
||||
value = null;
|
||||
return;
|
||||
}
|
||||
|
||||
var wrapped = reader.ReadPackable<SerializableRelayServerCdkeyPageResultInfo>();
|
||||
value = wrapped.info;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
[MemoryPackable]
|
||||
@@ -1352,206 +934,4 @@ namespace linker.messenger.serializer.memorypack
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
[MemoryPackable]
|
||||
public readonly partial struct SerializableRelayServerCdkeyImportInfo
|
||||
{
|
||||
[MemoryPackIgnore]
|
||||
public readonly RelayServerCdkeyImportInfo info;
|
||||
|
||||
[MemoryPackInclude]
|
||||
string SecretKey => info.SecretKey;
|
||||
[MemoryPackInclude]
|
||||
string UserId => info.UserId;
|
||||
[MemoryPackInclude]
|
||||
string Base64 => info.Base64;
|
||||
|
||||
[MemoryPackConstructor]
|
||||
SerializableRelayServerCdkeyImportInfo(string secretKey, string userid, string base64)
|
||||
{
|
||||
var info = new RelayServerCdkeyImportInfo
|
||||
{
|
||||
SecretKey = secretKey,
|
||||
UserId = userid,
|
||||
Base64 = base64
|
||||
};
|
||||
this.info = info;
|
||||
}
|
||||
|
||||
public SerializableRelayServerCdkeyImportInfo(RelayServerCdkeyImportInfo info)
|
||||
{
|
||||
this.info = info;
|
||||
}
|
||||
}
|
||||
public class RelayServerCdkeyImportInfoFormatter : MemoryPackFormatter<RelayServerCdkeyImportInfo>
|
||||
{
|
||||
public override void Serialize<TBufferWriter>(ref MemoryPackWriter<TBufferWriter> writer, scoped ref RelayServerCdkeyImportInfo value)
|
||||
{
|
||||
if (value == null)
|
||||
{
|
||||
writer.WriteNullObjectHeader();
|
||||
return;
|
||||
}
|
||||
|
||||
writer.WritePackable(new SerializableRelayServerCdkeyImportInfo(value));
|
||||
}
|
||||
|
||||
public override void Deserialize(ref MemoryPackReader reader, scoped ref RelayServerCdkeyImportInfo value)
|
||||
{
|
||||
if (reader.PeekIsNull())
|
||||
{
|
||||
reader.Advance(1); // skip null block
|
||||
value = null;
|
||||
return;
|
||||
}
|
||||
|
||||
var wrapped = reader.ReadPackable<SerializableRelayServerCdkeyImportInfo>();
|
||||
value = wrapped.info;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
[MemoryPackable]
|
||||
public readonly partial struct SerializableRelayServerCdkeyTestResultInfo
|
||||
{
|
||||
[MemoryPackIgnore]
|
||||
public readonly RelayServerCdkeyTestResultInfo info;
|
||||
|
||||
[MemoryPackInclude, MemoryPackAllowSerialize]
|
||||
RelayServerCdkeyOrderInfo Order => info.Order;
|
||||
[MemoryPackInclude]
|
||||
string Cdkey => info.Cdkey;
|
||||
[MemoryPackInclude]
|
||||
List<string> Field => info.Field;
|
||||
|
||||
[MemoryPackConstructor]
|
||||
SerializableRelayServerCdkeyTestResultInfo(RelayServerCdkeyOrderInfo order, string cdkey, List<string> field)
|
||||
{
|
||||
var info = new RelayServerCdkeyTestResultInfo
|
||||
{
|
||||
Order = order,
|
||||
Cdkey = cdkey,
|
||||
Field = field
|
||||
};
|
||||
this.info = info;
|
||||
}
|
||||
|
||||
public SerializableRelayServerCdkeyTestResultInfo(RelayServerCdkeyTestResultInfo info)
|
||||
{
|
||||
this.info = info;
|
||||
}
|
||||
}
|
||||
public class RelayServerCdkeyTestResultInfoFormatter : MemoryPackFormatter<RelayServerCdkeyTestResultInfo>
|
||||
{
|
||||
public override void Serialize<TBufferWriter>(ref MemoryPackWriter<TBufferWriter> writer, scoped ref RelayServerCdkeyTestResultInfo value)
|
||||
{
|
||||
if (value == null)
|
||||
{
|
||||
writer.WriteNullObjectHeader();
|
||||
return;
|
||||
}
|
||||
|
||||
writer.WritePackable(new SerializableRelayServerCdkeyTestResultInfo(value));
|
||||
}
|
||||
|
||||
public override void Deserialize(ref MemoryPackReader reader, scoped ref RelayServerCdkeyTestResultInfo value)
|
||||
{
|
||||
if (reader.PeekIsNull())
|
||||
{
|
||||
reader.Advance(1); // skip null block
|
||||
value = null;
|
||||
return;
|
||||
}
|
||||
|
||||
var wrapped = reader.ReadPackable<SerializableRelayServerCdkeyTestResultInfo>();
|
||||
value = wrapped.info;
|
||||
}
|
||||
}
|
||||
|
||||
[MemoryPackable]
|
||||
public readonly partial struct SerializableRelayServerCdkeyOrderInfo
|
||||
{
|
||||
[MemoryPackIgnore]
|
||||
public readonly RelayServerCdkeyOrderInfo info;
|
||||
|
||||
[MemoryPackInclude]
|
||||
int GB => info.GB;
|
||||
[MemoryPackInclude]
|
||||
int Speed => info.Speed;
|
||||
[MemoryPackInclude]
|
||||
string Time => info.Time;
|
||||
[MemoryPackInclude]
|
||||
string WidgetUserId => info.WidgetUserId;
|
||||
[MemoryPackInclude]
|
||||
string OrderId => info.OrderId;
|
||||
[MemoryPackInclude]
|
||||
string Contact => info.Contact;
|
||||
|
||||
[MemoryPackInclude]
|
||||
double CostPrice => info.CostPrice;
|
||||
[MemoryPackInclude]
|
||||
double Price => info.Price;
|
||||
[MemoryPackInclude]
|
||||
double UserPrice => info.UserPrice;
|
||||
[MemoryPackInclude]
|
||||
double PayPrice => info.PayPrice;
|
||||
[MemoryPackInclude]
|
||||
int Count => info.Count;
|
||||
[MemoryPackInclude]
|
||||
string Type => info.Type;
|
||||
|
||||
|
||||
[MemoryPackConstructor]
|
||||
SerializableRelayServerCdkeyOrderInfo(int gb, int speed, string time, string widgetUserId, string orderId, string contact, double costPrice, double price, double userPrice, double payPrice, int count, string type)
|
||||
{
|
||||
var info = new RelayServerCdkeyOrderInfo
|
||||
{
|
||||
GB = gb,
|
||||
Speed = speed,
|
||||
Time = time,
|
||||
WidgetUserId = widgetUserId,
|
||||
OrderId = orderId,
|
||||
Contact = contact,
|
||||
CostPrice = costPrice,
|
||||
Price = price,
|
||||
UserPrice = userPrice,
|
||||
PayPrice = payPrice,
|
||||
Count = count,
|
||||
Type = type
|
||||
};
|
||||
this.info = info;
|
||||
}
|
||||
|
||||
public SerializableRelayServerCdkeyOrderInfo(RelayServerCdkeyOrderInfo info)
|
||||
{
|
||||
this.info = info;
|
||||
}
|
||||
}
|
||||
public class RelayServerCdkeyOrderInfoFormatter : MemoryPackFormatter<RelayServerCdkeyOrderInfo>
|
||||
{
|
||||
public override void Serialize<TBufferWriter>(ref MemoryPackWriter<TBufferWriter> writer, scoped ref RelayServerCdkeyOrderInfo value)
|
||||
{
|
||||
if (value == null)
|
||||
{
|
||||
writer.WriteNullObjectHeader();
|
||||
return;
|
||||
}
|
||||
|
||||
writer.WritePackable(new SerializableRelayServerCdkeyOrderInfo(value));
|
||||
}
|
||||
|
||||
public override void Deserialize(ref MemoryPackReader reader, scoped ref RelayServerCdkeyOrderInfo value)
|
||||
{
|
||||
if (reader.PeekIsNull())
|
||||
{
|
||||
reader.Advance(1); // skip null block
|
||||
value = null;
|
||||
return;
|
||||
}
|
||||
|
||||
var wrapped = reader.ReadPackable<SerializableRelayServerCdkeyOrderInfo>();
|
||||
value = wrapped.info;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -16,9 +16,9 @@
|
||||
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
|
||||
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
|
||||
<PackageReleaseNotes>linker messenger serializer memorypack</PackageReleaseNotes>
|
||||
<Version>1.8.2</Version>
|
||||
<AssemblyVersion>1.8.2</AssemblyVersion>
|
||||
<FileVersion>1.8.2</FileVersion>
|
||||
<Version>1.8.3</Version>
|
||||
<AssemblyVersion>1.8.3</AssemblyVersion>
|
||||
<FileVersion>1.8.3</FileVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
@@ -42,6 +42,7 @@
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\linker.libs\linker.libs.csproj" />
|
||||
<ProjectReference Include="..\linker.messenger.access\linker.messenger.access.csproj" />
|
||||
<ProjectReference Include="..\linker.messenger.cdkey\linker.messenger.cdkey.csproj" />
|
||||
<ProjectReference Include="..\linker.messenger.decenter\linker.messenger.decenter.csproj" />
|
||||
<ProjectReference Include="..\linker.messenger.firewall\linker.messenger.firewall.csproj" />
|
||||
<ProjectReference Include="..\linker.messenger.flow\linker.messenger.flow.csproj" />
|
||||
|
@@ -16,9 +16,9 @@
|
||||
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
|
||||
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
|
||||
<PackageReleaseNotes>linker messenger sforward</PackageReleaseNotes>
|
||||
<Version>1.8.2</Version>
|
||||
<AssemblyVersion>1.8.2</AssemblyVersion>
|
||||
<FileVersion>1.8.2</FileVersion>
|
||||
<Version>1.8.3</Version>
|
||||
<AssemblyVersion>1.8.3</AssemblyVersion>
|
||||
<FileVersion>1.8.3</FileVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
|
@@ -217,12 +217,12 @@ namespace linker.plugins.sforward.messenger
|
||||
public void GetForward(IConnection connection)
|
||||
{
|
||||
string machineId = serializer.Deserialize<string>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
if (signCaching.TryGet(machineId, out SignCacheInfo cacheTo) && signCaching.TryGet(connection.Id, out SignCacheInfo cacheFrom) && cacheFrom.GroupId == cacheTo.GroupId)
|
||||
if (signCaching.TryGet(connection.Id,machineId, out SignCacheInfo from, out SignCacheInfo to))
|
||||
{
|
||||
uint requestid = connection.ReceiveRequestWrap.RequestId;
|
||||
sender.SendReply(new MessageRequestWrap
|
||||
{
|
||||
Connection = cacheTo.Connection,
|
||||
Connection = to.Connection,
|
||||
MessengerId = (ushort)SForwardMessengerIds.Get,
|
||||
Payload = connection.ReceiveRequestWrap.Payload
|
||||
}).ContinueWith(async (result) =>
|
||||
@@ -248,12 +248,12 @@ namespace linker.plugins.sforward.messenger
|
||||
public async Task AddClientForward(IConnection connection)
|
||||
{
|
||||
SForwardAddForwardInfo info = serializer.Deserialize<SForwardAddForwardInfo>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
if (signCaching.TryGet(info.MachineId, out SignCacheInfo cacheTo) && signCaching.TryGet(connection.Id, out SignCacheInfo cacheFrom) && cacheFrom.GroupId == cacheTo.GroupId)
|
||||
if (signCaching.TryGet(connection.Id, info.MachineId, out SignCacheInfo from, out SignCacheInfo to))
|
||||
{
|
||||
uint requestid = connection.ReceiveRequestWrap.RequestId;
|
||||
await sender.SendReply(new MessageRequestWrap
|
||||
{
|
||||
Connection = cacheTo.Connection,
|
||||
Connection = to.Connection,
|
||||
MessengerId = (ushort)SForwardMessengerIds.AddClient,
|
||||
Payload = serializer.Serialize(info.Data)
|
||||
}).ContinueWith(async (result) =>
|
||||
@@ -279,12 +279,12 @@ namespace linker.plugins.sforward.messenger
|
||||
public async Task RemoveClientForward(IConnection connection)
|
||||
{
|
||||
SForwardRemoveForwardInfo info = serializer.Deserialize<SForwardRemoveForwardInfo>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
if (signCaching.TryGet(info.MachineId, out SignCacheInfo cacheTo) && signCaching.TryGet(connection.Id, out SignCacheInfo cacheFrom) && cacheFrom.GroupId == cacheTo.GroupId)
|
||||
if (signCaching.TryGet(connection.Id, info.MachineId, out SignCacheInfo from, out SignCacheInfo to))
|
||||
{
|
||||
uint requestid = connection.ReceiveRequestWrap.RequestId;
|
||||
await sender.SendReply(new MessageRequestWrap
|
||||
{
|
||||
Connection = cacheTo.Connection,
|
||||
Connection = to.Connection,
|
||||
MessengerId = (ushort)SForwardMessengerIds.RemoveClient,
|
||||
Payload = serializer.Serialize(info.Id)
|
||||
}).ContinueWith(async (result) =>
|
||||
@@ -307,11 +307,11 @@ namespace linker.plugins.sforward.messenger
|
||||
public async Task StartClientForward(IConnection connection)
|
||||
{
|
||||
SForwardRemoveForwardInfo info = serializer.Deserialize<SForwardRemoveForwardInfo>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
if (signCaching.TryGet(info.MachineId, out SignCacheInfo cacheTo) && signCaching.TryGet(connection.Id, out SignCacheInfo cacheFrom) && cacheFrom.GroupId == cacheTo.GroupId)
|
||||
if (signCaching.TryGet(connection.Id, info.MachineId, out SignCacheInfo from, out SignCacheInfo to))
|
||||
{
|
||||
await sender.SendOnly(new MessageRequestWrap
|
||||
{
|
||||
Connection = cacheTo.Connection,
|
||||
Connection = to.Connection,
|
||||
MessengerId = (ushort)SForwardMessengerIds.StartClient,
|
||||
Payload = serializer.Serialize(info.Id)
|
||||
}).ConfigureAwait(false);
|
||||
@@ -321,11 +321,11 @@ namespace linker.plugins.sforward.messenger
|
||||
public async Task StopClientForward(IConnection connection)
|
||||
{
|
||||
SForwardRemoveForwardInfo info = serializer.Deserialize<SForwardRemoveForwardInfo>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
if (signCaching.TryGet(info.MachineId, out SignCacheInfo cacheTo) && signCaching.TryGet(connection.Id, out SignCacheInfo cacheFrom) && cacheFrom.GroupId == cacheTo.GroupId)
|
||||
if (signCaching.TryGet(connection.Id, info.MachineId, out SignCacheInfo from, out SignCacheInfo to))
|
||||
{
|
||||
await sender.SendOnly(new MessageRequestWrap
|
||||
{
|
||||
Connection = cacheTo.Connection,
|
||||
Connection = to.Connection,
|
||||
MessengerId = (ushort)SForwardMessengerIds.StopClient,
|
||||
Payload = serializer.Serialize(info.Id)
|
||||
}).ConfigureAwait(false);
|
||||
@@ -340,12 +340,12 @@ namespace linker.plugins.sforward.messenger
|
||||
public async Task TestClientForward(IConnection connection)
|
||||
{
|
||||
string machineid = serializer.Deserialize<string>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
if (signCaching.TryGet(machineid, out SignCacheInfo cacheTo) && signCaching.TryGet(connection.Id, out SignCacheInfo cacheFrom) && cacheFrom.GroupId == cacheTo.GroupId)
|
||||
if (signCaching.TryGet(connection.Id, machineid, out SignCacheInfo from, out SignCacheInfo to))
|
||||
{
|
||||
uint requestid = connection.ReceiveRequestWrap.RequestId;
|
||||
await sender.SendOnly(new MessageRequestWrap
|
||||
{
|
||||
Connection = cacheTo.Connection,
|
||||
Connection = to.Connection,
|
||||
MessengerId = (ushort)SForwardMessengerIds.TestClient
|
||||
}).ConfigureAwait(false);
|
||||
}
|
||||
|
@@ -181,7 +181,7 @@ namespace linker.messenger.signin
|
||||
{
|
||||
MachineName = signInClientStore.Name,
|
||||
MachineId = signInClientStore.Id,
|
||||
Version = VersionHelper.version,
|
||||
Version = VersionHelper.Version,
|
||||
Args = args,
|
||||
GroupId = signInClientStore.Group.Id,
|
||||
})
|
||||
|
@@ -48,7 +48,9 @@ namespace linker.messenger.signin
|
||||
}
|
||||
|
||||
[MessengerId((ushort)SignInMessengerIds.SignIn)]
|
||||
#pragma warning disable CA1822 // 将成员标记为 static
|
||||
public void SignIn(IConnection connection)
|
||||
#pragma warning restore CA1822 // 将成员标记为 static
|
||||
{
|
||||
connection.Disponse();
|
||||
return;
|
||||
@@ -87,7 +89,7 @@ namespace linker.messenger.signin
|
||||
string[] ids = serializer.Deserialize<string[]>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
if (signCaching.TryGet(connection.Id, out SignCacheInfo cache))
|
||||
{
|
||||
IEnumerable<SignCacheInfo> list = signCaching.Get(cache.GroupId);
|
||||
IEnumerable<SignCacheInfo> list = signCaching.Get(cache);
|
||||
foreach (var item in list)
|
||||
{
|
||||
item.Order = uint.MaxValue;
|
||||
@@ -111,7 +113,7 @@ namespace linker.messenger.signin
|
||||
SignInListRequestInfo request = serializer.Deserialize<SignInListRequestInfo>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
if (signCaching.TryGet(connection.Id, out SignCacheInfo cache))
|
||||
{
|
||||
IEnumerable<SignCacheInfo> list = signCaching.Get(cache.GroupId).Where(c => c.MachineId != cache.MachineId);
|
||||
IEnumerable<SignCacheInfo> list = signCaching.Get(cache).Where(c => c.MachineId != cache.MachineId);
|
||||
if (string.IsNullOrWhiteSpace(request.Name) == false)
|
||||
{
|
||||
list = list.Where(c => c.Version.Contains(request.Name) || c.IP.ToString().Contains(request.Name) || c.MachineName.Contains(request.Name) || request.Ids.Contains(c.MachineId));
|
||||
@@ -164,17 +166,17 @@ namespace linker.messenger.signin
|
||||
[MessengerId((ushort)SignInMessengerIds.Delete)]
|
||||
public void Delete(IConnection connection)
|
||||
{
|
||||
string name = serializer.Deserialize<string>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
if (signCaching.TryGet(name, out SignCacheInfo cache) && signCaching.TryGet(connection.Id, out SignCacheInfo cache1) && cache.GroupId == cache1.GroupId)
|
||||
string machineid = serializer.Deserialize<string>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
if (signCaching.TryGet(connection.Id, machineid, out SignCacheInfo from, out SignCacheInfo to))
|
||||
{
|
||||
signCaching.TryRemove(name, out _);
|
||||
signCaching.TryRemove(machineid, out _);
|
||||
}
|
||||
}
|
||||
|
||||
[MessengerId((ushort)SignInMessengerIds.Version)]
|
||||
public void Version(IConnection connection)
|
||||
{
|
||||
connection.Write(serializer.Serialize(VersionHelper.version));
|
||||
connection.Write(serializer.Serialize(VersionHelper.Version));
|
||||
}
|
||||
|
||||
|
||||
@@ -184,7 +186,7 @@ namespace linker.messenger.signin
|
||||
SignInIdsRequestInfo request = serializer.Deserialize<SignInIdsRequestInfo>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
if (signCaching.TryGet(connection.Id, out SignCacheInfo cache))
|
||||
{
|
||||
IEnumerable<SignCacheInfo> list = signCaching.Get(cache.GroupId).OrderByDescending(c => c.MachineName).OrderByDescending(c => c.LastSignIn).OrderByDescending(c => c.Version).ToList();
|
||||
IEnumerable<SignCacheInfo> list = signCaching.Get(cache).OrderByDescending(c => c.MachineName).OrderByDescending(c => c.LastSignIn).OrderByDescending(c => c.Version).ToList();
|
||||
if (string.IsNullOrWhiteSpace(request.Name) == false)
|
||||
{
|
||||
list = list.Where(c => c.MachineName.Contains(request.Name));
|
||||
@@ -208,7 +210,7 @@ namespace linker.messenger.signin
|
||||
{
|
||||
if (signCaching.TryGet(connection.Id, out SignCacheInfo cache))
|
||||
{
|
||||
List<SignInNamesResponseItemInfo> list = signCaching.Get(cache.GroupId).Select(c => new SignInNamesResponseItemInfo { MachineId = c.MachineId, MachineName = c.MachineName, Online = c.Connected }).ToList();
|
||||
List<SignInNamesResponseItemInfo> list = signCaching.Get(cache).Select(c => new SignInNamesResponseItemInfo { MachineId = c.MachineId, MachineName = c.MachineName, Online = c.Connected }).ToList();
|
||||
|
||||
connection.Write(serializer.Serialize(list));
|
||||
}
|
||||
@@ -220,7 +222,7 @@ namespace linker.messenger.signin
|
||||
{
|
||||
if (signCaching.TryGet(connection.Id, out SignCacheInfo cache))
|
||||
{
|
||||
IEnumerable<string> list = signCaching.Get(cache.GroupId).Select(c => c.MachineId);
|
||||
IEnumerable<string> list = signCaching.Get(cache).Select(c => c.MachineId);
|
||||
connection.Write(serializer.Serialize(list));
|
||||
}
|
||||
}
|
||||
@@ -230,7 +232,7 @@ namespace linker.messenger.signin
|
||||
{
|
||||
string machineId = serializer.Deserialize<string>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
|
||||
if (signCaching.TryGet(connection.Id, out SignCacheInfo cache) && signCaching.TryGet(machineId, out SignCacheInfo cache1) && cache.GroupId == cache1.GroupId && cache1.Connected)
|
||||
if (signCaching.TryGet(connection.Id, machineId, out SignCacheInfo from, out SignCacheInfo to) && to.Connected)
|
||||
{
|
||||
connection.Write(Helper.TrueArray);
|
||||
}
|
||||
@@ -250,13 +252,13 @@ namespace linker.messenger.signin
|
||||
public async Task SetNameForward(IConnection connection)
|
||||
{
|
||||
SignInConfigSetNameInfo info = serializer.Deserialize<SignInConfigSetNameInfo>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
if (signCaching.TryGet(info.Id, out SignCacheInfo cache) && signCaching.TryGet(connection.Id, out SignCacheInfo cache1) && cache.GroupId == cache1.GroupId)
|
||||
if (signCaching.TryGet(connection.Id, info.Id, out SignCacheInfo from, out SignCacheInfo to))
|
||||
{
|
||||
if (info.Id != connection.Id)
|
||||
{
|
||||
await messengerSender.SendOnly(new MessageRequestWrap
|
||||
{
|
||||
Connection = cache.Connection,
|
||||
Connection = to.Connection,
|
||||
MessengerId = (ushort)SignInMessengerIds.SetName,
|
||||
Payload = connection.ReceiveRequestWrap.Payload,
|
||||
}).ConfigureAwait(false);
|
||||
@@ -281,7 +283,7 @@ namespace linker.messenger.signin
|
||||
List<string> machineIds = serializer.Deserialize<List<string>>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
if (signCaching.TryGet(connection.Id, out SignCacheInfo cache))
|
||||
{
|
||||
List<string> offlines = signCaching.Get(cache.GroupId).Where(c => c.Connected == false).Select(c => c.MachineId).Intersect(machineIds).ToList();
|
||||
List<string> offlines = signCaching.Get(cache).Where(c => c.Connected == false).Select(c => c.MachineId).Intersect(machineIds).ToList();
|
||||
connection.Write(serializer.Serialize(offlines));
|
||||
return;
|
||||
}
|
||||
|
@@ -3,7 +3,6 @@ using linker.libs.timer;
|
||||
using linker.messenger.signin.args;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Net;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace linker.messenger.signin
|
||||
{
|
||||
@@ -86,20 +85,25 @@ namespace linker.messenger.signin
|
||||
}
|
||||
return Clients.TryGetValue(machineId, out cache);
|
||||
}
|
||||
public bool TryGet(string from, string to, out SignCacheInfo fromValue, out SignCacheInfo toValue)
|
||||
{
|
||||
fromValue = null;
|
||||
toValue = null;
|
||||
if (from == null || to == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return Clients.TryGetValue(from, out fromValue) && Clients.TryGetValue(to, out toValue) && fromValue.SameGroup(toValue);
|
||||
}
|
||||
|
||||
public List<SignCacheInfo> Get()
|
||||
{
|
||||
return Clients.Values.ToList();
|
||||
}
|
||||
public List<SignCacheInfo> Get(string groupId)
|
||||
public List<SignCacheInfo> Get(SignCacheInfo other)
|
||||
{
|
||||
return Clients.Values.Where(c => c.GroupId == groupId).ToList();
|
||||
return Clients.Values.Where(c => c.GroupId == other.GroupId).ToList();
|
||||
}
|
||||
public IEnumerable<string> GetOnlines()
|
||||
{
|
||||
return Clients.Values.Where(c => c.Connected == true).Select(c => c.Id);
|
||||
}
|
||||
|
||||
|
||||
public bool GetOnline(string machineId)
|
||||
{
|
||||
@@ -120,13 +124,11 @@ namespace linker.messenger.signin
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public string NewId()
|
||||
{
|
||||
return signInStore.NewId();
|
||||
}
|
||||
|
||||
|
||||
public bool Exp(string machineId)
|
||||
{
|
||||
return signInStore.Exp(machineId);
|
||||
@@ -218,7 +220,7 @@ namespace linker.messenger.signin
|
||||
}
|
||||
}
|
||||
|
||||
private bool connected = false;
|
||||
private bool connected;
|
||||
public bool Connected
|
||||
{
|
||||
get
|
||||
@@ -241,6 +243,11 @@ namespace linker.messenger.signin
|
||||
public IConnection Connection { get; set; }
|
||||
|
||||
public uint Order { get; set; } = int.MaxValue;
|
||||
|
||||
public bool SameGroup(SignCacheInfo other)
|
||||
{
|
||||
return this.GroupId == other.GroupId;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@@ -10,7 +10,7 @@ namespace linker.messenger.signin.args
|
||||
public string Name => "version";
|
||||
public async Task<string> Invoke(string host, Dictionary<string, string> args)
|
||||
{
|
||||
args.TryAdd("version", VersionHelper.version);
|
||||
args.TryAdd("version", VersionHelper.Version);
|
||||
|
||||
await Task.CompletedTask.ConfigureAwait(false);
|
||||
|
||||
|
@@ -17,9 +17,9 @@
|
||||
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
|
||||
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
|
||||
<PackageReleaseNotes>linker messenger signin</PackageReleaseNotes>
|
||||
<Version>1.8.2</Version>
|
||||
<AssemblyVersion>1.8.2</AssemblyVersion>
|
||||
<FileVersion>1.8.2</FileVersion>
|
||||
<Version>1.8.3</Version>
|
||||
<AssemblyVersion>1.8.3</AssemblyVersion>
|
||||
<FileVersion>1.8.3</FileVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
|
@@ -69,12 +69,12 @@ namespace linker.messenger.socks5
|
||||
[MessengerId((ushort)Socks5MessengerIds.RunForward)]
|
||||
public async Task RunForward(IConnection connection)
|
||||
{
|
||||
string name = serializer.Deserialize<string>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
if (signCaching.TryGet(name, out SignCacheInfo cache) && signCaching.TryGet(connection.Id, out SignCacheInfo cache1) && cache.GroupId == cache1.GroupId)
|
||||
string machineid = serializer.Deserialize<string>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
if (signCaching.TryGet(connection.Id, machineid, out SignCacheInfo from, out SignCacheInfo to))
|
||||
{
|
||||
await messengerSender.SendOnly(new MessageRequestWrap
|
||||
{
|
||||
Connection = cache.Connection,
|
||||
Connection = to.Connection,
|
||||
Timeout = 3000,
|
||||
MessengerId = (ushort)Socks5MessengerIds.Run
|
||||
}).ConfigureAwait(false);
|
||||
@@ -89,12 +89,12 @@ namespace linker.messenger.socks5
|
||||
[MessengerId((ushort)Socks5MessengerIds.StopForward)]
|
||||
public async Task StopForward(IConnection connection)
|
||||
{
|
||||
string name = serializer.Deserialize<string>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
if (signCaching.TryGet(name, out SignCacheInfo cache) && signCaching.TryGet(connection.Id, out SignCacheInfo cache1) && cache.GroupId == cache1.GroupId)
|
||||
string machineid = serializer.Deserialize<string>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
if (signCaching.TryGet(connection.Id,machineid, out SignCacheInfo from, out SignCacheInfo to))
|
||||
{
|
||||
await messengerSender.SendOnly(new MessageRequestWrap
|
||||
{
|
||||
Connection = cache.Connection,
|
||||
Connection = to.Connection,
|
||||
Timeout = 3000,
|
||||
MessengerId = (ushort)Socks5MessengerIds.Stop
|
||||
}).ConfigureAwait(false);
|
||||
@@ -110,11 +110,11 @@ namespace linker.messenger.socks5
|
||||
public async Task UpdateForward(IConnection connection)
|
||||
{
|
||||
Socks5Info info = serializer.Deserialize<Socks5Info>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
if (signCaching.TryGet(info.MachineId, out SignCacheInfo cache) && signCaching.TryGet(connection.Id, out SignCacheInfo cache1) && cache.GroupId == cache1.GroupId)
|
||||
if (signCaching.TryGet(connection.Id, info.MachineId, out SignCacheInfo from, out SignCacheInfo to))
|
||||
{
|
||||
await messengerSender.SendOnly(new MessageRequestWrap
|
||||
{
|
||||
Connection = cache.Connection,
|
||||
Connection = to.Connection,
|
||||
Timeout = 3000,
|
||||
MessengerId = (ushort)Socks5MessengerIds.Update,
|
||||
Payload = connection.ReceiveRequestWrap.Payload
|
||||
|
@@ -16,9 +16,9 @@
|
||||
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
|
||||
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
|
||||
<PackageReleaseNotes>linker messenger socks5</PackageReleaseNotes>
|
||||
<Version>1.8.2</Version>
|
||||
<AssemblyVersion>1.8.2</AssemblyVersion>
|
||||
<FileVersion>1.8.2</FileVersion>
|
||||
<Version>1.8.3</Version>
|
||||
<AssemblyVersion>1.8.3</AssemblyVersion>
|
||||
<FileVersion>1.8.3</FileVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
|
@@ -2,6 +2,7 @@
|
||||
using linker.libs.web;
|
||||
using linker.messenger.action;
|
||||
using linker.messenger.api;
|
||||
using linker.messenger.cdkey;
|
||||
using linker.messenger.firewall;
|
||||
using linker.messenger.forward;
|
||||
using linker.messenger.listen;
|
||||
@@ -16,6 +17,7 @@ using linker.messenger.signin;
|
||||
using linker.messenger.socks5;
|
||||
using linker.messenger.store.file.action;
|
||||
using linker.messenger.store.file.api;
|
||||
using linker.messenger.store.file.cekey;
|
||||
using linker.messenger.store.file.common;
|
||||
using linker.messenger.store.file.firewall;
|
||||
using linker.messenger.store.file.forward;
|
||||
@@ -68,7 +70,9 @@ namespace linker.messenger.store.file
|
||||
serviceCollection.AddSingleton<IRelayServerStore, RelayServerStore>();
|
||||
serviceCollection.AddSingleton<IRelayServerNodeStore, RelayServerNodeStore>();
|
||||
serviceCollection.AddSingleton<IRelayServerMasterStore, RelayServerMasterStore>();
|
||||
serviceCollection.AddSingleton<IRelayServerCdkeyStore, RelayServerCdkeyStore>();
|
||||
|
||||
serviceCollection.AddSingleton<ICdkeyServerStore, CdkeyServerStore>();
|
||||
serviceCollection.AddSingleton<ICdkeyClientStore, CdkeyClientStore>();
|
||||
|
||||
|
||||
serviceCollection.AddSingleton<ITunnelClientStore, TunnelClientStore>();
|
||||
@@ -114,7 +118,7 @@ namespace linker.messenger.store.file
|
||||
|
||||
serviceCollection.AddSingleton<IWakeupClientStore, WakeupClientStore>();
|
||||
|
||||
|
||||
|
||||
|
||||
return serviceCollection;
|
||||
}
|
||||
|
@@ -74,9 +74,9 @@ namespace linker.messenger.store.file
|
||||
}
|
||||
}
|
||||
}
|
||||
if (Directory.Exists(Path.Combine(Helper.currentDirectory, configPath)) == false)
|
||||
if (Directory.Exists(Path.Combine(Helper.CurrentDirectory, configPath)) == false)
|
||||
{
|
||||
Directory.CreateDirectory(Path.Combine(Helper.currentDirectory, configPath));
|
||||
Directory.CreateDirectory(Path.Combine(Helper.CurrentDirectory, configPath));
|
||||
}
|
||||
|
||||
Type type = Data.GetType();
|
||||
@@ -86,7 +86,7 @@ namespace linker.messenger.store.file
|
||||
object property = item.GetValue(Data);
|
||||
fsDic.Add(item.Name.ToLower(), new FileReadWrite
|
||||
{
|
||||
Path = Path.Combine(Helper.currentDirectory, configPath, $"{item.Name.ToLower()}.json"),
|
||||
Path = Path.Combine(Helper.CurrentDirectory, configPath, $"{item.Name.ToLower()}.json"),
|
||||
Property = item,
|
||||
PropertyObject = property,
|
||||
PropertyMethod = (IConfig)property,
|
||||
|
@@ -30,7 +30,7 @@ namespace linker.messenger.store.file
|
||||
bsonMapper.RegisterType<ITunnelConnection>(serialize: (a) => string.Empty, deserialize: (a) => null);
|
||||
bsonMapper.RegisterType<IConnection>(serialize: (a) => string.Empty, deserialize: (a) => null);
|
||||
|
||||
string db = Path.Join(Helper.currentDirectory, "./configs/db.db");
|
||||
string db = Path.Join(Helper.CurrentDirectory, "./configs/db.db");
|
||||
if (Directory.Exists(Path.GetDirectoryName(db)) == false)
|
||||
{
|
||||
Directory.CreateDirectory(Path.GetDirectoryName(db));
|
||||
|
22
src/linker.messenger.store.file/cekey/CdkeyClientStore.cs
Normal file
22
src/linker.messenger.store.file/cekey/CdkeyClientStore.cs
Normal file
@@ -0,0 +1,22 @@
|
||||
using linker.messenger.cdkey;
|
||||
|
||||
namespace linker.messenger.store.file.cekey
|
||||
{
|
||||
public sealed class CdkeyClientStore : ICdkeyClientStore
|
||||
{
|
||||
public string SecretKey => fileConfig.Data.Client.Cdkey.SecretKey;
|
||||
|
||||
private readonly FileConfig fileConfig;
|
||||
public CdkeyClientStore(FileConfig fileConfig)
|
||||
{
|
||||
this.fileConfig = fileConfig;
|
||||
}
|
||||
|
||||
public bool SetSecretKey(string secretKey)
|
||||
{
|
||||
fileConfig.Data.Client.Cdkey.SecretKey = secretKey;
|
||||
fileConfig.Data.Update();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
@@ -1,28 +1,35 @@
|
||||
using linker.libs;
|
||||
using linker.libs.extends;
|
||||
using linker.messenger.relay.server;
|
||||
using linker.messenger.cdkey;
|
||||
using LiteDB;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace linker.messenger.store.file.relay
|
||||
{
|
||||
public sealed class RelayServerCdkeyStore : IRelayServerCdkeyStore
|
||||
public sealed class CdkeyServerStore : ICdkeyServerStore
|
||||
{
|
||||
private string regex = @"([0-9]+|\?)-([0-9]+|\?)-([0-9]+|\?)\s+([0-9]+|\?):([0-9]+|\?):([0-9]+|\?)";
|
||||
private int index = 0;
|
||||
|
||||
private readonly Storefactory dBfactory;
|
||||
private readonly ILiteCollection<RelayServerCdkeyStoreInfo> liteCollection;
|
||||
private readonly ILiteCollection<CdkeyStoreInfo> liteCollection;
|
||||
private readonly ICrypto crypto;
|
||||
public RelayServerCdkeyStore(Storefactory dBfactory, FileConfig fileConfig)
|
||||
private readonly FileConfig fileConfig;
|
||||
public CdkeyServerStore(Storefactory dBfactory, FileConfig fileConfig)
|
||||
{
|
||||
this.dBfactory = dBfactory;
|
||||
liteCollection = dBfactory.GetCollection<RelayServerCdkeyStoreInfo>("relayCdkey");
|
||||
liteCollection = dBfactory.GetCollection<CdkeyStoreInfo>("relayCdkey");
|
||||
this.crypto = CryptoFactory.CreateSymmetric(fileConfig.Data.Server.Relay.Cdkey.SecretKey, System.Security.Cryptography.PaddingMode.PKCS7);
|
||||
this.fileConfig = fileConfig;
|
||||
}
|
||||
|
||||
public async Task<bool> Add(RelayServerCdkeyStoreInfo info)
|
||||
public bool ValidateSecretKey(string secretKey)
|
||||
{
|
||||
return secretKey == fileConfig.Data.Server.Cdkey.SecretKey;
|
||||
}
|
||||
|
||||
public async Task<bool> Add(CdkeyStoreInfo info)
|
||||
{
|
||||
if (info.Id == 0)
|
||||
{
|
||||
@@ -44,27 +51,27 @@ namespace linker.messenger.store.file.relay
|
||||
}
|
||||
public async Task<bool> Del(int id)
|
||||
{
|
||||
return await Task.FromResult(liteCollection.UpdateMany(c => new RelayServerCdkeyStoreInfo { Deleted = true }, c => c.Id == id) > 0).ConfigureAwait(false);
|
||||
return await Task.FromResult(liteCollection.UpdateMany(c => new CdkeyStoreInfo { Deleted = true }, c => c.Id == id) > 0).ConfigureAwait(false);
|
||||
}
|
||||
public async Task<bool> Del(int id, string userid)
|
||||
{
|
||||
return await Task.FromResult(liteCollection.UpdateMany(c => new RelayServerCdkeyStoreInfo { Deleted = true }, c => c.Id == id && c.UserId == userid) > 0).ConfigureAwait(false);
|
||||
return await Task.FromResult(liteCollection.UpdateMany(c => new CdkeyStoreInfo { Deleted = true }, c => c.Id == id && c.UserId == userid) > 0).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
public async Task<RelayServerCdkeyTestResultInfo> Test(RelayServerCdkeyImportInfo info)
|
||||
public async Task<CdkeyTestResultInfo> Test(CdkeyImportInfo info)
|
||||
{
|
||||
List<string> error = new List<string>();
|
||||
RelayServerCdkeyTestResultInfo result = new RelayServerCdkeyTestResultInfo();
|
||||
CdkeyTestResultInfo result = new CdkeyTestResultInfo();
|
||||
|
||||
try
|
||||
{
|
||||
result.Cdkey = Encoding.UTF8.GetString(crypto.Decode(Convert.FromBase64String(info.Base64)).Span);
|
||||
RelayServerCdkeyOrderInfo order = result.Cdkey.DeJson<RelayServerCdkeyOrderInfo>();
|
||||
CdkeyOrderInfo order = result.Cdkey.DeJson<CdkeyOrderInfo>();
|
||||
result.Order = order;
|
||||
|
||||
if(order.Type != "Relay" || string.IsNullOrWhiteSpace(order.Type))
|
||||
if (string.IsNullOrWhiteSpace(order.Type))
|
||||
{
|
||||
error.Add("Relay");
|
||||
error.Add("Type");
|
||||
}
|
||||
|
||||
if (order.WidgetUserId != info.UserId || string.IsNullOrWhiteSpace(order.WidgetUserId))
|
||||
@@ -104,9 +111,9 @@ namespace linker.messenger.store.file.relay
|
||||
|
||||
return await Task.FromResult(result).ConfigureAwait(false);
|
||||
}
|
||||
public async Task<string> Import(RelayServerCdkeyImportInfo info)
|
||||
public async Task<string> Import(CdkeyImportInfo info)
|
||||
{
|
||||
RelayServerCdkeyTestResultInfo test = await Test(info).ConfigureAwait(false);
|
||||
CdkeyTestResultInfo test = await Test(info).ConfigureAwait(false);
|
||||
|
||||
if (test.Field.Count > 0)
|
||||
{
|
||||
@@ -124,10 +131,11 @@ namespace linker.messenger.store.file.relay
|
||||
return "OrderId";
|
||||
}
|
||||
|
||||
RelayServerCdkeyOrderInfo order = test.Order;
|
||||
CdkeyOrderInfo order = test.Order;
|
||||
var time = Regex.Match(order.Time, regex).Groups;
|
||||
RelayServerCdkeyStoreInfo store = new RelayServerCdkeyStoreInfo
|
||||
CdkeyStoreInfo store = new CdkeyStoreInfo
|
||||
{
|
||||
Type = order.Type,
|
||||
UseTime = DateTime.Now,
|
||||
AddTime = DateTime.Now,
|
||||
Bandwidth = order.Speed,
|
||||
@@ -162,7 +170,7 @@ namespace linker.messenger.store.file.relay
|
||||
if (info != null)
|
||||
{
|
||||
long bytes = info.LastBytes >= item.Value ? info.LastBytes - item.Value : 0;
|
||||
liteCollection.UpdateMany(x => new RelayServerCdkeyStoreInfo { LastBytes = bytes, UseTime = DateTime.Now }, c => c.Id == item.Key);
|
||||
liteCollection.UpdateMany(x => new CdkeyStoreInfo { LastBytes = bytes, UseTime = DateTime.Now }, c => c.Id == item.Key);
|
||||
}
|
||||
}
|
||||
return await Task.FromResult(true).ConfigureAwait(false);
|
||||
@@ -172,44 +180,48 @@ namespace linker.messenger.store.file.relay
|
||||
return await Task.FromResult(liteCollection.Find(c => ids.Contains(c.Id)).ToDictionary(c => c.Id, c => c.LastBytes)).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
public async Task<List<RelayServerCdkeyStoreInfo>> GetAvailable(string userid)
|
||||
public async Task<List<CdkeyStoreInfo>> GetAvailable(string userid, string type)
|
||||
{
|
||||
return await Task.FromResult(liteCollection.Find(x => x.UserId == userid && x.LastBytes > 0 && x.StartTime <= DateTime.Now && x.EndTime >= DateTime.Now && x.Deleted == false).ToList()).ConfigureAwait(false);
|
||||
return await Task.FromResult(liteCollection.Find(x => x.UserId == userid && x.Type == type && x.LastBytes > 0 && x.StartTime <= DateTime.Now && x.EndTime >= DateTime.Now && x.Deleted == false).ToList()).ConfigureAwait(false);
|
||||
}
|
||||
public async Task<List<RelayServerCdkeyStoreInfo>> Get(List<int> ids)
|
||||
public async Task<List<CdkeyStoreInfo>> Get(List<int> ids)
|
||||
{
|
||||
return await Task.FromResult(liteCollection.Find(x => ids.Contains(x.Id)).ToList()).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
public async Task<RelayServerCdkeyPageResultInfo> Page(RelayServerCdkeyPageRequestInfo info)
|
||||
public async Task<CdkeyPageResultInfo> Page(CdkeyPageRequestInfo info)
|
||||
{
|
||||
ILiteQueryable<RelayServerCdkeyStoreInfo> query = liteCollection.Query();
|
||||
ILiteQueryable<CdkeyStoreInfo> query = liteCollection.Query();
|
||||
|
||||
if (info.Flag.HasFlag(RelayServerCdkeyPageRequestFlag.TimeIn))
|
||||
if (info.Flag.HasFlag(CdkeyPageRequestFlag.TimeIn))
|
||||
{
|
||||
query = query.Where(x => x.StartTime <= DateTime.Now && x.EndTime >= DateTime.Now);
|
||||
}
|
||||
if (info.Flag.HasFlag(RelayServerCdkeyPageRequestFlag.TimeOut))
|
||||
if (info.Flag.HasFlag(CdkeyPageRequestFlag.TimeOut))
|
||||
{
|
||||
query = query.Where(x =>x.StartTime > DateTime.Now || x.EndTime < DateTime.Now);
|
||||
query = query.Where(x => x.StartTime > DateTime.Now || x.EndTime < DateTime.Now);
|
||||
}
|
||||
if (info.Flag.HasFlag(RelayServerCdkeyPageRequestFlag.BytesIn))
|
||||
if (info.Flag.HasFlag(CdkeyPageRequestFlag.BytesIn))
|
||||
{
|
||||
query = query.Where(x => x.LastBytes > 0);
|
||||
}
|
||||
if (info.Flag.HasFlag(RelayServerCdkeyPageRequestFlag.BytesOut))
|
||||
if (info.Flag.HasFlag(CdkeyPageRequestFlag.BytesOut))
|
||||
{
|
||||
query = query.Where(x => x.LastBytes <= 0);
|
||||
}
|
||||
if (info.Flag.HasFlag(RelayServerCdkeyPageRequestFlag.Deleted))
|
||||
if (info.Flag.HasFlag(CdkeyPageRequestFlag.Deleted))
|
||||
{
|
||||
query = query.Where(x => x.Deleted == true);
|
||||
}
|
||||
if (info.Flag.HasFlag(RelayServerCdkeyPageRequestFlag.UnDeleted))
|
||||
if (info.Flag.HasFlag(CdkeyPageRequestFlag.UnDeleted))
|
||||
{
|
||||
query = query.Where(x => x.Deleted == false);
|
||||
}
|
||||
|
||||
if (string.IsNullOrWhiteSpace(info.Type) == false)
|
||||
{
|
||||
query = query.Where(x => x.Type == info.Type);
|
||||
}
|
||||
if (string.IsNullOrWhiteSpace(info.UserId) == false)
|
||||
{
|
||||
query = query.Where(x => x.UserId == info.UserId);
|
||||
@@ -235,7 +247,7 @@ namespace linker.messenger.store.file.relay
|
||||
query = query.OrderBy(c => c.Id, Query.Descending);
|
||||
}
|
||||
|
||||
return await Task.FromResult(new RelayServerCdkeyPageResultInfo
|
||||
return await Task.FromResult(new CdkeyPageResultInfo
|
||||
{
|
||||
Page = info.Page,
|
||||
Size = info.Size,
|
19
src/linker.messenger.store.file/cekey/Config.cs
Normal file
19
src/linker.messenger.store.file/cekey/Config.cs
Normal file
@@ -0,0 +1,19 @@
|
||||
using linker.messenger.cdkey;
|
||||
|
||||
namespace linker.messenger.store.file
|
||||
{
|
||||
public sealed partial class ConfigClientInfo
|
||||
{
|
||||
/// <summary>
|
||||
/// cdkey配置
|
||||
/// </summary>
|
||||
public CdkeyConfigInfo Cdkey { get; set; } = new CdkeyConfigInfo();
|
||||
}
|
||||
public partial class ConfigServerInfo
|
||||
{
|
||||
/// <summary>
|
||||
/// cdkey配置
|
||||
/// </summary>
|
||||
public CdkeyConfigInfo Cdkey { get; set; } = new CdkeyConfigInfo();
|
||||
}
|
||||
}
|
@@ -16,9 +16,9 @@
|
||||
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
|
||||
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
|
||||
<PackageReleaseNotes>linker messenger store file</PackageReleaseNotes>
|
||||
<Version>1.8.2</Version>
|
||||
<AssemblyVersion>1.8.2</AssemblyVersion>
|
||||
<FileVersion>1.8.2</FileVersion>
|
||||
<Version>1.8.3</Version>
|
||||
<AssemblyVersion>1.8.3</AssemblyVersion>
|
||||
<FileVersion>1.8.3</FileVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
@@ -52,6 +52,7 @@
|
||||
<ProjectReference Include="..\linker.messenger.access\linker.messenger.access.csproj" />
|
||||
<ProjectReference Include="..\linker.messenger.action\linker.messenger.action.csproj" />
|
||||
<ProjectReference Include="..\linker.messenger.api\linker.messenger.api.csproj" />
|
||||
<ProjectReference Include="..\linker.messenger.cdkey\linker.messenger.cdkey.csproj" />
|
||||
<ProjectReference Include="..\linker.messenger.firewall\linker.messenger.firewall.csproj" />
|
||||
<ProjectReference Include="..\linker.messenger.forward\linker.messenger.forward.csproj" />
|
||||
<ProjectReference Include="..\linker.messenger.listen\linker.messenger.listen.csproj" />
|
||||
|
@@ -1,4 +1,5 @@
|
||||
using linker.libs;
|
||||
using linker.messenger.cdkey;
|
||||
using linker.messenger.relay.client.transport;
|
||||
using linker.messenger.relay.server;
|
||||
using linker.tunnel.connection;
|
||||
@@ -48,7 +49,7 @@ namespace linker.messenger.store.file
|
||||
#else
|
||||
public string SecretKey { get; set; } = Guid.NewGuid().ToString().ToUpper();
|
||||
#endif
|
||||
public RelayServerCdkeyConfigInfo Cdkey { get; set; } = new RelayServerCdkeyConfigInfo();
|
||||
public CdkeyConfigInfo Cdkey { get; set; } = new CdkeyConfigInfo();
|
||||
|
||||
public DistributedInfo Distributed { get; set; } = new DistributedInfo { };
|
||||
}
|
||||
|
@@ -23,7 +23,7 @@ namespace linker.messenger.sync
|
||||
SyncInfo info = serializer.Deserialize<SyncInfo>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
if (signCaching.TryGet(connection.Id, out SignCacheInfo cache))
|
||||
{
|
||||
List<SignCacheInfo> caches = signCaching.Get(cache.GroupId);
|
||||
List<SignCacheInfo> caches = signCaching.Get(cache);
|
||||
List<Task> tasks = new List<Task>();
|
||||
foreach (SignCacheInfo item in caches.Where(c => c.MachineId != connection.Id && c.Connected))
|
||||
{
|
||||
|
@@ -18,9 +18,9 @@
|
||||
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
|
||||
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
|
||||
<PackageReleaseNotes>linker messenger sync</PackageReleaseNotes>
|
||||
<Version>1.8.2</Version>
|
||||
<AssemblyVersion>1.8.2</AssemblyVersion>
|
||||
<FileVersion>1.8.2</FileVersion>
|
||||
<Version>1.8.3</Version>
|
||||
<AssemblyVersion>1.8.3</AssemblyVersion>
|
||||
<FileVersion>1.8.3</FileVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
|
@@ -126,12 +126,12 @@ namespace linker.messenger.tunnel
|
||||
public void InfoForward(IConnection connection)
|
||||
{
|
||||
TunnelWanPortProtocolInfo info = serializer.Deserialize<TunnelWanPortProtocolInfo>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
if (signCaching.TryGet(info.MachineId, out SignCacheInfo cache) && signCaching.TryGet(connection.Id, out SignCacheInfo cache1) && cache.GroupId == cache1.GroupId)
|
||||
if (signCaching.TryGet(connection.Id, info.MachineId, out SignCacheInfo from, out SignCacheInfo to))
|
||||
{
|
||||
uint requestid = connection.ReceiveRequestWrap.RequestId;
|
||||
_ = messengerSender.SendReply(new MessageRequestWrap
|
||||
{
|
||||
Connection = cache.Connection,
|
||||
Connection = to.Connection,
|
||||
MessengerId = (ushort)TunnelMessengerIds.Info,
|
||||
Payload = connection.ReceiveRequestWrap.Payload,
|
||||
}).ContinueWith(async (result) =>
|
||||
@@ -153,18 +153,18 @@ namespace linker.messenger.tunnel
|
||||
[MessengerId((ushort)TunnelMessengerIds.BeginForward)]
|
||||
public async Task BeginForward(IConnection connection)
|
||||
{
|
||||
TunnelTransportInfo tunnelTransportInfo = serializer.Deserialize<TunnelTransportInfo>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
TunnelTransportInfo info = serializer.Deserialize<TunnelTransportInfo>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
|
||||
if (signCaching.TryGet(tunnelTransportInfo.Remote.MachineId, out SignCacheInfo cacheTo) && signCaching.TryGet(connection.Id, out SignCacheInfo cacheFrom) && cacheFrom.GroupId == cacheTo.GroupId)
|
||||
if (signCaching.TryGet(connection.Id, info.Remote.MachineId, out SignCacheInfo from, out SignCacheInfo to))
|
||||
{
|
||||
tunnelTransportInfo.Local.MachineName = cacheFrom.MachineName;
|
||||
tunnelTransportInfo.Remote.MachineName = cacheTo.MachineName;
|
||||
info.Local.MachineName = from.MachineName;
|
||||
info.Remote.MachineName = to.MachineName;
|
||||
|
||||
await messengerSender.SendOnly(new MessageRequestWrap
|
||||
{
|
||||
Connection = cacheTo.Connection,
|
||||
Connection = to.Connection,
|
||||
MessengerId = (ushort)TunnelMessengerIds.Begin,
|
||||
Payload = serializer.Serialize(tunnelTransportInfo)
|
||||
Payload = serializer.Serialize(info)
|
||||
}).ConfigureAwait(false);
|
||||
connection.Write(Helper.TrueArray);
|
||||
}
|
||||
@@ -174,16 +174,16 @@ namespace linker.messenger.tunnel
|
||||
[MessengerId((ushort)TunnelMessengerIds.FailForward)]
|
||||
public async Task FailForward(IConnection connection)
|
||||
{
|
||||
TunnelTransportInfo tunnelTransportInfo = serializer.Deserialize<TunnelTransportInfo>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
if (signCaching.TryGet(tunnelTransportInfo.Remote.MachineId, out SignCacheInfo cache) && signCaching.TryGet(connection.Id, out SignCacheInfo cache1) && cache.GroupId == cache1.GroupId)
|
||||
TunnelTransportInfo info = serializer.Deserialize<TunnelTransportInfo>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
if (signCaching.TryGet(connection.Id, info.Remote.MachineId, out SignCacheInfo from, out SignCacheInfo to))
|
||||
{
|
||||
tunnelTransportInfo.Local.MachineName = cache1.MachineName;
|
||||
tunnelTransportInfo.Remote.MachineName = cache.MachineName;
|
||||
info.Local.MachineName = from.MachineName;
|
||||
info.Remote.MachineName = to.MachineName;
|
||||
await messengerSender.SendOnly(new MessageRequestWrap
|
||||
{
|
||||
Connection = cache.Connection,
|
||||
Connection = to.Connection,
|
||||
MessengerId = (ushort)TunnelMessengerIds.Fail,
|
||||
Payload = serializer.Serialize(tunnelTransportInfo)
|
||||
Payload = serializer.Serialize(info)
|
||||
}).ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
@@ -192,16 +192,16 @@ namespace linker.messenger.tunnel
|
||||
[MessengerId((ushort)TunnelMessengerIds.SuccessForward)]
|
||||
public async Task SuccessForward(IConnection connection)
|
||||
{
|
||||
TunnelTransportInfo tunnelTransportInfo = serializer.Deserialize<TunnelTransportInfo>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
if (signCaching.TryGet(tunnelTransportInfo.Remote.MachineId, out SignCacheInfo cache) && signCaching.TryGet(connection.Id, out SignCacheInfo cache1) && cache.GroupId == cache1.GroupId)
|
||||
TunnelTransportInfo info = serializer.Deserialize<TunnelTransportInfo>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
if (signCaching.TryGet(connection.Id, info.Remote.MachineId, out SignCacheInfo from, out SignCacheInfo to))
|
||||
{
|
||||
tunnelTransportInfo.Local.MachineName = cache1.MachineName;
|
||||
tunnelTransportInfo.Remote.MachineName = cache.MachineName;
|
||||
info.Local.MachineName = from.MachineName;
|
||||
info.Remote.MachineName = to.MachineName;
|
||||
await messengerSender.SendOnly(new MessageRequestWrap
|
||||
{
|
||||
Connection = cache.Connection,
|
||||
Connection = to.Connection,
|
||||
MessengerId = (ushort)TunnelMessengerIds.Success,
|
||||
Payload = serializer.Serialize(tunnelTransportInfo)
|
||||
Payload = serializer.Serialize(info)
|
||||
}).ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
@@ -210,12 +210,12 @@ namespace linker.messenger.tunnel
|
||||
[MessengerId((ushort)TunnelMessengerIds.RouteLevelForward)]
|
||||
public async Task RouteLevelForward(IConnection connection)
|
||||
{
|
||||
TunnelSetRouteLevelInfo tunnelTransportInfo = serializer.Deserialize<TunnelSetRouteLevelInfo>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
if (signCaching.TryGet(tunnelTransportInfo.MachineId, out SignCacheInfo cache) && signCaching.TryGet(connection.Id, out SignCacheInfo cache1) && cache.GroupId == cache1.GroupId)
|
||||
TunnelSetRouteLevelInfo info = serializer.Deserialize<TunnelSetRouteLevelInfo>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
if (signCaching.TryGet(connection.Id, info.MachineId, out SignCacheInfo from, out SignCacheInfo to))
|
||||
{
|
||||
await messengerSender.SendOnly(new MessageRequestWrap
|
||||
{
|
||||
Connection = cache.Connection,
|
||||
Connection = to.Connection,
|
||||
MessengerId = (ushort)TunnelMessengerIds.RouteLevel,
|
||||
Payload = connection.ReceiveRequestWrap.Payload
|
||||
}).ConfigureAwait(false);
|
||||
@@ -226,12 +226,12 @@ namespace linker.messenger.tunnel
|
||||
public void NetworkForward(IConnection connection)
|
||||
{
|
||||
string machineid = serializer.Deserialize<string>(connection.ReceiveRequestWrap.Payload.Span);
|
||||
if (signCaching.TryGet(machineid, out SignCacheInfo cacheTo) && signCaching.TryGet(connection.Id, out SignCacheInfo cacheFrom) && cacheTo.GroupId == cacheFrom.GroupId)
|
||||
if (signCaching.TryGet(connection.Id, machineid, out SignCacheInfo from, out SignCacheInfo to))
|
||||
{
|
||||
uint requestid = connection.ReceiveRequestWrap.RequestId;
|
||||
_ = messengerSender.SendReply(new MessageRequestWrap
|
||||
{
|
||||
Connection = cacheTo.Connection,
|
||||
Connection = to.Connection,
|
||||
MessengerId = (ushort)TunnelMessengerIds.Network
|
||||
}).ContinueWith(async (result) =>
|
||||
{
|
||||
|
@@ -16,9 +16,9 @@
|
||||
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
|
||||
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
|
||||
<PackageReleaseNotes>linker messenger tunnel</PackageReleaseNotes>
|
||||
<Version>1.8.2</Version>
|
||||
<AssemblyVersion>1.8.2</AssemblyVersion>
|
||||
<FileVersion>1.8.2</FileVersion>
|
||||
<Version>1.8.3</Version>
|
||||
<AssemblyVersion>1.8.3</AssemblyVersion>
|
||||
<FileVersion>1.8.3</FileVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user