From 0ad8e6ebfaad536456e6a7cdca9a152ff997010b Mon Sep 17 00:00:00 2001
From: snltty <1069410172@qq.com>
Date: Wed, 1 Jan 2025 19:01:07 +0800
Subject: [PATCH] sync
---
.github/workflows/nuget.yml | 84 +-
.../AccessApiController.cs | 1 +
linker.messenger.access/AccessDecenter.cs | 1 +
linker.messenger.access/AccessMessenger.cs | 1 +
linker.messenger.access/Entry.cs | 4 +-
.../linker.messenger.access.csproj | 1 -
.../ActionApiController.cs | 4 +-
linker.messenger.action/Entry.cs | 18 +-
linker.messenger.action/IActionStore.cs | 2 +-
linker.messenger.action/SignInArgsAction.cs | 2 +
.../linker.messenger.action.csproj | 2 +-
linker.messenger.api/ApiServer.cs | 18 +-
.../Config.cs | 2 +-
linker.messenger.api/Entry.cs | 8 +-
.../IAccessStore.cs | 2 +-
.../DecenterClientTransfer.cs | 1 +
.../linker.messenger.decenter.csproj | 1 -
.../LinkerMessengerEntry.cs | 145 +
.../linker.messenger.entry.csproj | 24 +
linker.messenger.example/Program.cs | 540 -
.../linker.messenger.example.csproj | 27 -
linker.messenger.example/snltty.pfx | Bin 4642 -> 0 bytes
linker.messenger.exroute/ExRouteTransfer.cs | 4 +-
linker.messenger.flow/Entry.cs | 78 +
.../ExternalFlow.cs | 2 +-
.../FlowApiController.cs | 57 +-
.../FlowResolver.cs | 3 +-
.../FlowTransfer.cs | 9 +-
.../flow => linker.messenger.flow}/IFlow.cs | 9 +-
.../MessengerFlow.cs | 6 +-
.../RelayFlow.cs | 14 +-
.../SForwardFlow.cs | 12 +-
.../linker.messenger.flow.csproj | 42 +
.../messenger/FlowMessenger.cs | 40 +-
.../messenger/FlowMessengerIds.cs | 2 +-
.../Config.cs | 36 +-
linker.messenger.forward/Entry.cs | 57 +
.../ForwardApiController.cs | 46 +-
.../ForwardDecenter.cs | 22 +-
.../ForwardMessenger.cs | 46 +-
.../ForwardMessengerIds.cs | 2 +-
.../ForwardTransfer.cs | 77 +-
.../IForwardClientStore.cs | 16 +
.../linker.messenger.forward.csproj | 41 +
.../proxy/ForwardProxy.cs | 2 +-
.../proxy/ForwardProxyTcp.cs | 2 +-
.../proxy/ForwardProxyTunnel.cs | 14 +-
.../proxy/ForwardProxyUdp.cs | 2 +-
linker.messenger.listen/Entry.cs | 3 +-
linker.messenger.logger/Entry.cs | 90 +
linker.messenger.logger/ILoggerStore.cs | 15 +
.../LoggerController.cs | 30 +-
.../linker.messenger.logger.csproj | 38 +
linker.messenger.pcp/Entry.cs | 8 +-
linker.messenger.relay/Entry.cs | 6 +-
.../client/RelayApiController.cs | 2 +
.../client/RelayClientTransfer.cs | 4 +-
.../transport/RelayClientTransportSelfHost.cs | 6 +-
.../server/IRelayServerNodeStore.cs | 4 +-
.../AccessSerializer.cs | 1 +
.../Entry.cs | 33 +
.../FlowSerializer.cs | 533 +
.../ForwardSerializer.cs | 269 +
.../SForwardSerializer.cs | 444 +
.../TuntapSerializer.cs | 535 +
...ker.messenger.serializer.memorypack.csproj | 5 +-
.../Config.cs | 68 +-
linker.messenger.sforward/Entry.cs | 75 +
.../client/ISForwardClientStore.cs | 21 +
.../client}/SForwardApiController.cs | 57 +-
.../client/SForwardClientTransfer.cs | 88 +-
.../client}/SForwardDecenter.cs | 28 +-
.../client/SForwardSync.cs | 27 +
.../linker.messenger.sforward.csproj | 40 +
.../messenger/SForwardMessenger.cs | 98 +-
.../messenger/SForwardMessengerIds.cs | 0
.../proxy/SForwardProxy.cs | 0
.../proxy/SForwardProxyTcp.cs | 0
.../proxy/SForwardProxyUdp.cs | 0
.../server}/ISForwardServerCahing.cs | 2 +-
.../server/ISForwardServerStore.cs | 10 +
.../server}/SForwardServerCahing.cs | 2 +-
.../server/validator/ISForwardValidator.cs | 3 +-
.../server/validator/SForwardValidator.cs | 34 +
.../validator/SForwardValidatorTransfer.cs | 48 +
linker.messenger.signin/ISignInClientStore.cs | 2 +-
.../SignInApiController.cs | 23 +-
linker.messenger.socks5/Entry.cs | 4 +-
.../Socks5ApiController.cs | 14 +-
.../ConfigApiController.cs | 5 +-
linker.messenger.store.file/Entry.cs | 36 +-
linker.messenger.store.file/FileConfig.cs | 25 -
.../api/AccessStore.cs | 5 +-
linker.messenger.store.file/api/ApiStore.cs | 4 +-
linker.messenger.store.file/api/Config.cs | 2 +-
.../common/CommonStore.cs | 28 +
linker.messenger.store.file/common/Config.cs | 9 +
linker.messenger.store.file/forward/Config.cs | 13 +
.../forward/ForwardClientStore.cs | 59 +
.../linker.messenger.store.file.csproj | 4 +
linker.messenger.store.file/logger/Config.cs | 29 +
.../logger/LoggerStore.cs | 36 +
.../messenger/Config.cs | 2 +-
.../messenger/MessengerStore.cs | 21 +-
.../sforward/Config.cs | 24 +
.../sforward/SForwardClientStore.cs | 77 +
.../sforward/SForwardServerStore.cs | 21 +
linker.messenger.store.file/signIn/Config.cs | 22 +-
.../signIn/SignInClientStore.cs | 15 +-
.../signIn/SignInSync.cs | 1 +
linker.messenger.store.file/tuntap/Config.cs | 12 +
.../tuntap/LeaseServerStore.cs | 43 +
.../tuntap/TuntapClientStore.cs | 19 +
linker.messenger.store.file/updater/Config.cs | 1 +
.../updater/UpdaterClientStore.cs | 8 +-
.../updater/UpdaterCommonStore.cs | 2 +
linker.messenger.sync/SyncApiController.cs | 5 +-
linker.messenger.sync/SyncTreansfer.cs | 1 +
.../linker.messenger.sync.csproj | 1 -
linker.messenger.tunnel/Entry.cs | 11 +-
.../TunnelApiController.cs | 2 +
.../TunnelClientExcludeIPTransfer.cs | 2 +-
.../TunnelClientMessengerAdapter.cs | 29 +-
.../linker.messenger.tunnel.csproj | 1 -
.../Config.cs | 44 +-
linker.messenger.tuntap/Entry.cs | 85 +
.../ExcludeIP.cs | 14 +-
linker.messenger.tuntap/ITuntapClientStore.cs | 10 +
.../TuntapAdapter.cs | 18 +-
.../TuntapApiController.cs | 57 +-
.../TuntapConfigTransfer.cs | 22 +-
.../TuntapDecenter.cs | 15 +-
.../TuntapPingTransfer.cs | 4 +-
.../TuntapProxy.cs | 17 +-
.../TuntapTransfer.cs | 3 +-
.../lease/ILeaseServerStore.cs | 11 +
.../lease/LeaseClientTreansfer.cs | 21 +-
.../lease/LeaseServerTreansfer.cs | 44 +-
.../linker.messenger.tuntap.csproj | 42 +
.../messenger/TuntapMessenger.cs | 44 +-
.../messenger/TuntapMessengerIds.cs | 2 +-
.../IUpdaterClientStore.cs | 2 +-
.../IUpdaterCommonStore.cs | 3 +
.../UpdaterClientTransfer.cs | 11 +-
.../UpdaterServerTransfer.cs | 2 -
.../linker.messenger.updater.csproj | 1 -
linker.messenger/Entry.cs | 1 +
linker.messenger/ICommonStore.cs | 14 +
linker.messenger/IMessengerStore.cs | 8 +-
linker.messenger/MessengerResolver.cs | 19 +-
linker.messenger/ResolverTransfer.cs | 3 +-
linker.sln | 86 +-
linker.tunnel/TunnelUpnpTransfer.cs | 58 +-
.../connection/TunnelConnectionMsQuic.cs | 2 +-
.../connection/TunnelConnectionTcp.cs | 8 +-
.../connection/TunnelConnectionUdp.cs | 1 -
linker.tunnel/transport/TransportMsQuic.cs | 4 +-
linker.tunnel/transport/TransportTcpNutssb.cs | 2 +-
linker.tunnel/transport/TransportTcpP2PNAT.cs | 2 +-
.../transport/TransportTcpPortMap.cs | 2 +-
linker.tunnel/transport/TransportUdp.cs | 2 +-
.../transport/TransportUdpPortMap.cs | 2 +-
linker.web/package-lock.json | 11523 +++-------------
linker.web/src/apis/config.js | 13 +-
linker.web/src/apis/flow.js | 8 +-
linker.web/src/apis/forward.js | 18 +-
linker.web/src/apis/logger.js | 8 +-
linker.web/src/apis/net.js | 6 -
linker.web/src/apis/running.js | 8 -
linker.web/src/apis/sforward.js | 16 +-
linker.web/src/apis/signin.js | 18 +-
linker.web/src/apis/socks5.js | 14 +-
linker.web/src/apis/sync.js | 8 +
linker.web/src/apis/tuntap.js | 24 +-
linker.web/src/apis/updater.js | 24 +-
linker.web/src/views/full/Head.vue | 2 +-
linker.web/src/views/full/devices/Access.vue | 1 +
.../src/views/full/devices/DeviceEdit.vue | 4 +-
linker.web/src/views/full/install/Client.vue | 2 +-
linker.web/src/views/full/server/Async.vue | 2 +-
linker.web/src/views/full/server/Index.vue | 9 +-
linker.web/src/views/full/status/Export.vue | 2 +-
.../views/full/status/server/ServerConfig.vue | 13 +-
linker/Program.cs | 123 +-
linker/linker.csproj | 24 +-
linker/plugins/flow/FlowStartup.cs | 68 -
linker/plugins/flow/FlowTypesLoader.cs | 16 -
linker/plugins/forward/ForwardStartup.cs | 44 -
linker/plugins/logger/LoggerStartup.cs | 46 -
linker/plugins/sforward/SForwardConfigSync.cs | 25 -
.../sforward/SForwardServerConfigTransfer.cs | 18 -
linker/plugins/sforward/SForwardStartup.cs | 76 -
.../plugins/sforward/validator/Validator.cs | 38 -
linker/plugins/tuntap/TuntapStartup.cs | 68 -
publish-docker.sh | 2 +-
publish.bat | 4 +-
version.txt | 2 +-
ymls/nuget.yml | 84 +-
ymls/publish-docker.sh | 2 +-
199 files changed, 5788 insertions(+), 12035 deletions(-)
rename {linker.messenger.access => linker.messenger.api}/Config.cs (99%)
rename {linker.messenger.access => linker.messenger.api}/IAccessStore.cs (89%)
create mode 100644 linker.messenger.entry/LinkerMessengerEntry.cs
delete mode 100644 linker.messenger.example/Program.cs
delete mode 100644 linker.messenger.example/linker.messenger.example.csproj
delete mode 100644 linker.messenger.example/snltty.pfx
create mode 100644 linker.messenger.flow/Entry.cs
rename {linker/plugins/flow => linker.messenger.flow}/ExternalFlow.cs (96%)
rename linker/plugins/flow/FlowClientApiController.cs => linker.messenger.flow/FlowApiController.cs (61%)
rename {linker/plugins/flow => linker.messenger.flow}/FlowResolver.cs (98%)
rename {linker/plugins/flow => linker.messenger.flow}/FlowTransfer.cs (60%)
rename {linker/plugins/flow => linker.messenger.flow}/IFlow.cs (76%)
rename {linker/plugins/flow => linker.messenger.flow}/MessengerFlow.cs (94%)
rename {linker/plugins/flow => linker.messenger.flow}/RelayFlow.cs (95%)
rename {linker/plugins/flow => linker.messenger.flow}/SForwardFlow.cs (96%)
create mode 100644 linker.messenger.flow/linker.messenger.flow.csproj
rename {linker/plugins/flow => linker.messenger.flow}/messenger/FlowMessenger.cs (68%)
rename {linker/plugins/flow => linker.messenger.flow}/messenger/FlowMessengerIds.cs (81%)
rename {linker/plugins/forward/config => linker.messenger.forward}/Config.cs (73%)
create mode 100644 linker.messenger.forward/Entry.cs
rename {linker/plugins/forward => linker.messenger.forward}/ForwardApiController.cs (73%)
rename {linker/plugins/forward => linker.messenger.forward}/ForwardDecenter.cs (66%)
rename {linker/plugins/forward/messenger => linker.messenger.forward}/ForwardMessenger.cs (81%)
rename {linker/plugins/forward/messenger => linker.messenger.forward}/ForwardMessengerIds.cs (87%)
rename {linker/plugins/forward => linker.messenger.forward}/ForwardTransfer.cs (70%)
create mode 100644 linker.messenger.forward/IForwardClientStore.cs
create mode 100644 linker.messenger.forward/linker.messenger.forward.csproj
rename {linker/plugins/forward => linker.messenger.forward}/proxy/ForwardProxy.cs (99%)
rename {linker/plugins/forward => linker.messenger.forward}/proxy/ForwardProxyTcp.cs (99%)
rename {linker/plugins/forward => linker.messenger.forward}/proxy/ForwardProxyTunnel.cs (94%)
rename {linker/plugins/forward => linker.messenger.forward}/proxy/ForwardProxyUdp.cs (99%)
create mode 100644 linker.messenger.logger/Entry.cs
create mode 100644 linker.messenger.logger/ILoggerStore.cs
rename {linker/plugins/logger => linker.messenger.logger}/LoggerController.cs (74%)
create mode 100644 linker.messenger.logger/linker.messenger.logger.csproj
create mode 100644 linker.messenger.serializer.memorypack/FlowSerializer.cs
create mode 100644 linker.messenger.serializer.memorypack/ForwardSerializer.cs
create mode 100644 linker.messenger.serializer.memorypack/SForwardSerializer.cs
create mode 100644 linker.messenger.serializer.memorypack/TuntapSerializer.cs
rename {linker/plugins/sforward/config => linker.messenger.sforward}/Config.cs (79%)
create mode 100644 linker.messenger.sforward/Entry.cs
create mode 100644 linker.messenger.sforward/client/ISForwardClientStore.cs
rename {linker/plugins/sforward => linker.messenger.sforward/client}/SForwardApiController.cs (72%)
rename linker/plugins/sforward/SForwardTransfer.cs => linker.messenger.sforward/client/SForwardClientTransfer.cs (72%)
rename {linker/plugins/sforward => linker.messenger.sforward/client}/SForwardDecenter.cs (64%)
create mode 100644 linker.messenger.sforward/client/SForwardSync.cs
create mode 100644 linker.messenger.sforward/linker.messenger.sforward.csproj
rename {linker/plugins/sforward => linker.messenger.sforward}/messenger/SForwardMessenger.cs (85%)
rename {linker/plugins/sforward => linker.messenger.sforward}/messenger/SForwardMessengerIds.cs (100%)
rename {linker/plugins/sforward => linker.messenger.sforward}/proxy/SForwardProxy.cs (100%)
rename {linker/plugins/sforward => linker.messenger.sforward}/proxy/SForwardProxyTcp.cs (100%)
rename {linker/plugins/sforward => linker.messenger.sforward}/proxy/SForwardProxyUdp.cs (100%)
rename {linker/plugins/sforward/config => linker.messenger.sforward/server}/ISForwardServerCahing.cs (92%)
create mode 100644 linker.messenger.sforward/server/ISForwardServerStore.cs
rename {linker/plugins/sforward/config => linker.messenger.sforward/server}/SForwardServerCahing.cs (98%)
rename linker/plugins/sforward/validator/IValidator.cs => linker.messenger.sforward/server/validator/ISForwardValidator.cs (83%)
create mode 100644 linker.messenger.sforward/server/validator/SForwardValidator.cs
create mode 100644 linker.messenger.sforward/server/validator/SForwardValidatorTransfer.cs
create mode 100644 linker.messenger.store.file/common/CommonStore.cs
create mode 100644 linker.messenger.store.file/common/Config.cs
create mode 100644 linker.messenger.store.file/forward/Config.cs
create mode 100644 linker.messenger.store.file/forward/ForwardClientStore.cs
create mode 100644 linker.messenger.store.file/logger/Config.cs
create mode 100644 linker.messenger.store.file/logger/LoggerStore.cs
create mode 100644 linker.messenger.store.file/sforward/Config.cs
create mode 100644 linker.messenger.store.file/sforward/SForwardClientStore.cs
create mode 100644 linker.messenger.store.file/sforward/SForwardServerStore.cs
create mode 100644 linker.messenger.store.file/tuntap/Config.cs
create mode 100644 linker.messenger.store.file/tuntap/LeaseServerStore.cs
create mode 100644 linker.messenger.store.file/tuntap/TuntapClientStore.cs
rename linker/plugins/tuntap/config/config.cs => linker.messenger.tuntap/Config.cs (88%)
create mode 100644 linker.messenger.tuntap/Entry.cs
rename {linker/plugins/tuntap => linker.messenger.tuntap}/ExcludeIP.cs (63%)
create mode 100644 linker.messenger.tuntap/ITuntapClientStore.cs
rename {linker/plugins/tuntap => linker.messenger.tuntap}/TuntapAdapter.cs (93%)
rename {linker/plugins/tuntap => linker.messenger.tuntap}/TuntapApiController.cs (82%)
rename {linker/plugins/tuntap => linker.messenger.tuntap}/TuntapConfigTransfer.cs (86%)
rename {linker/plugins/tuntap => linker.messenger.tuntap}/TuntapDecenter.cs (91%)
rename {linker/plugins/tuntap => linker.messenger.tuntap}/TuntapPingTransfer.cs (97%)
rename {linker/plugins/tuntap => linker.messenger.tuntap}/TuntapProxy.cs (94%)
rename {linker/plugins/tuntap => linker.messenger.tuntap}/TuntapTransfer.cs (98%)
create mode 100644 linker.messenger.tuntap/lease/ILeaseServerStore.cs
rename {linker/plugins/tuntap => linker.messenger.tuntap}/lease/LeaseClientTreansfer.cs (84%)
rename {linker/plugins/tuntap => linker.messenger.tuntap}/lease/LeaseServerTreansfer.cs (89%)
create mode 100644 linker.messenger.tuntap/linker.messenger.tuntap.csproj
rename {linker/plugins/tuntap => linker.messenger.tuntap}/messenger/TuntapMessenger.cs (90%)
rename {linker/plugins/tuntap => linker.messenger.tuntap}/messenger/TuntapMessengerIds.cs (91%)
create mode 100644 linker.messenger/ICommonStore.cs
delete mode 100644 linker.web/src/apis/net.js
delete mode 100644 linker.web/src/apis/running.js
create mode 100644 linker.web/src/apis/sync.js
delete mode 100644 linker/plugins/flow/FlowStartup.cs
delete mode 100644 linker/plugins/flow/FlowTypesLoader.cs
delete mode 100644 linker/plugins/forward/ForwardStartup.cs
delete mode 100644 linker/plugins/logger/LoggerStartup.cs
delete mode 100644 linker/plugins/sforward/SForwardConfigSync.cs
delete mode 100644 linker/plugins/sforward/SForwardServerConfigTransfer.cs
delete mode 100644 linker/plugins/sforward/SForwardStartup.cs
delete mode 100644 linker/plugins/sforward/validator/Validator.cs
delete mode 100644 linker/plugins/tuntap/TuntapStartup.cs
diff --git a/.github/workflows/nuget.yml b/.github/workflows/nuget.yml
index 42b6923d..2d1bfab4 100644
--- a/.github/workflows/nuget.yml
+++ b/.github/workflows/nuget.yml
@@ -22,24 +22,60 @@ jobs:
- name: Build
run: |
dotnet build ./linker.libs -c release
- dotnet build ./linker.tunnel -c release
- dotnet build ./linker.tun -c release
dotnet build ./linker.messenger -c release
- dotnet build ./linker.messenger.relay -c release
- dotnet build ./linker.messenger.signin -c release
- dotnet build ./linker.messenger.tunnel -c release
+ dotnet build ./linker.messenger.access -c release
+ dotnet build ./linker.messenger.action -c release
+ dotnet build ./linker.messenger.api -c release
+ dotnet build ./linker.messenger.channel -c release
dotnet build ./linker.messenger.decenter -c release
+ dotnet build ./linker.messenger.entry -c release
+ dotnet build ./linker.messenger.exroute -c release
+ dotnet build ./linker.messenger.flow -c release
+ dotnet build ./linker.messenger.forward -c release
+ dotnet build ./linker.messenger.listen -c release
+ dotnet build ./linker.messenger.logger -c release
+ dotnet build ./linker.messenger.pcp -c release
+ dotnet build ./linker.messenger.relay -c release
+ dotnet build ./linker.messenger.serializer.memorypack -c release
+ dotnet build ./linker.messenger.sforward -c release
+ dotnet build ./linker.messenger.signin -c release
+ dotnet build ./linker.messenger.socks5 -c release
+ dotnet build ./linker.messenger.store.file -c release
+ dotnet build ./linker.messenger.sync -c release
+ dotnet build ./linker.messenger.tunnel -c release
+ dotnet build ./linker.messenger.tuntap -c release
+ dotnet build ./linker.messenger.updater -c release
+ dotnet build ./linker.tun -c release
+ dotnet build ./linker.tunnel -c release
- name: Pack
run: |
dotnet pack ./linker.libs -c release
- dotnet pack ./linker.tunnel -c release
- dotnet pack ./linker.tun -c release
dotnet pack ./linker.messenger -c release
- dotnet pack ./linker.messenger.relay -c release
- dotnet pack ./linker.messenger.signin -c release
- dotnet pack ./linker.messenger.tunnel -c release
+ dotnet pack ./linker.messenger.access -c release
+ dotnet pack ./linker.messenger.action -c release
+ dotnet pack ./linker.messenger.api -c release
+ dotnet pack ./linker.messenger.channel -c release
dotnet pack ./linker.messenger.decenter -c release
+ dotnet pack ./linker.messenger.entry -c release
+ dotnet pack ./linker.messenger.exroute -c release
+ dotnet pack ./linker.messenger.flow -c release
+ dotnet pack ./linker.messenger.forward -c release
+ dotnet pack ./linker.messenger.listen -c release
+ dotnet pack ./linker.messenger.logger -c release
+ dotnet pack ./linker.messenger.pcp -c release
+ dotnet pack ./linker.messenger.relay -c release
+ dotnet pack ./linker.messenger.serializer.memorypack -c release
+ dotnet pack ./linker.messenger.sforward -c release
+ dotnet pack ./linker.messenger.signin -c release
+ dotnet pack ./linker.messenger.socks5 -c release
+ dotnet pack ./linker.messenger.store.file -c release
+ dotnet pack ./linker.messenger.sync -c release
+ dotnet pack ./linker.messenger.tunnel -c release
+ dotnet pack ./linker.messenger.tuntap -c release
+ dotnet pack ./linker.messenger.updater -c release
+ dotnet pack ./linker.tun -c release
+ dotnet pack ./linker.tunnel -c release
- name: Install Nuget
uses: nuget/setup-nuget@v1
@@ -48,11 +84,29 @@ jobs:
- name: Push
run: |
- nuget push ./linker.tunnel/bin/release/linker.tunnel.1.6.4.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol
nuget push ./linker.libs/bin/release/linker.libs.1.6.4.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol
- nuget push ./linker.tun/bin/release/linker.tun.1.6.4.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol
nuget push ./linker.messenger/bin/release/linker.messenger.1.6.4.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol
- nuget push ./linker.messenger/bin/release/linker.messenger.relay.1.6.4.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol
- nuget push ./linker.messenger/bin/release/linker.messenger.signin.1.6.4.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol
- nuget push ./linker.messenger/bin/release/linker.messenger.tunnel.1.6.4.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol
+ nuget push ./linker.messenger/bin/release/linker.messenger.access.1.6.4.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol
+ nuget push ./linker.messenger/bin/release/linker.messenger.action.1.6.4.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol
+ nuget push ./linker.messenger/bin/release/linker.messenger.api.1.6.4.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol
+ nuget push ./linker.messenger/bin/release/linker.messenger.channel.1.6.4.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol
nuget push ./linker.messenger/bin/release/linker.messenger.decenter.1.6.4.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol
+ nuget push ./linker.messenger/bin/release/linker.messenger.entry.1.6.4.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol
+ nuget push ./linker.messenger/bin/release/linker.messenger.exroute.1.6.4.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol
+ nuget push ./linker.messenger/bin/release/linker.messenger.flow.1.6.4.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol
+ nuget push ./linker.messenger/bin/release/linker.messenger.forward.1.6.4.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol
+ nuget push ./linker.messenger/bin/release/linker.messenger.listen.1.6.4.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol
+ nuget push ./linker.messenger/bin/release/linker.messenger.logger.1.6.4.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol
+ nuget push ./linker.messenger/bin/release/linker.messenger.pcp.1.6.4.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol
+ nuget push ./linker.messenger/bin/release/linker.messenger.relay.1.6.4.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol
+ nuget push ./linker.messenger/bin/release/linker.messenger.serializer.memorypack.1.6.4.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol
+ nuget push ./linker.messenger/bin/release/linker.messenger.sforward.1.6.4.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol
+ nuget push ./linker.messenger/bin/release/linker.messenger.signin.1.6.4.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol
+ nuget push ./linker.messenger/bin/release/linker.messenger.socks5.1.6.4.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol
+ nuget push ./linker.messenger/bin/release/linker.messenger.store.file.1.6.4.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol
+ nuget push ./linker.messenger/bin/release/linker.messenger.sync.1.6.4.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol
+ nuget push ./linker.messenger/bin/release/linker.messenger.tunnel.1.6.4.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol
+ nuget push ./linker.messenger/bin/release/linker.messenger.tuntap.1.6.4.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol
+ nuget push ./linker.messenger/bin/release/linker.messenger.updater.1.6.4.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol
+ nuget push ./linker.tun/bin/release/linker.tun.1.6.4.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol
+ nuget push ./linker.tunnel/bin/release/linker.tunnel.1.6.4.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol
diff --git a/linker.messenger.access/AccessApiController.cs b/linker.messenger.access/AccessApiController.cs
index 1653c419..b4a62050 100644
--- a/linker.messenger.access/AccessApiController.cs
+++ b/linker.messenger.access/AccessApiController.cs
@@ -2,6 +2,7 @@
using linker.libs.extends;
using linker.libs;
using linker.messenger.signin;
+using linker.messenger.api;
namespace linker.messenger.access
{
diff --git a/linker.messenger.access/AccessDecenter.cs b/linker.messenger.access/AccessDecenter.cs
index e93b6013..40a4d39f 100644
--- a/linker.messenger.access/AccessDecenter.cs
+++ b/linker.messenger.access/AccessDecenter.cs
@@ -1,4 +1,5 @@
using linker.libs;
+using linker.messenger.api;
using linker.messenger.decenter;
using linker.messenger.signin;
diff --git a/linker.messenger.access/AccessMessenger.cs b/linker.messenger.access/AccessMessenger.cs
index 7a5a6348..5f5bd239 100644
--- a/linker.messenger.access/AccessMessenger.cs
+++ b/linker.messenger.access/AccessMessenger.cs
@@ -1,4 +1,5 @@
using linker.libs;
+using linker.messenger.api;
using linker.messenger.signin;
namespace linker.messenger.access
diff --git a/linker.messenger.access/Entry.cs b/linker.messenger.access/Entry.cs
index a59cda88..83013170 100644
--- a/linker.messenger.access/Entry.cs
+++ b/linker.messenger.access/Entry.cs
@@ -1,6 +1,4 @@
-using linker.libs;
-using linker.libs.web;
-using linker.messenger.access;
+using linker.messenger.access;
using linker.messenger.decenter;
using Microsoft.Extensions.DependencyInjection;
namespace linker.messenger.api
diff --git a/linker.messenger.access/linker.messenger.access.csproj b/linker.messenger.access/linker.messenger.access.csproj
index caf17e9e..2efb5bae 100644
--- a/linker.messenger.access/linker.messenger.access.csproj
+++ b/linker.messenger.access/linker.messenger.access.csproj
@@ -36,6 +36,5 @@
-
diff --git a/linker.messenger.action/ActionApiController.cs b/linker.messenger.action/ActionApiController.cs
index ad37b845..be594bbe 100644
--- a/linker.messenger.action/ActionApiController.cs
+++ b/linker.messenger.action/ActionApiController.cs
@@ -1,5 +1,6 @@
using linker.libs.api;
using linker.libs.extends;
+using linker.messenger.api;
namespace linker.messenger.action
{
@@ -13,12 +14,13 @@ namespace linker.messenger.action
}
+ [Access(AccessValue.Action)]
public bool SetArgs(ApiControllerParamsInfo param)
{
actionStore.SetActionArg(param.Content);
return true;
}
-
+ [Access(AccessValue.Action)]
public bool SetServerArgs(ApiControllerParamsInfo param)
{
actionStore.SetActionArgs(param.Content.DeJson>());
diff --git a/linker.messenger.action/Entry.cs b/linker.messenger.action/Entry.cs
index f149b185..0e5e96b5 100644
--- a/linker.messenger.action/Entry.cs
+++ b/linker.messenger.action/Entry.cs
@@ -1,4 +1,7 @@
using linker.messenger.action;
+using linker.messenger.relay.server.validator;
+using linker.messenger.sforward.server.validator;
+using linker.messenger.signin.args;
using Microsoft.Extensions.DependencyInjection;
namespace linker.messenger.api
{
@@ -10,15 +13,16 @@ namespace linker.messenger.api
serviceCollection.AddSingleton();
serviceCollection.AddSingleton();
- serviceCollection.AddSingleton();
- serviceCollection.AddSingleton();
return serviceCollection;
}
public static ServiceProvider UseActionClient(this ServiceProvider serviceProvider)
{
- ApiServer apiServer=serviceProvider.GetService();
+ IApiServer apiServer = serviceProvider.GetService();
apiServer.AddPlugins(new List { serviceProvider.GetService() });
+ SignInArgsTransfer signInArgsTransfer = serviceProvider.GetService();
+ signInArgsTransfer.AddArgs(new List { serviceProvider.GetService() });
+
return serviceProvider;
}
@@ -32,6 +36,14 @@ namespace linker.messenger.api
}
public static ServiceProvider UseActionServer(this ServiceProvider serviceProvider)
{
+ SignInArgsTransfer signInArgsTransfer = serviceProvider.GetService();
+ signInArgsTransfer.AddArgs(new List { serviceProvider.GetService() });
+
+ RelayServerValidatorTransfer relayServerValidatorTransfer = serviceProvider.GetService();
+ relayServerValidatorTransfer.AddValidators(new List { serviceProvider.GetService() });
+
+ SForwardValidatorTransfer sForwardValidatorTransfer = serviceProvider.GetService();
+ sForwardValidatorTransfer.AddValidators(new List { serviceProvider.GetService() });
return serviceProvider;
}
}
diff --git a/linker.messenger.action/IActionStore.cs b/linker.messenger.action/IActionStore.cs
index 74a2f01a..495f9321 100644
--- a/linker.messenger.action/IActionStore.cs
+++ b/linker.messenger.action/IActionStore.cs
@@ -2,7 +2,7 @@
{
public sealed class ActionInfo
{
- public string Arg { get; set; }
+ public string Arg { get; set; } = string.Empty;
public Dictionary Args { get; set; } = new Dictionary();
}
public interface IActionStore
diff --git a/linker.messenger.action/SignInArgsAction.cs b/linker.messenger.action/SignInArgsAction.cs
index f03b300c..46c57852 100644
--- a/linker.messenger.action/SignInArgsAction.cs
+++ b/linker.messenger.action/SignInArgsAction.cs
@@ -1,5 +1,7 @@
using linker.libs.extends;
using linker.messenger.relay.server.validator;
+using linker.messenger.sforward;
+using linker.messenger.sforward.server.validator;
using linker.messenger.signin;
using linker.messenger.signin.args;
using System.Net;
diff --git a/linker.messenger.action/linker.messenger.action.csproj b/linker.messenger.action/linker.messenger.action.csproj
index 626f4b1d..d5cd6e45 100644
--- a/linker.messenger.action/linker.messenger.action.csproj
+++ b/linker.messenger.action/linker.messenger.action.csproj
@@ -34,8 +34,8 @@
+
-
diff --git a/linker.messenger.api/ApiServer.cs b/linker.messenger.api/ApiServer.cs
index 243c95c9..6b196e00 100644
--- a/linker.messenger.api/ApiServer.cs
+++ b/linker.messenger.api/ApiServer.cs
@@ -1,4 +1,5 @@
-using linker.libs.api;
+using linker.libs;
+using linker.libs.api;
using System.Reflection;
namespace linker.messenger.api
@@ -8,8 +9,10 @@ namespace linker.messenger.api
///
public sealed partial class ApiServer : libs.api.ApiServer, IApiServer
{
- public ApiServer()
+ private readonly IAccessStore accessStore;
+ public ApiServer(IAccessStore accessStore)
{
+ this.accessStore = accessStore;
}
///
@@ -19,6 +22,8 @@ namespace linker.messenger.api
{
Type voidType = typeof(void);
+ LoggerHelper.Instance.Info($"add api {string.Join(",", list.Select(c => c.GetType().Name))}");
+
foreach (IApiController obj in list)
{
Type type = obj.GetType();
@@ -30,14 +35,14 @@ namespace linker.messenger.api
{
bool istask = method.ReturnType.GetProperty("IsCompleted") != null && method.ReturnType.GetMethod("GetAwaiter") != null;
bool isTaskResult = method.ReturnType.GetProperty("Result") != null;
- /*
- ClientApiAccessAttribute accessAttr = method.GetCustomAttribute();
+
+ AccessAttribute accessAttr = method.GetCustomAttribute();
ulong access = 0;
if (accessAttr != null)
{
access = (ulong)accessAttr.Value;
}
- */
+
plugins.TryAdd(key, new PluginPathCacheInfo
{
IsVoid = method.ReturnType == voidType,
@@ -54,8 +59,7 @@ namespace linker.messenger.api
}
private bool HasAccess(ulong access)
{
- return true;
- //return accessTransfer.HasAccess((ClientApiAccess)access);
+ return accessStore.HasAccess((AccessValue)access);
}
}
}
diff --git a/linker.messenger.access/Config.cs b/linker.messenger.api/Config.cs
similarity index 99%
rename from linker.messenger.access/Config.cs
rename to linker.messenger.api/Config.cs
index 3ff41254..41a6f8f4 100644
--- a/linker.messenger.access/Config.cs
+++ b/linker.messenger.api/Config.cs
@@ -1,4 +1,4 @@
-namespace linker.messenger.access
+namespace linker.messenger.api
{
[AttributeUsage(AttributeTargets.Method, Inherited = false, AllowMultiple = false)]
public sealed class AccessAttribute : Attribute
diff --git a/linker.messenger.api/Entry.cs b/linker.messenger.api/Entry.cs
index 00dc38fd..fd9a7f7d 100644
--- a/linker.messenger.api/Entry.cs
+++ b/linker.messenger.api/Entry.cs
@@ -14,17 +14,19 @@ namespace linker.messenger.api
public static ServiceProvider UseApiClient(this ServiceProvider serviceProvider)
{
IApiStore apiStore = serviceProvider.GetService();
- if (apiStore.Info.ApiPort > 0)
+ IAccessStore accessStore = serviceProvider.GetService();
+ if (apiStore.Info.ApiPort > 0 && accessStore.HasAccess(AccessValue.Api))
{
- LoggerHelper.Instance.Info($"start client api server");
+ LoggerHelper.Instance.Info($"start client api");
IApiServer server = serviceProvider.GetService();
server.Websocket(apiStore.Info.ApiPort, apiStore.Info.ApiPassword);
LoggerHelper.Instance.Warning($"client api listen:{apiStore.Info.ApiPort}");
LoggerHelper.Instance.Warning($"client api password:{apiStore.Info.ApiPassword}");
}
- if (apiStore.Info.WebPort > 0)
+ if (apiStore.Info.WebPort > 0 && accessStore.HasAccess(AccessValue.Web))
{
+ LoggerHelper.Instance.Info($"start client web");
IWebServer webServer = serviceProvider.GetService();
webServer.Start(apiStore.Info.WebPort, apiStore.Info.WebRoot);
LoggerHelper.Instance.Warning($"client web listen:{apiStore.Info.WebPort}");
diff --git a/linker.messenger.access/IAccessStore.cs b/linker.messenger.api/IAccessStore.cs
similarity index 89%
rename from linker.messenger.access/IAccessStore.cs
rename to linker.messenger.api/IAccessStore.cs
index 402dba1f..bbace9b4 100644
--- a/linker.messenger.access/IAccessStore.cs
+++ b/linker.messenger.api/IAccessStore.cs
@@ -1,4 +1,4 @@
-namespace linker.messenger.access
+namespace linker.messenger.api
{
public interface IAccessStore
{
diff --git a/linker.messenger.decenter/DecenterClientTransfer.cs b/linker.messenger.decenter/DecenterClientTransfer.cs
index 7434da27..5b0d6eff 100644
--- a/linker.messenger.decenter/DecenterClientTransfer.cs
+++ b/linker.messenger.decenter/DecenterClientTransfer.cs
@@ -27,6 +27,7 @@ namespace linker.messenger.decenter
public void AddDecenters(List list)
{
+ LoggerHelper.Instance.Info($"add decenter {string.Join(",", list.Select(c => c.GetType().Name))}");
syncs = syncs.Concat(list).Distinct().ToList();
}
diff --git a/linker.messenger.decenter/linker.messenger.decenter.csproj b/linker.messenger.decenter/linker.messenger.decenter.csproj
index b7ba5d52..c5fdffea 100644
--- a/linker.messenger.decenter/linker.messenger.decenter.csproj
+++ b/linker.messenger.decenter/linker.messenger.decenter.csproj
@@ -33,7 +33,6 @@
-
diff --git a/linker.messenger.entry/LinkerMessengerEntry.cs b/linker.messenger.entry/LinkerMessengerEntry.cs
new file mode 100644
index 00000000..daeb1675
--- /dev/null
+++ b/linker.messenger.entry/LinkerMessengerEntry.cs
@@ -0,0 +1,145 @@
+using linker.messenger.api;
+using linker.messenger.decenter;
+using linker.messenger.exroute;
+using linker.messenger.flow;
+using linker.messenger.forward;
+using linker.messenger.listen;
+using linker.messenger.logger;
+using Microsoft.Extensions.DependencyInjection;
+using linker.messenger.pcp;
+using linker.messenger.relay;
+using linker.messenger.sforward;
+using linker.messenger.signin;
+using linker.messenger.socks5;
+using linker.messenger.sync;
+using linker.messenger.tunnel;
+using linker.messenger.tuntap;
+using linker.messenger.updater;
+using linker.messenger.store.file;
+using linker.messenger.serializer.memorypack;
+using linker.libs;
+
+namespace linker.messenger.entry
+{
+ public static class LinkerMessengerEntry
+ {
+ private static ServiceCollection serviceCollection;
+ private static ServiceProvider serviceProvider;
+ private static OperatingManager inited = new OperatingManager();
+ private static OperatingManager builded = new OperatingManager();
+
+ ///
+ /// 开始初始化
+ ///
+ ///
+ public static void Initialize()
+ {
+ if (inited.StartOperation() == false) return;
+
+ serviceCollection = new ServiceCollection();
+
+ serviceCollection
+ //日志
+ .AddLoggerClient()
+ //api接口和web
+ .AddApiClient()
+ //路由排除
+ .AddExRoute()
+
+ //服务器监听
+ .AddListen()
+
+ //权限
+ .AddAccessClient().AddAccessServer()
+ //自定义验证
+ .AddActionClient().AddActionServer()
+ //数据同步
+ .AddDecenterClient().AddDecenterServer()
+ //端口转发
+ .AddForwardClient().AddForwardServer()
+ //pcp
+ .AddPcpClient().AddPcpServer()
+ //中继
+ .AddRelayClient().AddRelayServer()
+ //服务器穿透
+ .AddSForwardClient().AddSForwardServer()
+ //登录
+ .AddSignInClient().AddSignInServer()
+ //socks5
+ .AddSocks5Client().AddSocks5Server()
+ //同步
+ .AddSyncClient().AddSyncServer()
+ //打洞
+ .AddTunnelClient().AddTunnelServer()
+ //虚拟网卡
+ .AddTuntapClient().AddTuntapServer()
+ //更新
+ .AddUpdaterClient().AddUpdaterServer()
+ //流量统计
+ .AddFlowClient().AddFlowServer()
+
+ //信标
+ .AddMessenger()
+ //持久化,文件
+ .AddStoreFile()
+ //序列化 MemoryPack
+ .AddSerializerMemoryPack();
+ }
+
+ ///
+ /// 注入
+ ///
+ ///
+ public static void AddService() where TService : class
+ {
+ serviceCollection.AddSingleton();
+ }
+ ///
+ /// 注入
+ ///
+ ///
+ ///
+ public static void AddService() where TService : class where TImplementation : class, TService
+ {
+ serviceCollection.AddSingleton();
+ }
+
+ ///
+ /// 运行起来
+ ///
+ ///
+ public static void Build()
+ {
+ if (builded.StartOperation() == false) return;
+
+ serviceProvider = serviceCollection.BuildServiceProvider();
+ serviceProvider.UseMessenger().UseStoreFile().UseSerializerMemoryPack();
+
+ ICommonStore commonStore = serviceProvider.GetService();
+ if ((commonStore.Modes & CommonModes.Server) == CommonModes.Server)
+ {
+ serviceProvider.UseAccessServer().UseActionServer().UseDecenterServer().UseForwardServer().UsePcpServer().UseRelayServer().UseSForwardServer().UseSignInServer().UseSocks5Server().UseSyncServer().UseTunnelServer().UseTuntapServer().UseUpdaterServer().UseFlowServer();
+
+ serviceProvider.UseListen();
+ }
+
+ if ((commonStore.Modes & CommonModes.Client) == CommonModes.Client)
+ {
+ serviceProvider.UseLoggerClient().UseApiClient().UseExRoute().UseAccessClient().UseActionClient().UseDecenterClient().UseForwardClient().UsePcpClient().UseRelayClient().UseSForwardClient().UseSocks5Client().UseSyncClient().UseTunnelClient().UseTuntapClient().UseUpdaterClient().UseFlowClient();
+
+ serviceProvider.UseSignInClient();
+ }
+ }
+
+ ///
+ /// 获取服务
+ ///
+ ///
+ ///
+ public static TService GetService() where TService : class
+ {
+ return serviceProvider.GetService();
+ }
+
+ }
+}
diff --git a/linker.messenger.entry/linker.messenger.entry.csproj b/linker.messenger.entry/linker.messenger.entry.csproj
index 5f73c79d..3263936a 100644
--- a/linker.messenger.entry/linker.messenger.entry.csproj
+++ b/linker.messenger.entry/linker.messenger.entry.csproj
@@ -30,4 +30,28 @@
false
True
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/linker.messenger.example/Program.cs b/linker.messenger.example/Program.cs
deleted file mode 100644
index 0bd0e852..00000000
--- a/linker.messenger.example/Program.cs
+++ /dev/null
@@ -1,540 +0,0 @@
-using linker.libs;
-using linker.libs.extends;
-using linker.messenger.relay.client;
-using linker.messenger.relay.client.transport;
-using linker.messenger.relay.messenger;
-using linker.messenger.relay.server;
-using linker.messenger.relay.server.caching;
-using linker.messenger.relay.server.validator;
-using linker.messenger.signin;
-using linker.messenger.signin.args;
-using linker.messenger.tunnel;
-using linker.plugins.tunnel;
-using linker.tunnel;
-using linker.tunnel.connection;
-using linker.tunnel.transport;
-using System.Net;
-using System.Net.Sockets;
-using System.Security.Cryptography.X509Certificates;
-using System.Text;
-
-namespace linker.messenger.example
-{
- internal class Program
- {
- public static PublicConfigInfo publicConfigInfo = new PublicConfigInfo
- {
- Certificate = new X509Certificate2("./snltty.pfx", "oeq9tw1o"),
- TunnelTransports = new List
- {
- new TunnelTransportItemInfo{ BufferSize=3, Disabled=false, DisableReverse=false, DisableSSL=false, Name="udp", Order=1, ProtocolType= TunnelProtocolType.Udp.ToString(), Reverse=true, SSL=true },
- // new TunnelTransportItemInfo{ BufferSize=3, Disabled=false, DisableReverse=false, DisableSSL=false, Name="UdpPortMap", Order=2, ProtocolType= TunnelProtocolType.Udp.ToString(), Reverse=true, SSL=true },
- new TunnelTransportItemInfo{ BufferSize=3, Disabled=false, DisableReverse=false, DisableSSL=false, Name="TcpP2PNAT", Order=3, ProtocolType= TunnelProtocolType.Tcp.ToString(), Reverse=true, SSL=true },
- // new TunnelTransportItemInfo{ BufferSize=3, Disabled=false, DisableReverse=false, DisableSSL=false, Name="TransportUdpPortMap", Order=4, ProtocolType= TunnelProtocolType.Tcp.ToString(), Reverse=true, SSL=true },
- // new TunnelTransportItemInfo{ BufferSize=3, Disabled=false, DisableReverse=false, DisableSSL=false, Name="TcpPortMap", Order=5, ProtocolType= TunnelProtocolType.Tcp.ToString(), Reverse=true, SSL=true },
- }
- };
-
- static async Task Main(string[] args)
- {
- LoggerConsole();
-
- Console.WriteLine($"输入server 或者 client:");
- string type = Console.ReadLine();
-
- if (type == "server")
- {
- Server();
- }
- else
- {
- await Client();
- }
-
- Console.ReadLine();
- }
-
- public sealed class TunnelConnectionReceiveCallback : ITunnelConnectionReceiveCallback
- {
- public async Task Closed(ITunnelConnection connection, object state)
- {
- Console.WriteLine($"{(connection.Type == TunnelType.P2P ? "打洞" : "中继")}关闭,收到 {connection.IPEndPoint} {connection.RemoteMachineId} 的关闭");
- await Task.CompletedTask;
- }
-
- public async Task Receive(ITunnelConnection connection, ReadOnlyMemory data, object state)
- {
- Console.WriteLine($"{(connection.Type == TunnelType.P2P ? "打洞" : "中继")}数据,收到 {connection.IPEndPoint} {connection.RemoteMachineId} 的数据:{data.Span.GetString()}");
- await Task.CompletedTask;
- }
- }
- private static async Task Client()
- {
- //序列化
- ISerializer serializer = new Serializer();
-
- //信标发送和接受
- IMessengerSender messengerSender = new MessengerSender();
- IMessengerResolver messengerResolver = new MessengerResolver(messengerSender);
-
- //打洞相关
- TunnelClientExcludeIPTransfer tunnelExcludeIPTransfer = new TunnelClientExcludeIPTransfer();
- //tunnelExcludeIPTransfer.LoadTunnelExcludeIPs(new List());
- TunnelClientMessengerAdapter tunnelMessengerAdapter = new TunnelClientMessengerAdapter(messengerSender, tunnelExcludeIPTransfer, serializer, new TunnelMessengerAdapterStore());
- TunnelTransfer tunnelTransfer = new TunnelTransfer(tunnelMessengerAdapter);
- tunnelTransfer.SetConnectedCallback("default", (connection) =>
- {
- Console.WriteLine($"打洞成功,收到 {connection.IPEndPoint} {connection.RemoteMachineId} 的连接");
- connection.BeginReceive(new TunnelConnectionReceiveCallback(), null);
- });
- TunnelClientMessenger tunnelClientMessenger = new TunnelClientMessenger(tunnelTransfer, messengerSender, serializer);
-
-
- //中继相关
- IRelayClientStore relayClientStore = new RelayClientStore();
- RelayClientTransfer relayClientTransfer = new RelayClientTransfer(messengerSender, serializer, relayClientStore);
- relayClientTransfer.SetConnectedCallback("default", (connection) =>
- {
- Console.WriteLine($"中继成功,收到 {connection.IPEndPoint} {connection.RemoteMachineId} 的连接");
- connection.BeginReceive(new TunnelConnectionReceiveCallback(), null);
- });
- RelayClientMessenger relayClientMessenger = new RelayClientMessenger(relayClientTransfer, serializer);
-
- //加载这些信标处理器
- messengerResolver.AddMessenger(new List
- {
- tunnelClientMessenger,
- relayClientMessenger
- });
-
-
- //加载登录参数
- SignInArgsTransfer signInArgsTransfer = new SignInArgsTransfer();
- signInArgsTransfer.AddArgs(new List {
- new MySignInArgs()
- });
- Dictionary argsDic = new Dictionary();
- await signInArgsTransfer.Invoke(string.Empty, argsDic);
-
- Console.WriteLine($"输入服务端ip端口:");
- publicConfigInfo.Host = Console.ReadLine();
-
- Console.WriteLine($"开始连接服务器");
- IPEndPoint server = NetworkHelper.GetEndPoint(publicConfigInfo.Host, 1802);
- Socket socket = new Socket(server.Address.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
- socket.KeepAlive();
- await socket.ConnectAsync(server).WaitAsync(TimeSpan.FromMilliseconds(5000)).ConfigureAwait(false);
- publicConfigInfo.SignConnection = await messengerResolver.BeginReceiveClient(socket, true, (byte)ResolverType.Messenger).ConfigureAwait(false);
-
- Console.WriteLine($"开始登录");
- MessageResponeInfo resp = await messengerSender.SendReply(new MessageRequestWrap
- {
- Connection = publicConfigInfo.SignConnection,
- MessengerId = (ushort)SignInMessengerIds.SignIn_V_1_3_1,
- Timeout = 2000,
- Payload = serializer.Serialize(new SignInfo
- {
- MachineName = Dns.GetHostName(),
- MachineId = string.Empty,
- Version = VersionHelper.version,
- Args = argsDic,
- GroupId = "default"
- })
- }).ConfigureAwait(false);
- if (resp.Code != MessageResponeCodes.OK)
- {
- Console.WriteLine($"登录失败 : {resp.Code}");
- publicConfigInfo.SignConnection?.Disponse(6);
- return;
- }
-
- SignInResponseInfo signResp = serializer.Deserialize(resp.Data.Span).DeJson();
- if (signResp.Status == false)
- {
- Console.WriteLine($"登录失败 : {signResp.Msg}");
- publicConfigInfo.SignConnection?.Disponse(6);
- return;
- }
- publicConfigInfo.SignConnection.Id = signResp.MachineId;
- Console.WriteLine($"你的id:{signResp.MachineId}");
- tunnelTransfer.Refresh();
-
-
- //获取在线列表,其它功能,参照 SignInServerMessenger 里的方法serializer.Deserialize 什么,就传什么
- resp = await messengerSender.SendReply(new MessageRequestWrap
- {
- Connection = publicConfigInfo.SignConnection,
- MessengerId = (ushort)SignInMessengerIds.List,
- Timeout = 2000,
- Payload = serializer.Serialize(new SignInListRequestInfo
- {
- Asc = true,
- Page = 1,
- Size = 10
- })
- }).ConfigureAwait(false);
- if (resp.Code == MessageResponeCodes.OK)
- {
- Console.WriteLine($"当前在线 : {serializer.Deserialize(resp.Data.Span).List.ToJson()}");
- }
-
-
-
- Console.WriteLine($"去连接吗?,1打洞,2中继:");
- string connect = Console.ReadLine();
-
- Console.WriteLine($"输入对方id:");
- string id = Console.ReadLine();
-
- ITunnelConnection tunnelConnection = null;
- switch (connect)
- {
- case "1":
- {
- Console.WriteLine($"正在打洞.......");
- tunnelConnection = await tunnelTransfer.ConnectAsync(id, "default", TunnelProtocolType.None);
- Console.WriteLine($"打洞==》{(tunnelConnection == null ? "失败" : "成功")}");
- }
- break;
- case "2":
- {
- Console.WriteLine($"正在中继.......");
- tunnelConnection = await relayClientTransfer.ConnectAsync(publicConfigInfo.SignConnection.Id, id, "default");
- Console.WriteLine($"中继==》{(tunnelConnection == null ? "失败" : "成功")}");
- }
- break;
- default:
- break;
- }
- if (tunnelConnection != null)
- {
- for (int i = 0; i < 10; i++)
- {
- string msg = $"hello {i}";
- Console.WriteLine($"发送:{msg}");
- var msgBytes = msg.ToBytes();
-
- //首部4字节存长度,剩下的才是真实数据
- byte[] bytes = new byte[4 + msgBytes.Length];
- msgBytes.Length.ToBytes(bytes);
- msgBytes.AsMemory().CopyTo(bytes.AsMemory(4));
-
- await tunnelConnection.SendAsync(bytes);
- await Task.Delay(1000);
- }
- }
- }
-
- private static void Server()
- {
- Console.WriteLine($"输入服务端端口:");
- publicConfigInfo.Port = int.Parse(Console.ReadLine());
-
- //序列化
- ISerializer serializer = new Serializer();
-
- //信标发送和接受
- IMessengerSender messengerSender = new MessengerSender();
- IMessengerResolver messengerResolver = new MessengerResolver(messengerSender);
- messengerResolver.Initialize(publicConfigInfo.Certificate);
- MessengerResolverResolver messengerResolverResolver = new MessengerResolverResolver(messengerResolver);
-
- //登录相关
- SignInArgsTransfer signInArgsTransfer = new SignInArgsTransfer();
- signInArgsTransfer.AddArgs(new List {
- new MySignInArgs()
- });
- ISignInServerStore signInStore = new SignInStore();
- SignInServerCaching signCaching = new SignInServerCaching(signInStore, signInArgsTransfer);
- SignInServerMessenger signInServerMessenger = new SignInServerMessenger(messengerSender, signCaching, serializer);
-
- //打洞相关
- TunnelServerExternalResolver tunnelExternalResolver = new TunnelServerExternalResolver();
- TunnelServerMessenger tunnelServerMessenger = new TunnelServerMessenger(messengerSender, signCaching, serializer);
-
- //中继相关
- IRelayServerMasterStore relayServerMasterStore = new RelayServerMasterStore();
- IRelayServerNodeStore relayServerNodeStore = new RelayServerNodeStore();
- RelayServerNodeTransfer relayServerNodeTransfer = new RelayServerNodeTransfer(serializer, relayServerNodeStore, relayServerMasterStore);
- RelayServerResolver relayServerResolver = new RelayServerResolver(relayServerNodeTransfer, serializer);
- IRelayServerCaching relayServerCaching = new RelayServerCachingMemory(serializer);
- RelayServerMasterTransfer relayServerMasterTransfer = new RelayServerMasterTransfer(relayServerCaching, serializer, relayServerMasterStore);
- RelayServerReportResolver relayServerReportResolver = new RelayServerReportResolver(relayServerMasterTransfer);
- //自定义中继验证
- RelayServerValidatorTransfer relayServerValidatorTransfer = new RelayServerValidatorTransfer();
- //relayServerValidatorTransfer.LoadValidators(new List { });
- RelayServerMessenger relayServerMessenger = new RelayServerMessenger(messengerSender, signCaching, serializer, relayServerMasterTransfer, relayServerValidatorTransfer);
-
- //加载信标处理器
- messengerResolver.AddMessenger(new List
- {
- signInServerMessenger,
- tunnelServerMessenger,
- relayServerMessenger
- });
-
-
- //加载消息分发器
- ResolverTransfer resolverTransfer = new ResolverTransfer();
- resolverTransfer.AddResolvers(new List {
- messengerResolverResolver,
- tunnelExternalResolver,
- relayServerReportResolver,
- relayServerResolver
- });
-
- //TCP
- var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
- socket.Bind(new IPEndPoint(IPAddress.Any, publicConfigInfo.Port));
- socket.Listen(int.MaxValue);
- TimerHelper.Async(async () =>
- {
- while (true)
- {
- var client = await socket.AcceptAsync();
- _ = resolverTransfer.BeginReceive(client);
- }
- });
-
- //UDP
- Socket socketUdp = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
- socketUdp.Bind(new IPEndPoint(IPAddress.Any, publicConfigInfo.Port));
- socketUdp.WindowsUdpBug();
- TimerHelper.Async(async () =>
- {
- IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, IPEndPoint.MinPort);
- byte[] buffer = new byte[1 * 1024 * 1024];
- while (true)
- {
- try
- {
- SocketReceiveFromResult result = await socketUdp.ReceiveFromAsync(buffer, SocketFlags.None, endPoint).ConfigureAwait(false);
- IPEndPoint ep = result.RemoteEndPoint as IPEndPoint;
- _ = resolverTransfer.BeginReceive(socketUdp, ep, buffer.AsMemory(0, result.ReceivedBytes));
- }
- catch (Exception ex)
- {
- LoggerHelper.Instance.Error(ex);
- break;
- }
- }
- });
- }
-
- private static void LoggerConsole()
- {
- LoggerHelper.Instance.OnLogger += (model) =>
- {
- ConsoleColor currentForeColor = Console.ForegroundColor;
- switch (model.Type)
- {
- case LoggerTypes.DEBUG:
- Console.ForegroundColor = ConsoleColor.Blue;
- break;
- case LoggerTypes.INFO:
- Console.ForegroundColor = ConsoleColor.White;
- break;
- case LoggerTypes.WARNING:
- Console.ForegroundColor = ConsoleColor.Yellow;
- break;
- case LoggerTypes.ERROR:
- Console.ForegroundColor = ConsoleColor.Red;
- break;
- default:
- break;
- }
- string line = $"[{model.Type,-7}][{model.Time:yyyy-MM-dd HH:mm:ss}]:{model.Content}";
- Console.WriteLine(line);
- Console.ForegroundColor = currentForeColor;
- };
- }
- }
-
- public sealed class MyRelayServerValidator : IRelayServerValidator
- {
- ///
- /// 验证,服务端会调用
- ///
- /// 中继参数
- /// 来源客户端
- /// 目标客户端
- ///
- public async Task Validate(RelayInfo relayInfo, SignCacheInfo fromMachine, SignCacheInfo toMachine)
- {
- //返回空字符串,表示成功,不空为错误信息则登录失败
- return await Task.FromResult(string.Empty);
- }
- }
-
- public sealed class MySignInArgs : ISignInArgs
- {
- ///
- /// 客户端调用
- ///
- ///
- ///
- ///
- public async Task Invoke(string host, Dictionary args)
- {
- //在这里加入你喜欢的数据
-
- //返回空字符串,表示成功,不空为错误信息
- return await Task.FromResult(string.Empty);
- }
-
- ///
- /// 服务端调用
- ///
- /// 本次登录的信息
- /// 如果以前登录过就有信息,否则MachineId为空
- ///
- ///
- public async Task Validate(SignInfo signInfo, SignCacheInfo cache)
- {
- //在这里进行你的验证
-
- //返回空字符串,表示成功,不空为错误信息则登录失败
- return await Task.FromResult(string.Empty);
- }
- }
-
- public sealed class PublicConfigInfo
- {
- public IConnection SignConnection { get; set; }
- public X509Certificate2 Certificate { get; set; }
- public List TunnelTransports { get; set; }
-
- public string Host { get; set; }
- public int Port { get; set; } = 12345;
- }
-
- ///
- /// 中继的客户端存储库
- ///
- public sealed class RelayClientStore : IRelayClientStore
- {
- public X509Certificate2 Certificate => Program.publicConfigInfo.Certificate;
-
- public IConnection SigninConnection => Program.publicConfigInfo.SignConnection;
-
- public string SecretKey => string.Empty;
-
- public bool Disabled => false;
-
- public bool SSL => true;
-
- public RelayClientType RelayType => RelayClientType.Linker;
- }
-
- ///
- /// 中继节点信息存储库
- ///
- public sealed class RelayServerNodeStore : IRelayServerNodeStore
- {
- public int ServicePort => Program.publicConfigInfo.Port;
-
- public RelayServerNodeInfo Node => new RelayServerNodeInfo { };
-
- public void Confirm()
- {
- }
-
- public void SetMaxGbTotalLastBytes(ulong value)
- {
- }
-
- public void SetMaxGbTotalMonth(int month)
- {
- }
- }
- ///
- /// 中继主机信息存储库
- ///
- public sealed class RelayServerMasterStore : IRelayServerMasterStore
- {
- public RelayServerMasterInfo Master => new RelayServerMasterInfo { SecretKey = "snltty" };
- }
-
- ///
- /// 自定义打洞的存储库
- ///
- public sealed class TunnelMessengerAdapterStore : ITunnelClientStore
- {
- public IConnection SignConnection => Program.publicConfigInfo.SignConnection;
- public X509Certificate2 Certificate => Program.publicConfigInfo.Certificate;
-
- public int RouteLevelPlus => 0;
- public int PortMapPrivate => 0;
- public int PortMapPublic => 0;
-
- public TunnelMessengerAdapterStore()
- {
- }
-
- public async Task> GetTunnelTransports()
- {
- return await Task.FromResult(Program.publicConfigInfo.TunnelTransports);
- }
- public async Task SetTunnelTransports(List list)
- {
- return await Task.FromResult(true);
- }
- }
-
- ///
- /// 自定义序列化
- ///
- public sealed class Serializer : ISerializer
- {
- public T Deserialize(ReadOnlySpan buffer)
- {
- return buffer.GetString().DeJson();
- }
-
- public byte[] Serialize(T value)
- {
- return value.ToJson().ToBytes();
- }
- }
- ///
- /// 自定义登录持久化存储
- ///
- public sealed class SignInStore : ISignInServerStore
- {
- public void Confirm()
- {
- }
-
- public bool Delete(string id)
- {
- return true;
- }
-
- public SignCacheInfo Find(string id)
- {
- return null;
- }
-
- public IEnumerable Find()
- {
- return new List();
- }
-
- public string Insert(SignCacheInfo value)
- {
- return string.Empty;
- }
-
- public string NewId()
- {
- return Guid.NewGuid().ToString();
- }
-
- public bool Update(SignCacheInfo value)
- {
- return true;
- }
- }
-
-
-}
diff --git a/linker.messenger.example/linker.messenger.example.csproj b/linker.messenger.example/linker.messenger.example.csproj
deleted file mode 100644
index 0d01764d..00000000
--- a/linker.messenger.example/linker.messenger.example.csproj
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
- Exe
- net8.0
- enable
- enable
- true
- 1.6.4
- 1.6.4
- 1.6.4
-
-
-
-
-
-
-
-
-
-
-
- PreserveNewest
-
-
-
-
diff --git a/linker.messenger.example/snltty.pfx b/linker.messenger.example/snltty.pfx
deleted file mode 100644
index 8028c16d78aa901c23b265321ea1a8ca677c5c0d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 4642
zcmY+HWl$9E_Qzq_rJJQYMREyY>5@)aq`OO`k%k3D_<_KpfRxH2xr7KvvvfB|N_U6A
zN?z~G|9|h?7teWSKHqcB%g@Y#z$sY(*fU}4S@qMA-uSR|BwGJX8?kug+%oyJag_I
zrTv(g-or0uVbeVa0DxFPIIvGo%&0mWhhD>-dOh8Gf4KF-TG=`zb+v;%Sa`$5CnD7h
zLK6cq761g!F~8G)RgOFd={hGl>kR$U$9uCmlo6B0go|8vw@jCH&3cfD2sOp|`9>0-
zMy^>%nZ>izunkod%D#}Fw*2gnE7H;)S0csHiw$Q*$;xcsCxF~p)Cj1rOpvp;^J-p%
ztMc@t0@L~xZuwOBkJV$>$`a$dNbpKX^-E_nLz0fXlB*-CjX6;ZerU!Z-+)fSNdDq9
zjYhb-oKisi@$xHE#KvpwrOW7mj;XTqS4JymGYoue6e^+bd^+FJfeh{}N~jvx4!N1t
z5p5lQ+BHfB1mV#5U7PPO`ReQxI&b4CF2&O3GnkW`GL+-2ro$_L6WiXfMq&~I+NWQ}
zzSRYo5c_vS(q(1s41xBqwIQI~4YIuC%#G+j1#LFqy;s(Ngh6Ec{&?hpHdDnkVv;5f
z;{LNuN#TLlx8=;+>iCIaekzdST_23KP&+V~8wkuFQ{eTWOXyOyOGFV3Jtt>(d9Eq9
zyo$e1*^|9W!y)0!hT2*)B5CYss-zK*M@}81sPDp^eoV=pPGQaW-j`>g0+{E|yC>FCKoIn<`+*wXnjpXj?ITq6CuD
zZwb+aNHCJ
z9|~!DuuYm#pD*H5Uzgqr<^X(KiPHn(|rxTI>~1S8p=gtLs0pFqt9}1UU-BFbUew
z-_{y@)$#+rA-u|Z{Fbyp7=H%$e%J94cHhl0&m?fqQ_ynAV-$OmzIx&0>iUDEbn%D1
zA}^ZVyU2Tb0&o%gzdcJ!uxChAl+>^i;Or_8?Fx~kLY*Dn3WBoZk+&0xn4dOJbU1+{H
zMVO}Xq?GO8=c7n{3*%ny%odJ9VKpp&%s0ALCXa5ig^O*&G~8G1W%os4B+C;+Ju*Q&
zxT(M*L?4$)Yhs;@OQ;{fKfEp@q=pI4i|TQ9j5`f%^>EU+4N38ADrJq4R6aZUdwa
zUTmS94})@`z7eZ9l8b83UJn{75C<7crX?SZea5EAe7B$T4_M|JP}cXJ_u-^KL>@x_
zA5#*5MTl7lvFxxsvE2SvKM4DOBWe*akkZKQg%g{IqzF_@TmlM}kdTmqz=>i1X~M((
z3@3j27bya;vHpHi|4p#}N3Xd5*6TIr%T`rcjEBW6&PhN7sT?|6Ui#m9je-+nl~paN
zT|^EpM|r#j2*ro2x`!UMS(9UrrcpJ
zyTTW=$#Ffu8x+WZ^RnsJ%YQ&=*&+&@nl^=N>dtMA)(Qt9G9ofUCk^g;w^lxEStu)?
z8z$_wC>;;C6dyblm`xk{(kk_nZ
zj&lTZ8+o(G#Vc9=c5^bj*iB8QZ6Fz&X#m+w6V=!vopnT_2z*3)GD9~!bmhPC+|xtD
z#;?PAtSZS;sXuw|1wpfs!>qZuS393SMq&NKoO$b}GEx=NH3yG4Rnf{iLW`fd$fwPC
zzNb_(e`U>Rubgc8XVpI1E{a?1Qx0W-li5$RTJUr9_aoFzMi+An`j?PdoI_jG#~9BS
z)@wAEc#;Y^x$Bk+VE>%{oAZmepK5<&s&~kuD9xi8(n6@#OAC@FMw-4{#&Sm+>BO-v
zl*qk1K3G$$+pSPrwyhIu41TgNpnn8?X%|7vbW8y^2<>*eAKnUZRyq~p;I#Y9Q=y>2
z?l1ABEa5AmI@1$m3S=1!H6ClH^t5v4HtXZcq_4`bYo;&Ukb_EY6MR^-*hx`{%bMgg
zk4)P;FKXbmTG|Wd9IiYKZkDa9u{55+Vjm`btNQ>EWx(kP-7Buom#Sl)4;hC9*Egt-
zc8C8wPp+<}i(O?|zULvgOXU&&vsLYVpoPP3rnL0^<9luMkzy>n|BH42
zqrnzCU7-8>HV{lDNpfx6aToPa7giQIzmm7+ImXCD8+YNO&Ud9KFwp4WbSL`Jb@2AA
z^kNFQkWuecN2R#tVs9j!n}U6K>yh;AhyucU_&w;z4Gh}IRXhX-wo4UkJ7;xgS3Y|Xr-Ckba028C)`hD539lTcxj
zPYvlw-#S#i$$cY#>TTXFMtt!zFbWIls(E=2j|*)N-nQ=XdC&>IJ0}+$8}nP7xWByL
z`Lvhig#EVsvIvN9#?`?7dcQhlLzwI1_QSgwrne@!IEIgy?$bE;m)B`d)8(mLt{lho
zc6u|mq|(LjS8%ipj(=~#Xgy6MiUe4tmj&j{^o)m?Xs&0Dt!a`eqJPZEXiP+#nkW5y
zE|@IRaM|ArTP+Ros6eIO*ZZV+jtP8AZ1>wOCnL+g30V{`jQMH_j-7YIHwNexoG6hp
zTlFCt>@$_N*?I6NS=xFtK!8=hR3u})UtUzPh+|9m#tYNzoYnTpkw*mQtnr-j{prrI
z9xiOvHi3?fqKR7zf=K^#hto7vPNqvRVuz++V5)%;**4U-x`M$|p^{HVV!UFR@K
z`e20D^NyQdoZC!HwzMENThq>DbUH475$zhHg3ck%AllCRBAzGrM<~}ak^qjHvUshX
zq&zwPQNSN-_1V)Vs=&^IfG&cn^t{B{Vd{!D+py*E5SD|D7CV4Oc3WM7pr16+doEM5
zvuyECBPP17jK+TL&yyb=>!2>Qb_;cTEJn}(LmD2TKNaFFnA2jmoSY?tEe#=ri|Mqj
z5eUn4!N5}mkv!Ru+1Y|dZHGKhw9<-i8U2Q|FzXCLV;rO!_W1a`62o48&;eZz$6sl$
zZRgy@1jjyfh&^!N=l+g=Je`5K+`831#wzM?j$!30aTMXs47~`CkJt^FIBL`K>pakX
z$LO0`T+F>-L6J)Da0~M5Ebtv6KfZkQ_V|0|4)uiT?9t@>SsJ&%5nB!G6p=f5mUSL=|00T
zqn2efU!6H7G#ytSgSt&~=LOF>rV@G_+J&L?+&hpRa
za>^T3VewT#o*c?U#U7aXo8}F(axqO48u`Pxax}in7*(lt*rm`L5|4w-@)Y5SZ*v(4
z2qoku0)3f@z2dRj_>1!*m`kYEgk5xK3mtctHxoU$x6Fk#s5>RK(IOCRj^ID-F#aeQ
zXLsrn^(4ydBgq$hpH4q4-HX`moP7$x6^qa-*sin(CyupHk=dTk6QQ9^9A&diOnlZh
z=JlH{{?xqTm2XU@4KPvN;(EQyVYwd$AI22B#uAp3Rsh2$qP_n_fEBuDW4KH5*|2eK
zNLr1*+GvWbwc=VX^@hU6xVb+7H9WmaGE`WCtzFjT4Fn(|6u)HLZXxpQ?aI<+4gHOI
z#Q>eMPMe-b;!TOw@h;2^&6(l$VyC`t7a(2(pfcds(FavTdg9TXb#m&f5d?`}mW^783MZ?Q_|H!OCpTk8js%^w7fic=
zvx<*9mge{L=0#wrDtWv92szz&vDSeHpAggi=o&(9eTh@@4A5p8I&S3^7E+#2gU8R{
z)^J8~tl?8V*DpGUD=*r^;Q4g=u|FK$s*9V|Bd&`TYI=Kc(}5kjxZFivk4mxPOO~k#?6RAR5gOr0~rg`yBfnyNxW9q|9{Vtg{T{t7l~w*}zwY)(y>$
z1DK01Q9A!_;rzGNUvMEv3^;cK@WpN8ead^>x4dUu91?0ndqF=Ri%11v6nJ8CMu{9K
zz)$WUkr4P0{-F`|BA?}8kg|bdD+>V+CIl&7SXE)|s7H38Dw7&j-B2duY2YUFW}tjH
zP3&z0|M2%-+wka<7YuPOw;OnSs8=a(O7TN$%rGserYmiV;RkkFTD
zEUDEcOCo$2C0;}{<;gsCrBlGkY88oARFao~x@ur~uj`4o5Juw}-U~qFZHlp`WK3my
z!@go(smhXxufI0Luc7U6{1f_C@Q~$hcZOx2R@2NuIGz3tf(YGM3fgm>SaK06Y%-1s
z%L7C2E-A}LBpKfy1q)EkZ8dQDrwhOf)Kl3UK5U$YHmqZ`LkBCaw)lU}jy=#-0+*OM
zKb1B2^f{{G#gvT&)ca;eL-W;Jq@8-(ZFuWgH2g363GzcTFomD@bkiCo9%!FCXocH_
zhHyR*brzaZ9g^qIZv6D{b3EK{b1hUOHI%8vSrS0`of=OUmdQMRD_XD=`2(tSR}vEn
zMkk0g#c5U5?@XSXPHwNxQaiwEg`~sq-C#vi-QdaZVXPfy$313PwsQ6ZOQ`;f5!e)J
z)6&=W^Nb_igDbg;R5UiFVj50+?2+^$GK5BZwX`6NVYum_yAmAuB4$pZY{YQX*b5>D
zVTTalg7`^s01O~3AQ list)
{
+ LoggerHelper.Instance.Info($"add exroute {string.Join(",", list.Select(c => c.GetType().Name))}");
excludes = excludes.Concat(list).Distinct().ToList();
}
diff --git a/linker.messenger.flow/Entry.cs b/linker.messenger.flow/Entry.cs
new file mode 100644
index 00000000..e7fc369f
--- /dev/null
+++ b/linker.messenger.flow/Entry.cs
@@ -0,0 +1,78 @@
+using linker.messenger.api;
+using linker.messenger.flow.messenger;
+using linker.messenger.relay.server;
+using linker.messenger.tunnel;
+using linker.plugins.sforward.proxy;
+using Microsoft.Extensions.DependencyInjection;
+namespace linker.messenger.flow
+{
+ public static class Entry
+ {
+ public static ServiceCollection AddFlowClient(this ServiceCollection serviceCollection)
+ {
+ serviceCollection.AddSingleton();
+ serviceCollection.AddSingleton();
+
+ serviceCollection.AddSingleton();
+ serviceCollection.AddSingleton();
+ serviceCollection.AddSingleton();
+
+ return serviceCollection;
+ }
+ public static ServiceProvider UseFlowClient(this ServiceProvider serviceProvider)
+ {
+ IApiServer apiServer = serviceProvider.GetService();
+ apiServer.AddPlugins(new List { serviceProvider.GetService() });
+
+ FlowTransfer flowTransfer = serviceProvider.GetService();
+ flowTransfer.AddFlows(new List { serviceProvider.GetService() });
+
+ return serviceProvider;
+ }
+
+
+ public static ServiceCollection AddFlowServer(this ServiceCollection serviceCollection)
+ {
+ serviceCollection.AddSingleton();
+ serviceCollection.AddSingleton();
+ serviceCollection.AddSingleton();
+
+ serviceCollection.AddSingleton();
+ serviceCollection.AddSingleton();
+ serviceCollection.AddSingleton();
+
+ serviceCollection.AddSingleton();
+ serviceCollection.AddSingleton();
+ serviceCollection.AddSingleton();
+ serviceCollection.AddSingleton();
+
+ serviceCollection.AddSingleton();
+ serviceCollection.AddSingleton();
+
+ serviceCollection.AddSingleton();
+ serviceCollection.AddSingleton();
+ return serviceCollection;
+ }
+ public static ServiceProvider UseFlowServer(this ServiceProvider serviceProvider)
+ {
+
+ FlowTransfer flowTransfer = serviceProvider.GetService();
+ flowTransfer.AddFlows(new List {
+ serviceProvider.GetService(),
+ serviceProvider.GetService(),
+ serviceProvider.GetService(),
+ serviceProvider.GetService(),
+ serviceProvider.GetService(),
+ });
+
+ IMessengerResolver messengerResolver = serviceProvider.GetService();
+ messengerResolver.AddMessenger(new List { serviceProvider.GetService() });
+
+
+ ResolverTransfer resolverTransfer = serviceProvider.GetService();
+ resolverTransfer.AddResolvers(new List { serviceProvider.GetService() });
+
+ return serviceProvider;
+ }
+ }
+}
diff --git a/linker/plugins/flow/ExternalFlow.cs b/linker.messenger.flow/ExternalFlow.cs
similarity index 96%
rename from linker/plugins/flow/ExternalFlow.cs
rename to linker.messenger.flow/ExternalFlow.cs
index dee157d1..9678be03 100644
--- a/linker/plugins/flow/ExternalFlow.cs
+++ b/linker.messenger.flow/ExternalFlow.cs
@@ -1,5 +1,5 @@
using linker.messenger.tunnel;
-namespace linker.plugins.flow
+namespace linker.messenger.flow
{
public sealed class ExternalFlow : IFlow
{
diff --git a/linker/plugins/flow/FlowClientApiController.cs b/linker.messenger.flow/FlowApiController.cs
similarity index 61%
rename from linker/plugins/flow/FlowClientApiController.cs
rename to linker.messenger.flow/FlowApiController.cs
index daff88f4..def15fac 100644
--- a/linker/plugins/flow/FlowClientApiController.cs
+++ b/linker.messenger.flow/FlowApiController.cs
@@ -1,35 +1,28 @@
-using linker.libs.api;
-using linker.config;
-using linker.serializer;
-using linker.client.config;
-using linker.plugins.client;
-using linker.plugins.capi;
-using linker.plugins.flow.messenger;
+using linker.libs;
+using linker.libs.api;
using linker.libs.extends;
-using linker.plugins.relay.client;
-using linker.plugins.sforward;
-using linker.messenger;
+using linker.messenger.api;
+using linker.messenger.flow.messenger;
+using linker.messenger.relay.client;
+using linker.messenger.sforward.client;
using linker.messenger.signin;
-namespace linker.plugins.flow
+namespace linker.messenger.flow
{
- public sealed class FlowClientApiController : IApiClientController
+ public sealed class FlowApiController : IApiController
{
private readonly IMessengerSender messengerSender;
private readonly SignInClientState signInClientState;
- private readonly FileConfig config;
- private readonly RunningConfig runningConfig;
- private readonly RelayClientConfigTransfer relayClientConfigTransfer;
- private readonly SForwardTransfer sForwardTransfer;
-
- public FlowClientApiController(IMessengerSender messengerSender, SignInClientState signInClientState, FileConfig config, RunningConfig runningConfig, RelayClientConfigTransfer relayClientConfigTransfer, SForwardTransfer sForwardTransfer)
+ private readonly IRelayClientStore relayClientStore;
+ private readonly ISForwardClientStore sForwardClientStore;
+ private readonly ISerializer serializer;
+ public FlowApiController(IMessengerSender messengerSender, SignInClientState signInClientState, IRelayClientStore relayClientStore, ISForwardClientStore sForwardClientStore, ISerializer serializer)
{
this.messengerSender = messengerSender;
this.signInClientState = signInClientState;
- this.config = config;
- this.runningConfig = runningConfig;
- this.relayClientConfigTransfer = relayClientConfigTransfer;
- this.sForwardTransfer = sForwardTransfer;
+ this.relayClientStore = relayClientStore;
+ this.sForwardClientStore = sForwardClientStore;
+ this.serializer = serializer;
}
public async Task GetFlows(ApiControllerParamsInfo param)
@@ -41,7 +34,7 @@ namespace linker.plugins.flow
});
if (resp.Code == MessageResponeCodes.OK && resp.Data.Length > 0)
{
- return Serializer.Deserialize(resp.Data.Span);
+ return serializer.Deserialize(resp.Data.Span);
}
return new FlowInfo();
}
@@ -54,45 +47,45 @@ namespace linker.plugins.flow
});
if (resp.Code == MessageResponeCodes.OK && resp.Data.Length > 0)
{
- return Serializer.Deserialize>(resp.Data.Span);
+ return serializer.Deserialize>(resp.Data.Span);
}
return new Dictionary();
}
- [ClientApiAccessAttribute(ClientApiAccess.SForwardFlow)]
+ [Access(AccessValue.SForwardFlow)]
public async Task GetSForwardFlows(ApiControllerParamsInfo param)
{
SForwardFlowRequestInfo info = param.Content.DeJson();
- info.SecretKey = sForwardTransfer.SecretKey;
+ info.SecretKey = sForwardClientStore.SecretKey;
MessageResponeInfo resp = await messengerSender.SendReply(new MessageRequestWrap
{
Connection = signInClientState.Connection,
MessengerId = (ushort)FlowMessengerIds.SForward,
- Payload = Serializer.Serialize(info)
+ Payload = serializer.Serialize(info)
});
if (resp.Code == MessageResponeCodes.OK && resp.Data.Length > 0)
{
- return Serializer.Deserialize(resp.Data.Span);
+ return serializer.Deserialize(resp.Data.Span);
}
return new SForwardFlowResponseInfo();
}
- [ClientApiAccessAttribute(ClientApiAccess.RelayFlow)]
+ [Access(AccessValue.RelayFlow)]
public async Task GetRelayFlows(ApiControllerParamsInfo param)
{
RelayFlowRequestInfo info = param.Content.DeJson();
- info.SecretKey = relayClientConfigTransfer.Server.SecretKey;
+ info.SecretKey = relayClientStore.Server.SecretKey;
MessageResponeInfo resp = await messengerSender.SendReply(new MessageRequestWrap
{
Connection = signInClientState.Connection,
MessengerId = (ushort)FlowMessengerIds.Relay,
- Payload = Serializer.Serialize(info)
+ Payload = serializer.Serialize(info)
});
if (resp.Code == MessageResponeCodes.OK && resp.Data.Length > 0)
{
- return Serializer.Deserialize(resp.Data.Span);
+ return serializer.Deserialize(resp.Data.Span);
}
return new RelayFlowResponseInfo();
}
diff --git a/linker/plugins/flow/FlowResolver.cs b/linker.messenger.flow/FlowResolver.cs
similarity index 98%
rename from linker/plugins/flow/FlowResolver.cs
rename to linker.messenger.flow/FlowResolver.cs
index eb86c999..0648850d 100644
--- a/linker/plugins/flow/FlowResolver.cs
+++ b/linker.messenger.flow/FlowResolver.cs
@@ -1,13 +1,12 @@
using linker.libs;
using linker.libs.extends;
-using linker.messenger;
using linker.messenger.signin;
using System.Buffers;
using System.Collections.Concurrent;
using System.Net;
using System.Net.Sockets;
-namespace linker.plugins.flow
+namespace linker.messenger.flow
{
public sealed class FlowResolver : IResolver, IFlow
{
diff --git a/linker/plugins/flow/FlowTransfer.cs b/linker.messenger.flow/FlowTransfer.cs
similarity index 60%
rename from linker/plugins/flow/FlowTransfer.cs
rename to linker.messenger.flow/FlowTransfer.cs
index bd7fffaa..157c6cba 100644
--- a/linker/plugins/flow/FlowTransfer.cs
+++ b/linker.messenger.flow/FlowTransfer.cs
@@ -1,4 +1,6 @@
-namespace linker.plugins.flow
+using linker.libs;
+
+namespace linker.messenger.flow
{
public sealed class FlowTransfer
{
@@ -7,9 +9,10 @@
{
}
- public void LoadFlows(List flows)
+ public void AddFlows(List list)
{
- this.flows = flows;
+ LoggerHelper.Instance.Info($"add flow {string.Join(",", list.Select(c => c.GetType().Name))}");
+ this.flows = this.flows.Concat(list).Distinct().ToList();
}
public Dictionary GetFlows()
diff --git a/linker/plugins/flow/IFlow.cs b/linker.messenger.flow/IFlow.cs
similarity index 76%
rename from linker/plugins/flow/IFlow.cs
rename to linker.messenger.flow/IFlow.cs
index edba45bb..4e3af58b 100644
--- a/linker/plugins/flow/IFlow.cs
+++ b/linker.messenger.flow/IFlow.cs
@@ -1,7 +1,6 @@
-using MemoryPack;
-using System.Text.Json.Serialization;
+using System.Text.Json.Serialization;
-namespace linker.plugins.flow
+namespace linker.messenger.flow
{
public interface IFlow
{
@@ -10,17 +9,15 @@ namespace linker.plugins.flow
public string FlowName { get; }
}
- [MemoryPackable]
public partial class FlowItemInfo
{
public ulong ReceiveBytes { get; set; }
public ulong SendtBytes { get; set; }
- [MemoryPackIgnore, JsonIgnore]
+ [JsonIgnore]
public string FlowName { get; set; }
}
- [MemoryPackable]
public sealed partial class FlowInfo
{
public Dictionary Items { get; set; }
diff --git a/linker/plugins/flow/MessengerFlow.cs b/linker.messenger.flow/MessengerFlow.cs
similarity index 94%
rename from linker/plugins/flow/MessengerFlow.cs
rename to linker.messenger.flow/MessengerFlow.cs
index 2d1a6149..d30f7e51 100644
--- a/linker/plugins/flow/MessengerFlow.cs
+++ b/linker.messenger.flow/MessengerFlow.cs
@@ -1,12 +1,10 @@
-using linker.messenger;
-
-namespace linker.plugins.flow
+namespace linker.messenger.flow
{
public sealed class MessengerResolverFlow : MessengerResolver
{
private readonly MessengerFlow messengerFlow;
- public MessengerResolverFlow(IMessengerSender sender, MessengerFlow messengerFlow) : base(sender)
+ public MessengerResolverFlow(IMessengerSender sender, MessengerFlow messengerFlow,IMessengerStore messengerStore) : base(sender, messengerStore)
{
this.messengerFlow = messengerFlow;
}
diff --git a/linker/plugins/flow/RelayFlow.cs b/linker.messenger.flow/RelayFlow.cs
similarity index 95%
rename from linker/plugins/flow/RelayFlow.cs
rename to linker.messenger.flow/RelayFlow.cs
index 1020c243..6afc8b04 100644
--- a/linker/plugins/flow/RelayFlow.cs
+++ b/linker.messenger.flow/RelayFlow.cs
@@ -1,9 +1,8 @@
using linker.libs;
using linker.messenger.relay.server;
-using MemoryPack;
using System.Text.Json.Serialization;
-namespace linker.plugins.flow
+namespace linker.messenger.flow
{
public sealed class RelayReportFlow : IFlow
{
@@ -37,7 +36,7 @@ namespace linker.plugins.flow
public sealed class RelayResolverFlow : RelayServerResolver
{
private readonly RelayFlow relayFlow;
- public RelayResolverFlow(RelayFlow relayFlow, RelayServerNodeTransfer relayServerNodeTransfer,ISerializer serializer) : base(relayServerNodeTransfer, serializer)
+ public RelayResolverFlow(RelayFlow relayFlow, RelayServerNodeTransfer relayServerNodeTransfer, ISerializer serializer) : base(relayServerNodeTransfer, serializer)
{
this.relayFlow = relayFlow;
}
@@ -184,7 +183,6 @@ namespace linker.plugins.flow
}
}
- [MemoryPackable]
public sealed partial class RelayFlowItemInfo : FlowItemInfo
{
public ulong DiffReceiveBytes { get; set; }
@@ -192,21 +190,18 @@ namespace linker.plugins.flow
public string FromName { get; set; }
public string ToName { get; set; }
- [MemoryPackIgnore]
public string GroupId { get; set; }
- [MemoryPackIgnore, JsonIgnore]
+ [JsonIgnore]
public ulong OldReceiveBytes { get; set; }
- [MemoryPackIgnore, JsonIgnore]
+ [JsonIgnore]
public ulong OldSendtBytes { get; set; }
}
- [MemoryPackable]
public sealed partial class RelayFlowRequestInfo
{
public string Key { get; set; } = string.Empty;
- [MemoryPackIgnore]
public string GroupId { get; set; } = string.Empty;
public string SecretKey { get; set; } = string.Empty;
public int Page { get; set; } = 1;
@@ -228,7 +223,6 @@ namespace linker.plugins.flow
Asc = 1,
}
- [MemoryPackable]
public sealed partial class RelayFlowResponseInfo
{
public int Page { get; set; }
diff --git a/linker/plugins/flow/SForwardFlow.cs b/linker.messenger.flow/SForwardFlow.cs
similarity index 96%
rename from linker/plugins/flow/SForwardFlow.cs
rename to linker.messenger.flow/SForwardFlow.cs
index 7ed6b383..0273a011 100644
--- a/linker/plugins/flow/SForwardFlow.cs
+++ b/linker.messenger.flow/SForwardFlow.cs
@@ -1,9 +1,8 @@
using linker.libs;
using linker.plugins.sforward.proxy;
-using MemoryPack;
using System.Text.Json.Serialization;
-namespace linker.plugins.flow
+namespace linker.messenger.flow
{
public sealed class SForwardProxyFlow: SForwardProxy
{
@@ -125,28 +124,24 @@ namespace linker.plugins.flow
}
}
- [MemoryPackable]
public sealed partial class SForwardFlowItemInfo : FlowItemInfo
{
public ulong DiffReceiveBytes { get; set; }
public ulong DiffSendtBytes { get; set; }
public string Key { get; set; }
- [MemoryPackIgnore]
public string GroupId { get; set; }
- [MemoryPackIgnore, JsonIgnore]
+ [ JsonIgnore]
public ulong OldReceiveBytes { get; set; }
- [MemoryPackIgnore, JsonIgnore]
+ [ JsonIgnore]
public ulong OldSendtBytes { get; set; }
}
- [MemoryPackable]
public sealed partial class SForwardFlowRequestInfo
{
public string Key { get; set; } = string.Empty;
- [MemoryPackIgnore]
public string GroupId { get; set; } = string.Empty;
public string SecretKey { get; set; } = string.Empty;
@@ -169,7 +164,6 @@ namespace linker.plugins.flow
Asc = 1,
}
- [MemoryPackable]
public sealed partial class SForwardFlowResponseInfo
{
public int Page { get; set; }
diff --git a/linker.messenger.flow/linker.messenger.flow.csproj b/linker.messenger.flow/linker.messenger.flow.csproj
new file mode 100644
index 00000000..7168fb0a
--- /dev/null
+++ b/linker.messenger.flow/linker.messenger.flow.csproj
@@ -0,0 +1,42 @@
+
+
+
+
+ net8.0
+ enable
+ disable
+ true
+ false
+ true
+ True
+ linker messenger flow
+ snltty
+ snltty
+ linker messenger flow
+ snltty
+ https://github.com/snltty/linker
+ https://github.com/snltty/linker
+ linker messenger flow
+ 1.6.4
+ 1.6.4
+ 1.6.4
+
+
+
+ full
+ true
+
+
+ none
+ false
+ True
+
+
+
+
+
+
+
+
+
+
diff --git a/linker/plugins/flow/messenger/FlowMessenger.cs b/linker.messenger.flow/messenger/FlowMessenger.cs
similarity index 68%
rename from linker/plugins/flow/messenger/FlowMessenger.cs
rename to linker.messenger.flow/messenger/FlowMessenger.cs
index 112cd585..9856958a 100644
--- a/linker/plugins/flow/messenger/FlowMessenger.cs
+++ b/linker.messenger.flow/messenger/FlowMessenger.cs
@@ -1,11 +1,9 @@
-using linker.config;
-using linker.messenger;
+using linker.libs;
+using linker.messenger.relay.server;
+using linker.messenger.sforward.server;
using linker.messenger.signin;
-using linker.plugins.relay.server;
-using linker.plugins.sforward;
-using linker.serializer;
-namespace linker.plugins.flow.messenger
+namespace linker.messenger.flow.messenger
{
public sealed class FlowMessenger : IMessenger
{
@@ -14,22 +12,22 @@ namespace linker.plugins.flow.messenger
private readonly SForwardFlow sForwardFlow;
private readonly RelayFlow relayFlow;
private readonly SignInServerCaching signCaching;
- private readonly FileConfig fileConfig;
- private readonly RelayServerConfigTransfer relayServerConfigTransfer;
- private readonly SForwardServerConfigTransfer sForwardServerConfigTransfer;
+ private readonly IRelayServerStore relayServerStore;
+ private readonly ISForwardServerStore sForwardServerStore;
+ private readonly ISerializer serializer;
private DateTime start = DateTime.Now;
- public FlowMessenger(FlowTransfer flowTransfer, MessengerFlow messengerFlow, SForwardFlow sForwardFlow, RelayFlow relayFlow, SignInServerCaching signCaching, FileConfig fileConfig, RelayServerConfigTransfer relayServerConfigTransfer, SForwardServerConfigTransfer sForwardServerConfigTransfer)
+ public FlowMessenger(FlowTransfer flowTransfer, MessengerFlow messengerFlow, SForwardFlow sForwardFlow, RelayFlow relayFlow, SignInServerCaching signCaching, IRelayServerStore relayServerStore, ISForwardServerStore sForwardServerStore, ISerializer serializer)
{
this.flowTransfer = flowTransfer;
this.messengerFlow = messengerFlow;
this.sForwardFlow = sForwardFlow;
this.relayFlow = relayFlow;
this.signCaching = signCaching;
- this.fileConfig = fileConfig;
- this.relayServerConfigTransfer = relayServerConfigTransfer;
- this.sForwardServerConfigTransfer = sForwardServerConfigTransfer;
+ this.relayServerStore = relayServerStore;
+ this.sForwardServerStore = sForwardServerStore;
+ this.serializer = serializer;
}
[MessengerId((ushort)FlowMessengerIds.List)]
@@ -46,22 +44,22 @@ namespace linker.plugins.flow.messenger
Start = start,
Now = DateTime.Now,
};
- connection.Write(Serializer.Serialize(serverFlowInfo));
+ connection.Write(serializer.Serialize(serverFlowInfo));
}
[MessengerId((ushort)FlowMessengerIds.Messenger)]
public void Messenger(IConnection connection)
{
- connection.Write(Serializer.Serialize(messengerFlow.GetFlows()));
+ connection.Write(serializer.Serialize(messengerFlow.GetFlows()));
}
[MessengerId((ushort)FlowMessengerIds.SForward)]
public void SForward(IConnection connection)
{
sForwardFlow.Update();
- SForwardFlowRequestInfo info = Serializer.Deserialize(connection.ReceiveRequestWrap.Payload.Span);
+ SForwardFlowRequestInfo info = serializer.Deserialize(connection.ReceiveRequestWrap.Payload.Span);
- if (sForwardServerConfigTransfer.SecretKey == info.SecretKey)
+ if (sForwardServerStore.SecretKey == info.SecretKey)
{
info.GroupId = string.Empty;
}
@@ -77,15 +75,15 @@ namespace linker.plugins.flow.messenger
}
}
- connection.Write(Serializer.Serialize(sForwardFlow.GetFlows(info)));
+ connection.Write(serializer.Serialize(sForwardFlow.GetFlows(info)));
}
[MessengerId((ushort)FlowMessengerIds.Relay)]
public void Relay(IConnection connection)
{
relayFlow.Update();
- RelayFlowRequestInfo info = Serializer.Deserialize(connection.ReceiveRequestWrap.Payload.Span);
- if (relayServerConfigTransfer.SecretKey == info.SecretKey)
+ RelayFlowRequestInfo info = serializer.Deserialize(connection.ReceiveRequestWrap.Payload.Span);
+ if (relayServerStore.SecretKey == info.SecretKey)
{
info.GroupId = string.Empty;
}
@@ -101,7 +99,7 @@ namespace linker.plugins.flow.messenger
}
}
- connection.Write(Serializer.Serialize(relayFlow.GetFlows(info)));
+ connection.Write(serializer.Serialize(relayFlow.GetFlows(info)));
}
}
diff --git a/linker/plugins/flow/messenger/FlowMessengerIds.cs b/linker.messenger.flow/messenger/FlowMessengerIds.cs
similarity index 81%
rename from linker/plugins/flow/messenger/FlowMessengerIds.cs
rename to linker.messenger.flow/messenger/FlowMessengerIds.cs
index 36ae15f1..7ba029ca 100644
--- a/linker/plugins/flow/messenger/FlowMessengerIds.cs
+++ b/linker.messenger.flow/messenger/FlowMessengerIds.cs
@@ -1,4 +1,4 @@
-namespace linker.plugins.flow.messenger
+namespace linker.messenger.flow.messenger
{
public enum FlowMessengerIds : ushort
{
diff --git a/linker/plugins/forward/config/Config.cs b/linker.messenger.forward/Config.cs
similarity index 73%
rename from linker/plugins/forward/config/Config.cs
rename to linker.messenger.forward/Config.cs
index 9d6454d8..619dc63e 100644
--- a/linker/plugins/forward/config/Config.cs
+++ b/linker.messenger.forward/Config.cs
@@ -1,22 +1,9 @@
-using LiteDB;
-using MemoryPack;
-using System.Net;
-using System.Text.Json.Serialization;
-
-namespace linker.client.config
+using System.Net;
+namespace linker.messenger.forward
{
- public sealed partial class RunningConfigInfo
- {
- ///
- /// 端口转发配置
- ///
- public List Forwards { get; set; } = new List();
- }
-
///
/// 端口转发配置
///
- [MemoryPackable]
public sealed partial class ForwardInfo
{
public ForwardInfo() { }
@@ -34,7 +21,6 @@ namespace linker.client.config
///
/// 本地绑定IP
///
- [MemoryPackAllowSerialize]
public IPAddress BindIPAddress { get; set; } = IPAddress.Any;
///
/// 本地监听端口
@@ -43,7 +29,6 @@ namespace linker.client.config
///
/// 目标设备服务
///
- [MemoryPackAllowSerialize]
public IPEndPoint TargetEP { get; set; }
///
/// 已启动
@@ -63,8 +48,23 @@ namespace linker.client.config
///
public string TargetMsg { get; set; }
- [JsonIgnore, BsonIgnore, MemoryPackIgnore]
public bool Proxy { get; set; }
}
+
+ public sealed partial class ForwardAddForwardInfo
+ {
+ public string MachineId { get; set; }
+ public ForwardInfo Data { get; set; }
+ }
+ public sealed partial class ForwardRemoveForwardInfo
+ {
+ public string MachineId { get; set; }
+ public uint Id { get; set; }
+ }
+ public sealed partial class ForwardCountInfo
+ {
+ public string MachineId { get; set; }
+ public int Count { get; set; }
+ }
}
diff --git a/linker.messenger.forward/Entry.cs b/linker.messenger.forward/Entry.cs
new file mode 100644
index 00000000..a236cef9
--- /dev/null
+++ b/linker.messenger.forward/Entry.cs
@@ -0,0 +1,57 @@
+using linker.messenger.api;
+using linker.messenger.decenter;
+using linker.messenger.forward.proxy;
+using Microsoft.Extensions.DependencyInjection;
+namespace linker.messenger.forward
+{
+ public static class Entry
+ {
+ public static ServiceCollection AddForwardClient(this ServiceCollection serviceCollection)
+ {
+ serviceCollection.AddSingleton();
+
+ serviceCollection.AddSingleton();
+
+ serviceCollection.AddSingleton();
+
+ serviceCollection.AddSingleton();
+
+
+ serviceCollection.AddSingleton();
+
+ return serviceCollection;
+ }
+ public static ServiceProvider UseForwardClient(this ServiceProvider serviceProvider)
+ {
+ IApiServer apiServer = serviceProvider.GetService();
+ apiServer.AddPlugins(new List { serviceProvider.GetService() });
+
+ ForwardTransfer forwardTransfer = serviceProvider.GetService();
+
+ IMessengerResolver messengerResolver = serviceProvider.GetService();
+ messengerResolver.AddMessenger(new List { serviceProvider.GetService() });
+
+ DecenterClientTransfer decenterClientTransfer = serviceProvider.GetService();
+ decenterClientTransfer.AddDecenters(new List { serviceProvider.GetService() });
+
+ ForwardProxy forwardProxy= serviceProvider.GetService();
+
+ return serviceProvider;
+ }
+
+
+ public static ServiceCollection AddForwardServer(this ServiceCollection serviceCollection)
+ {
+ serviceCollection.AddSingleton();
+
+ return serviceCollection;
+ }
+ public static ServiceProvider UseForwardServer(this ServiceProvider serviceProvider)
+ {
+ IMessengerResolver messengerResolver = serviceProvider.GetService();
+ messengerResolver.AddMessenger(new List { serviceProvider.GetService() });
+
+ return serviceProvider;
+ }
+ }
+}
diff --git a/linker/plugins/forward/ForwardApiController.cs b/linker.messenger.forward/ForwardApiController.cs
similarity index 73%
rename from linker/plugins/forward/ForwardApiController.cs
rename to linker.messenger.forward/ForwardApiController.cs
index cd1942c9..1b36f7d0 100644
--- a/linker/plugins/forward/ForwardApiController.cs
+++ b/linker.messenger.forward/ForwardApiController.cs
@@ -1,42 +1,36 @@
using linker.libs.api;
using linker.libs.extends;
-using linker.client.config;
using System.Net;
using linker.libs;
-using linker.plugins.forward.proxy;
using linker.tunnel.connection;
using System.Collections.Concurrent;
-using linker.plugins.forward.messenger;
-using linker.serializer;
-using linker.plugins.client;
-using linker.plugins.capi;
-using linker.plugins.messenger;
-using linker.config;
-using linker.plugins.access;
-using linker.messenger;
using linker.messenger.signin;
+using linker.messenger.forward.proxy;
+using linker.messenger.api;
-namespace linker.plugins.forward
+namespace linker.messenger.forward
{
- public sealed class ForwardClientApiController : IApiClientController
+ public sealed class ForwardApiController : IApiController
{
private readonly ForwardTransfer forwardTransfer;
private readonly ForwardProxy forwardProxy;
private readonly IMessengerSender messengerSender;
private readonly SignInClientState signInClientState;
- private readonly AccessTransfer accessTransfer;
+ private readonly IAccessStore accessStore;
private readonly ISignInClientStore signInClientStore;
private readonly ForwardDecenter forwardDecenter;
+ private readonly ISerializer serializer;
- public ForwardClientApiController(ForwardTransfer forwardTransfer, ForwardProxy forwardProxy, IMessengerSender messengerSender, SignInClientState signInClientState, AccessTransfer accessTransfer, ISignInClientStore signInClientStore, ForwardDecenter forwardDecenter)
+ public ForwardApiController(ForwardTransfer forwardTransfer, ForwardProxy forwardProxy, IMessengerSender messengerSender, SignInClientState signInClientState, IAccessStore accessStore, ISignInClientStore signInClientStore, ForwardDecenter forwardDecenter, ISerializer serializer)
{
this.forwardTransfer = forwardTransfer;
this.forwardProxy = forwardProxy;
this.messengerSender = messengerSender;
this.signInClientState = signInClientState;
- this.accessTransfer = accessTransfer;
+ this.accessStore = accessStore;
this.signInClientStore = signInClientStore;
this.forwardDecenter = forwardDecenter;
+ this.serializer = serializer;
}
public ConnectionListInfo Connections(ApiControllerParamsInfo param)
@@ -53,7 +47,7 @@ namespace linker.plugins.forward
return new ConnectionListInfo { HashCode = version };
}
- [ClientApiAccessAttribute(ClientApiAccess.TunnelRemove)]
+ [Access(AccessValue.TunnelRemove)]
public void RemoveConnection(ApiControllerParamsInfo param)
{
forwardProxy.RemoveConnection(param.Content);
@@ -91,20 +85,20 @@ namespace linker.plugins.forward
{
if (param.Content == signInClientStore.Id)
{
- if (accessTransfer.HasAccess(ClientApiAccess.ForwardShowSelf) == false) return new List();
+ if (accessStore.HasAccess(AccessValue.ForwardShowSelf) == false) return new List();
return forwardTransfer.Get();
}
- if (accessTransfer.HasAccess(ClientApiAccess.ForwardShowOther) == false) return new List();
+ if (accessStore.HasAccess(AccessValue.ForwardShowOther) == false) return new List();
var resp = await messengerSender.SendReply(new MessageRequestWrap
{
Connection = signInClientState.Connection,
MessengerId = (ushort)ForwardMessengerIds.GetForward,
- Payload = Serializer.Serialize(param.Content)
+ Payload = serializer.Serialize(param.Content)
});
if (resp.Code == MessageResponeCodes.OK)
{
- return Serializer.Deserialize>(resp.Data.Span);
+ return serializer.Deserialize>(resp.Data.Span);
}
return new List();
}
@@ -119,16 +113,16 @@ namespace linker.plugins.forward
ForwardAddForwardInfo info = param.Content.DeJson();
if (info.MachineId == signInClientStore.Id)
{
- if (accessTransfer.HasAccess(ClientApiAccess.ForwardSelf) == false) return false;
+ if (accessStore.HasAccess(AccessValue.ForwardSelf) == false) return false;
return forwardTransfer.Add(info.Data);
}
- if (accessTransfer.HasAccess(ClientApiAccess.ForwardOther) == false) return false;
+ if (accessStore.HasAccess(AccessValue.ForwardOther) == false) return false;
return await messengerSender.SendOnly(new MessageRequestWrap
{
Connection = signInClientState.Connection,
MessengerId = (ushort)ForwardMessengerIds.AddClientForward,
- Payload = Serializer.Serialize(info)
+ Payload = serializer.Serialize(info)
});
}
@@ -142,16 +136,16 @@ namespace linker.plugins.forward
ForwardRemoveForwardInfo info = param.Content.DeJson();
if (info.MachineId == signInClientStore.Id)
{
- if (accessTransfer.HasAccess(ClientApiAccess.ForwardSelf) == false) return false;
+ if (accessStore.HasAccess(AccessValue.ForwardSelf) == false) return false;
return forwardTransfer.Remove(info.Id);
}
- if (accessTransfer.HasAccess(ClientApiAccess.ForwardOther) == false) return false;
+ if (accessStore.HasAccess(AccessValue.ForwardOther) == false) return false;
return await messengerSender.SendOnly(new MessageRequestWrap
{
Connection = signInClientState.Connection,
MessengerId = (ushort)ForwardMessengerIds.RemoveClientForward,
- Payload = Serializer.Serialize(info)
+ Payload = serializer.Serialize(info)
});
}
}
diff --git a/linker/plugins/forward/ForwardDecenter.cs b/linker.messenger.forward/ForwardDecenter.cs
similarity index 66%
rename from linker/plugins/forward/ForwardDecenter.cs
rename to linker.messenger.forward/ForwardDecenter.cs
index 803a44ac..1fee5522 100644
--- a/linker/plugins/forward/ForwardDecenter.cs
+++ b/linker.messenger.forward/ForwardDecenter.cs
@@ -1,46 +1,48 @@
using linker.libs;
using linker.messenger.decenter;
using linker.messenger.signin;
-using linker.plugins.client;
-using linker.serializer;
using System.Collections.Concurrent;
-namespace linker.plugins.forward
+namespace linker.messenger.forward
{
- public sealed class ForwardDecenter:IDecenter
+ public sealed class ForwardDecenter : IDecenter
{
public string Name => "forward";
public VersionManager SyncVersion { get; } = new VersionManager();
public VersionManager DataVersion { get; } = new VersionManager();
- public ConcurrentDictionary CountDic { get; }= new ConcurrentDictionary();
+ public ConcurrentDictionary CountDic { get; } = new ConcurrentDictionary();
private readonly ISignInClientStore signInClientStore;
private readonly ForwardTransfer forwardTransfer;
- public ForwardDecenter(ISignInClientStore signInClientStore, ForwardTransfer forwardTransfer)
+ private readonly ISerializer serializer;
+ public ForwardDecenter(ISignInClientStore signInClientStore, ForwardTransfer forwardTransfer, ISerializer serializer)
{
this.signInClientStore = signInClientStore;
this.forwardTransfer = forwardTransfer;
+ this.serializer = serializer;
+
forwardTransfer.OnReset += CountDic.Clear;
forwardTransfer.OnChanged += SyncVersion.Add;
+
}
public Memory GetData()
{
- CountInfo info = new CountInfo { MachineId = signInClientStore.Id, Count = forwardTransfer.Count };
+ ForwardCountInfo info = new ForwardCountInfo { MachineId = signInClientStore.Id, Count = forwardTransfer.Count };
CountDic.AddOrUpdate(info.MachineId, info.Count, (a, b) => info.Count);
DataVersion.Add();
- return Serializer.Serialize(info);
+ return serializer.Serialize(info);
}
public void SetData(Memory data)
{
- CountInfo info = Serializer.Deserialize(data.Span);
+ ForwardCountInfo info = serializer.Deserialize(data.Span);
CountDic.AddOrUpdate(info.MachineId, info.Count, (a, b) => info.Count);
DataVersion.Add();
}
public void SetData(List> data)
{
- List list = data.Select(c => Serializer.Deserialize(c.Span)).ToList();
+ List list = data.Select(c => serializer.Deserialize(c.Span)).ToList();
foreach (var info in list)
{
CountDic.AddOrUpdate(info.MachineId, info.Count, (a, b) => info.Count);
diff --git a/linker/plugins/forward/messenger/ForwardMessenger.cs b/linker.messenger.forward/ForwardMessenger.cs
similarity index 81%
rename from linker/plugins/forward/messenger/ForwardMessenger.cs
rename to linker.messenger.forward/ForwardMessenger.cs
index 7a716ea3..b1ab409d 100644
--- a/linker/plugins/forward/messenger/ForwardMessenger.cs
+++ b/linker.messenger.forward/ForwardMessenger.cs
@@ -1,21 +1,19 @@
-using linker.client.config;
-using linker.messenger;
+using linker.libs;
using linker.messenger.signin;
-using linker.serializer;
-using MemoryPack;
-namespace linker.plugins.forward.messenger
+namespace linker.messenger.forward
{
public sealed class ForwardServerMessenger : IMessenger
{
private readonly IMessengerSender sender;
private readonly SignInServerCaching signCaching;
-
- public ForwardServerMessenger(IMessengerSender sender, SignInServerCaching signCaching)
+ private readonly ISerializer serializer;
+ public ForwardServerMessenger(IMessengerSender sender, SignInServerCaching signCaching, ISerializer serializer)
{
this.sender = sender;
this.signCaching = signCaching;
+ this.serializer = serializer;
}
///
@@ -25,7 +23,7 @@ namespace linker.plugins.forward.messenger
[MessengerId((ushort)ForwardMessengerIds.GetForward)]
public void GetForward(IConnection connection)
{
- string machineId = Serializer.Deserialize(connection.ReceiveRequestWrap.Payload.Span);
+ string machineId = serializer.Deserialize(connection.ReceiveRequestWrap.Payload.Span);
if (signCaching.TryGet(machineId, out SignCacheInfo cacheTo) && signCaching.TryGet(connection.Id, out SignCacheInfo cacheFrom) && cacheFrom.GroupId == cacheTo.GroupId)
{
uint requestid = connection.ReceiveRequestWrap.RequestId;
@@ -56,7 +54,7 @@ namespace linker.plugins.forward.messenger
[MessengerId((ushort)ForwardMessengerIds.AddClientForward)]
public async Task AddClientForward(IConnection connection)
{
- ForwardAddForwardInfo info = Serializer.Deserialize(connection.ReceiveRequestWrap.Payload.Span);
+ ForwardAddForwardInfo info = serializer.Deserialize(connection.ReceiveRequestWrap.Payload.Span);
if (signCaching.TryGet(info.MachineId, out SignCacheInfo cacheTo) && signCaching.TryGet(connection.Id, out SignCacheInfo cacheFrom) && cacheFrom.GroupId == cacheTo.GroupId)
{
uint requestid = connection.ReceiveRequestWrap.RequestId;
@@ -64,7 +62,7 @@ namespace linker.plugins.forward.messenger
{
Connection = cacheTo.Connection,
MessengerId = (ushort)ForwardMessengerIds.AddClient,
- Payload = Serializer.Serialize(info.Data)
+ Payload = serializer.Serialize(info.Data)
});
}
}
@@ -75,7 +73,7 @@ namespace linker.plugins.forward.messenger
[MessengerId((ushort)ForwardMessengerIds.RemoveClientForward)]
public async Task RemoveClientForward(IConnection connection)
{
- ForwardRemoveForwardInfo info = Serializer.Deserialize(connection.ReceiveRequestWrap.Payload.Span);
+ ForwardRemoveForwardInfo info = serializer.Deserialize(connection.ReceiveRequestWrap.Payload.Span);
if (signCaching.TryGet(info.MachineId, out SignCacheInfo cacheTo) && signCaching.TryGet(connection.Id, out SignCacheInfo cacheFrom) && cacheFrom.GroupId == cacheTo.GroupId)
{
uint requestid = connection.ReceiveRequestWrap.RequestId;
@@ -83,7 +81,7 @@ namespace linker.plugins.forward.messenger
{
Connection = cacheTo.Connection,
MessengerId = (ushort)ForwardMessengerIds.RemoveClient,
- Payload = Serializer.Serialize(info.Id)
+ Payload = serializer.Serialize(info.Id)
});
}
}
@@ -94,17 +92,18 @@ namespace linker.plugins.forward.messenger
{
private readonly ForwardTransfer forwardTransfer;
private readonly IMessengerSender sender;
-
- public ForwardClientMessenger(ForwardTransfer forwardTransfer, IMessengerSender sender)
+ private readonly ISerializer serializer;
+ public ForwardClientMessenger(ForwardTransfer forwardTransfer, IMessengerSender sender, ISerializer serializer)
{
this.forwardTransfer = forwardTransfer;
this.sender = sender;
+ this.serializer = serializer;
}
[MessengerId((ushort)ForwardMessengerIds.Get)]
public void Get(IConnection connection)
{
- connection.Write(Serializer.Serialize(forwardTransfer.Get()));
+ connection.Write(serializer.Serialize(forwardTransfer.Get()));
}
///
/// 添加
@@ -113,7 +112,7 @@ namespace linker.plugins.forward.messenger
[MessengerId((ushort)ForwardMessengerIds.AddClient)]
public void AddClient(IConnection connection)
{
- ForwardInfo info = Serializer.Deserialize(connection.ReceiveRequestWrap.Payload.Span);
+ ForwardInfo info = serializer.Deserialize(connection.ReceiveRequestWrap.Payload.Span);
forwardTransfer.Add(info);
}
//
@@ -123,21 +122,10 @@ namespace linker.plugins.forward.messenger
[MessengerId((ushort)ForwardMessengerIds.RemoveClient)]
public void RemoveClient(IConnection connection)
{
- uint id = Serializer.Deserialize(connection.ReceiveRequestWrap.Payload.Span);
+ uint id = serializer.Deserialize(connection.ReceiveRequestWrap.Payload.Span);
forwardTransfer.Remove(id);
}
}
- [MemoryPackable]
- public sealed partial class ForwardAddForwardInfo
- {
- public string MachineId { get; set; }
- public ForwardInfo Data { get; set; }
- }
- [MemoryPackable]
- public sealed partial class ForwardRemoveForwardInfo
- {
- public string MachineId { get; set; }
- public uint Id { get; set; }
- }
+
}
diff --git a/linker/plugins/forward/messenger/ForwardMessengerIds.cs b/linker.messenger.forward/ForwardMessengerIds.cs
similarity index 87%
rename from linker/plugins/forward/messenger/ForwardMessengerIds.cs
rename to linker.messenger.forward/ForwardMessengerIds.cs
index e8df76f2..d232b590 100644
--- a/linker/plugins/forward/messenger/ForwardMessengerIds.cs
+++ b/linker.messenger.forward/ForwardMessengerIds.cs
@@ -1,4 +1,4 @@
-namespace linker.plugins.forward.messenger
+namespace linker.messenger.forward
{
public enum ForwardMessengerIds : ushort
{
diff --git a/linker/plugins/forward/ForwardTransfer.cs b/linker.messenger.forward/ForwardTransfer.cs
similarity index 70%
rename from linker/plugins/forward/ForwardTransfer.cs
rename to linker.messenger.forward/ForwardTransfer.cs
index fa808953..fa5f2c10 100644
--- a/linker/plugins/forward/ForwardTransfer.cs
+++ b/linker.messenger.forward/ForwardTransfer.cs
@@ -1,20 +1,17 @@
-using linker.client.config;
-using linker.libs;
-using linker.messenger;
+using linker.libs;
+using linker.libs.extends;
+using linker.messenger.forward.proxy;
using linker.messenger.signin;
-using linker.plugins.client;
-using linker.plugins.forward.proxy;
-using MemoryPack;
-namespace linker.plugins.forward
+namespace linker.messenger.forward
{
public sealed class ForwardTransfer
{
- public int Count => running.Data.Forwards.Count(c => c.GroupId == signInClientStore.Group.Id);
+ public int Count => forwardClientStore.Get().Count(c => c.GroupId == signInClientStore.Group.Id);
public Action OnChanged { get; set; } = () => { };
- public Action OnReset{ get; set; } = () => { };
+ public Action OnReset { get; set; } = () => { };
- private readonly RunningConfig running;
+ private readonly IForwardClientStore forwardClientStore;
private readonly ForwardProxy forwardProxy;
private readonly SignInClientState signInClientState;
private readonly IMessengerSender messengerSender;
@@ -22,9 +19,9 @@ namespace linker.plugins.forward
private readonly NumberSpaceUInt32 ns = new NumberSpaceUInt32();
- public ForwardTransfer( RunningConfig running, ForwardProxy forwardProxy, SignInClientState signInClientState, IMessengerSender messengerSender, ISignInClientStore signInClientStore)
+ public ForwardTransfer(IForwardClientStore forwardClientStore, ForwardProxy forwardProxy, SignInClientState signInClientState, IMessengerSender messengerSender, ISignInClientStore signInClientStore)
{
- this.running = running;
+ this.forwardClientStore = forwardClientStore;
this.forwardProxy = forwardProxy;
this.signInClientState = signInClientState;
this.messengerSender = messengerSender;
@@ -38,15 +35,6 @@ namespace linker.plugins.forward
{
TimerHelper.Async(async () =>
{
- if (running.Data.Forwards.All(c => string.IsNullOrWhiteSpace(c.GroupId)))
- {
- foreach (var item in running.Data.Forwards)
- {
- item.GroupId = signInClientStore.Group.Id;
- }
- running.Data.Update();
- }
-
if (groupid != signInClientStore.Group.Id)
{
OnReset();
@@ -58,15 +46,15 @@ namespace linker.plugins.forward
Start(false);
});
}
-
+
private void Start(bool errorStop = true)
{
lock (this)
{
- uint maxid = running.Data.Forwards.Count > 0 ? running.Data.Forwards.Max(c => c.Id) : 1;
+ uint maxid = forwardClientStore.Count() > 0 ? forwardClientStore.Get().Max(c => c.Id) : 1;
ns.Reset(maxid);
- foreach (var item in running.Data.Forwards.Where(c => c.GroupId == signInClientStore.Group.Id))
+ foreach (var item in forwardClientStore.Get(signInClientStore.Group.Id))
{
if (item.Started)
{
@@ -76,7 +64,9 @@ namespace linker.plugins.forward
{
Stop(item);
}
+ forwardClientStore.Update(item);
}
+ forwardClientStore.Confirm();
OnChanged();
}
}
@@ -124,7 +114,7 @@ namespace linker.plugins.forward
{
lock (this)
{
- foreach (var item in running.Data.Forwards)
+ foreach (var item in forwardClientStore.Get())
{
Stop(item);
}
@@ -136,7 +126,8 @@ namespace linker.plugins.forward
{
if (forwardInfo.Proxy)
{
- LoggerHelper.Instance.Debug($"stop forward {forwardInfo.Port}->{forwardInfo.MachineId}->{forwardInfo.TargetEP}");
+ if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
+ LoggerHelper.Instance.Debug($"stop forward {forwardInfo.ToJson()}");
forwardProxy.StopPort(forwardInfo.Port);
forwardInfo.Proxy = false;
}
@@ -150,19 +141,22 @@ namespace linker.plugins.forward
public List Get()
{
- return running.Data.Forwards.Where(c => c.GroupId == signInClientStore.Group.Id).ToList();
+ return forwardClientStore.Get(signInClientStore.Group.Id);
}
public bool Add(ForwardInfo forwardInfo)
{
//同名或者同端口,但是ID不一样
- ForwardInfo old = running.Data.Forwards.FirstOrDefault(c => (c.Port == forwardInfo.Port && c.Port != 0) && c.MachineId == forwardInfo.MachineId);
+ ForwardInfo old = forwardClientStore.Get().FirstOrDefault(c => (c.Port == forwardInfo.Port && c.Port != 0) && c.MachineId == forwardInfo.MachineId);
if (old != null && old.Id != forwardInfo.Id) return false;
if (forwardInfo.Id != 0)
{
- old = running.Data.Forwards.FirstOrDefault(c => c.Id == forwardInfo.Id);
+ old = forwardClientStore.Get(forwardInfo.Id);
if (old == null) return false;
+ if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
+ LoggerHelper.Instance.Debug($"update forward {old.ToJson()}->{forwardInfo.ToJson()}");
+
old.BindIPAddress = forwardInfo.BindIPAddress;
old.Port = forwardInfo.Port;
old.Name = forwardInfo.Name;
@@ -177,9 +171,13 @@ namespace linker.plugins.forward
{
forwardInfo.Id = ns.Increment();
forwardInfo.GroupId = signInClientStore.Group.Id;
- running.Data.Forwards.Add(forwardInfo);
+
+ if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
+ LoggerHelper.Instance.Debug($"add forward {forwardInfo.ToJson()}");
+
+ forwardClientStore.Add(forwardInfo);
}
- running.Data.Update();
+ forwardClientStore.Confirm();
Start();
@@ -188,24 +186,19 @@ namespace linker.plugins.forward
public bool Remove(uint id)
{
//同名或者同端口,但是ID不一样
- ForwardInfo old = running.Data.Forwards.FirstOrDefault(c => c.Id == id);
+ ForwardInfo old = forwardClientStore.Get(id);
if (old == null) return false;
old.Started = false;
- running.Data.Forwards.Remove(old);
- running.Data.Update();
+ forwardClientStore.Remove(old.Id);
+
+ if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
+ LoggerHelper.Instance.Debug($"remove forward {old.ToJson()}");
Start();
-
+ forwardClientStore.Confirm();
return true;
}
}
-
- [MemoryPackable]
- public sealed partial class CountInfo
- {
- public string MachineId { get; set; }
- public int Count { get; set; }
- }
}
diff --git a/linker.messenger.forward/IForwardClientStore.cs b/linker.messenger.forward/IForwardClientStore.cs
new file mode 100644
index 00000000..a3f873c7
--- /dev/null
+++ b/linker.messenger.forward/IForwardClientStore.cs
@@ -0,0 +1,16 @@
+namespace linker.messenger.forward
+{
+ public interface IForwardClientStore
+ {
+ public int Count();
+
+ public List Get();
+ public ForwardInfo Get(uint id);
+ public List Get(string groupId);
+ public bool Add(ForwardInfo info);
+ public bool Update(ForwardInfo info);
+ public bool Remove(uint id);
+
+ public bool Confirm();
+ }
+}
diff --git a/linker.messenger.forward/linker.messenger.forward.csproj b/linker.messenger.forward/linker.messenger.forward.csproj
new file mode 100644
index 00000000..bd304813
--- /dev/null
+++ b/linker.messenger.forward/linker.messenger.forward.csproj
@@ -0,0 +1,41 @@
+
+
+
+
+ net8.0
+ enable
+ disable
+ true
+ false
+ true
+ True
+ linker messenger forward
+ snltty
+ snltty
+ linker messenger forward
+ snltty
+ https://github.com/snltty/linker
+ https://github.com/snltty/linker
+ linker messenger forward
+ 1.6.4
+ 1.6.4
+ 1.6.4
+
+
+
+ full
+ true
+
+
+ none
+ false
+ True
+
+
+
+
+
+
+
+
+
diff --git a/linker/plugins/forward/proxy/ForwardProxy.cs b/linker.messenger.forward/proxy/ForwardProxy.cs
similarity index 99%
rename from linker/plugins/forward/proxy/ForwardProxy.cs
rename to linker.messenger.forward/proxy/ForwardProxy.cs
index 654488f5..666808ca 100644
--- a/linker/plugins/forward/proxy/ForwardProxy.cs
+++ b/linker.messenger.forward/proxy/ForwardProxy.cs
@@ -5,7 +5,7 @@ using System.Buffers;
using System.Net;
using System.Net.Sockets;
-namespace linker.plugins.forward.proxy
+namespace linker.messenger.forward.proxy
{
public partial class ForwardProxy
diff --git a/linker/plugins/forward/proxy/ForwardProxyTcp.cs b/linker.messenger.forward/proxy/ForwardProxyTcp.cs
similarity index 99%
rename from linker/plugins/forward/proxy/ForwardProxyTcp.cs
rename to linker.messenger.forward/proxy/ForwardProxyTcp.cs
index 20d99112..5e5fde4a 100644
--- a/linker/plugins/forward/proxy/ForwardProxyTcp.cs
+++ b/linker.messenger.forward/proxy/ForwardProxyTcp.cs
@@ -6,7 +6,7 @@ using System.Collections.Concurrent;
using System.Net;
using System.Net.Sockets;
-namespace linker.plugins.forward.proxy
+namespace linker.messenger.forward.proxy
{
public partial class ForwardProxy
{
diff --git a/linker/plugins/forward/proxy/ForwardProxyTunnel.cs b/linker.messenger.forward/proxy/ForwardProxyTunnel.cs
similarity index 94%
rename from linker/plugins/forward/proxy/ForwardProxyTunnel.cs
rename to linker.messenger.forward/proxy/ForwardProxyTunnel.cs
index 74ddf82c..df900986 100644
--- a/linker/plugins/forward/proxy/ForwardProxyTunnel.cs
+++ b/linker.messenger.forward/proxy/ForwardProxyTunnel.cs
@@ -2,16 +2,14 @@
using linker.tunnel.connection;
using System.Collections.Concurrent;
using System.Net;
-using linker.plugins.client;
-using linker.plugins.tunnel;
-using linker.plugins.relay.client;
-using linker.plugins.pcp;
using linker.messenger.relay.client;
using linker.messenger.signin;
+using linker.messenger.channel;
+using linker.messenger.pcp;
-namespace linker.plugins.forward.proxy
+namespace linker.messenger.forward.proxy
{
- public sealed partial class ForwardProxy : TunnelBase, ITunnelConnectionReceiveCallback
+ public sealed partial class ForwardProxy : Channel, ITunnelConnectionReceiveCallback
{
private readonly ConcurrentDictionary caches = new ConcurrentDictionary();
private readonly ConcurrentDictionary locks = new ConcurrentDictionary();
@@ -19,8 +17,8 @@ namespace linker.plugins.forward.proxy
protected override string TransactionId => "forward";
- public ForwardProxy(ISignInClientStore signInClientStore, TunnelTransfer tunnelTransfer, RelayClientTransfer relayTransfer, PcpTransfer pcpTransfer, SignInClientTransfer signInClientTransfer, RelayClientConfigTransfer relayClientConfigTransfer)
- : base(tunnelTransfer, relayTransfer, pcpTransfer, signInClientTransfer, signInClientStore, relayClientConfigTransfer)
+ public ForwardProxy(ISignInClientStore signInClientStore, TunnelTransfer tunnelTransfer, RelayClientTransfer relayTransfer, PcpTransfer pcpTransfer, SignInClientTransfer signInClientTransfer, IRelayClientStore relayClientStore)
+ : base(tunnelTransfer, relayTransfer, pcpTransfer, signInClientTransfer, signInClientStore, relayClientStore)
{
TaskUdp();
}
diff --git a/linker/plugins/forward/proxy/ForwardProxyUdp.cs b/linker.messenger.forward/proxy/ForwardProxyUdp.cs
similarity index 99%
rename from linker/plugins/forward/proxy/ForwardProxyUdp.cs
rename to linker.messenger.forward/proxy/ForwardProxyUdp.cs
index abf07aa1..e916c360 100644
--- a/linker/plugins/forward/proxy/ForwardProxyUdp.cs
+++ b/linker.messenger.forward/proxy/ForwardProxyUdp.cs
@@ -5,7 +5,7 @@ using System.Collections.Concurrent;
using System.Net;
using System.Net.Sockets;
-namespace linker.plugins.forward.proxy
+namespace linker.messenger.forward.proxy
{
public partial class ForwardProxy
{
diff --git a/linker.messenger.listen/Entry.cs b/linker.messenger.listen/Entry.cs
index 3f925582..893c3186 100644
--- a/linker.messenger.listen/Entry.cs
+++ b/linker.messenger.listen/Entry.cs
@@ -1,6 +1,5 @@
using linker.libs;
using Microsoft.Extensions.DependencyInjection;
-using System.Security.Cryptography.X509Certificates;
namespace linker.messenger.listen
{
public static class Entry
@@ -10,7 +9,7 @@ namespace linker.messenger.listen
serviceCollection.AddSingleton();
return serviceCollection;
}
- public static ServiceProvider UseListen(this ServiceProvider serviceProvider, X509Certificate2 certificate)
+ public static ServiceProvider UseListen(this ServiceProvider serviceProvider)
{
TcpServer tcpServer = serviceProvider.GetService();
IListenStore listenStore = serviceProvider.GetService();
diff --git a/linker.messenger.logger/Entry.cs b/linker.messenger.logger/Entry.cs
new file mode 100644
index 00000000..ec5e81dd
--- /dev/null
+++ b/linker.messenger.logger/Entry.cs
@@ -0,0 +1,90 @@
+using linker.libs;
+using linker.messenger.api;
+using Microsoft.Extensions.DependencyInjection;
+namespace linker.messenger.logger
+{
+ public static class Entry
+ {
+ public static ServiceCollection AddLoggerClient(this ServiceCollection serviceCollection)
+ {
+ LoggerConsole();
+ serviceCollection.AddSingleton();
+ return serviceCollection;
+ }
+ public static ServiceProvider UseLoggerClient(this ServiceProvider serviceProvider)
+ {
+ IApiServer apiServer = serviceProvider.GetService();
+ apiServer.AddPlugins(new List { serviceProvider.GetService() });
+
+ IAccessStore accessStore= serviceProvider.GetService();
+ ILoggerStore loggerStore= serviceProvider.GetService();
+ if (accessStore.HasAccess(AccessValue.LoggerLevel) == false)
+ {
+ loggerStore.SetLevel( libs.LoggerTypes.WARNING);
+ loggerStore.Confirm();
+ }
+
+ return serviceProvider;
+ }
+
+
+ private static void LoggerConsole()
+ {
+ if (Directory.Exists("logs") == false)
+ {
+ Directory.CreateDirectory("logs");
+ }
+ LoggerHelper.Instance.OnLogger += (model) =>
+ {
+ ConsoleColor currentForeColor = Console.ForegroundColor;
+ switch (model.Type)
+ {
+ case LoggerTypes.DEBUG:
+ Console.ForegroundColor = ConsoleColor.Blue;
+ break;
+ case LoggerTypes.INFO:
+ Console.ForegroundColor = ConsoleColor.White;
+ break;
+ case LoggerTypes.WARNING:
+ Console.ForegroundColor = ConsoleColor.Yellow;
+ break;
+ case LoggerTypes.ERROR:
+ Console.ForegroundColor = ConsoleColor.Red;
+ break;
+ default:
+ break;
+ }
+ string line = $"[{model.Type,-7}][{model.Time:yyyy-MM-dd HH:mm:ss}]:{model.Content}";
+ Console.WriteLine(line);
+ Console.ForegroundColor = currentForeColor;
+ try
+ {
+ using StreamWriter sw = File.AppendText(Path.Combine("logs", $"{DateTime.Now:yyyy-MM-dd}.log"));
+ sw.WriteLine(line);
+ sw.Flush();
+ sw.Close();
+ sw.Dispose();
+ }
+ catch (Exception)
+ {
+ }
+ };
+ TimerHelper.SetInterval(() =>
+ {
+ string[] files = Directory.GetFiles("logs").OrderBy(c => c).ToArray();
+ for (int i = 0; i < files.Length - 180; i++)
+ {
+ try
+ {
+ File.Delete(files[i]);
+ }
+ catch (Exception)
+ {
+ }
+ }
+ return true;
+ }, 60 * 1000);
+ }
+
+ }
+}
diff --git a/linker.messenger.logger/ILoggerStore.cs b/linker.messenger.logger/ILoggerStore.cs
new file mode 100644
index 00000000..3ef605ac
--- /dev/null
+++ b/linker.messenger.logger/ILoggerStore.cs
@@ -0,0 +1,15 @@
+using linker.libs;
+
+namespace linker.messenger.logger
+{
+ public interface ILoggerStore
+ {
+ public LoggerTypes LoggerType { get; }
+ public int LoggerSize { get; }
+
+ public bool SetLevel(LoggerTypes level);
+ public bool SetSize(int size);
+
+ public bool Confirm();
+ }
+}
diff --git a/linker/plugins/logger/LoggerController.cs b/linker.messenger.logger/LoggerController.cs
similarity index 74%
rename from linker/plugins/logger/LoggerController.cs
rename to linker.messenger.logger/LoggerController.cs
index 8a4438fc..1f166be0 100644
--- a/linker/plugins/logger/LoggerController.cs
+++ b/linker.messenger.logger/LoggerController.cs
@@ -1,30 +1,28 @@
using linker.libs.extends;
using linker.libs.api;
using linker.libs;
-using linker.config;
-using linker.plugins.capi;
+using linker.messenger.api;
-namespace linker.plugins.logger
+namespace linker.messenger.logger
{
- public sealed class LoggerClientApiController : IApiClientController
+ public sealed class LoggerApiController : IApiController
{
private readonly List loggers = new List();
-
- private readonly FileConfig config;
- public LoggerClientApiController(FileConfig config)
+ private readonly ILoggerStore loggerStore;
+ public LoggerApiController(ILoggerStore loggerStore)
{
- this.config = config;
+ this.loggerStore = loggerStore;
LoggerHelper.Instance.OnLogger += (LoggerModel logger) =>
{
loggers.Add(logger);
- if (loggers.Count > config.Data.Common.LoggerSize)
+ if (loggers.Count > loggerStore.LoggerSize)
{
loggers.RemoveAt(0);
}
};
}
- [ClientApiAccessAttribute(ClientApiAccess.LoggerShow)]
+ [Access(AccessValue.LoggerShow)]
public LoggerPageInfo Get(ApiControllerParamsInfo param)
{
LoggerPageParamInfo info = param.Content.DeJson();
@@ -55,18 +53,18 @@ namespace linker.plugins.logger
{
return new LoggerSetParamInfo
{
- LoggerType = config.Data.Common.LoggerType,
- Size = config.Data.Common.LoggerSize
+ LoggerType = loggerStore.LoggerType,
+ Size = loggerStore.LoggerSize
};
}
- [ClientApiAccessAttribute(ClientApiAccess.LoggerLevel)]
+ [Access(AccessValue.LoggerLevel)]
public bool SetConfig(ApiControllerParamsInfo param)
{
LoggerSetParamInfo info = param.Content.DeJson();
- config.Data.Common.LoggerSize = info.Size;
- config.Data.Common.LoggerType = info.LoggerType;
- config.Data.Update();
+ loggerStore.SetLevel(info.LoggerType);
+ loggerStore.SetSize(info.Size);
+ loggerStore.Confirm();
return true;
}
diff --git a/linker.messenger.logger/linker.messenger.logger.csproj b/linker.messenger.logger/linker.messenger.logger.csproj
new file mode 100644
index 00000000..fb09b156
--- /dev/null
+++ b/linker.messenger.logger/linker.messenger.logger.csproj
@@ -0,0 +1,38 @@
+
+
+
+ net8.0
+ enable
+ disable
+ true
+ false
+ true
+ True
+ linker messenger logger
+ snltty
+ snltty
+ linker messenger logger
+ snltty
+ https://github.com/snltty/linker
+ https://github.com/snltty/linker
+ linker messenger logger
+ 1.6.4
+ 1.6.4
+ 1.6.4
+
+
+
+ full
+ true
+
+
+ none
+ false
+ True
+
+
+
+
+
+
+
diff --git a/linker.messenger.pcp/Entry.cs b/linker.messenger.pcp/Entry.cs
index 3bae3047..34e2543e 100644
--- a/linker.messenger.pcp/Entry.cs
+++ b/linker.messenger.pcp/Entry.cs
@@ -3,13 +3,13 @@ namespace linker.messenger.pcp
{
public static class Entry
{
- public static ServiceCollection AddRelayClient(this ServiceCollection serviceCollection)
+ public static ServiceCollection AddPcpClient(this ServiceCollection serviceCollection)
{
serviceCollection.AddSingleton();
serviceCollection.AddSingleton();
return serviceCollection;
}
- public static ServiceProvider UseRelayClient(this ServiceProvider serviceProvider)
+ public static ServiceProvider UsePcpClient(this ServiceProvider serviceProvider)
{
IMessengerResolver messengerResolver = serviceProvider.GetService();
messengerResolver.AddMessenger(new List { serviceProvider.GetService() });
@@ -17,12 +17,12 @@ namespace linker.messenger.pcp
}
- public static ServiceCollection AddRelayServer(this ServiceCollection serviceCollection)
+ public static ServiceCollection AddPcpServer(this ServiceCollection serviceCollection)
{
serviceCollection.AddSingleton();
return serviceCollection;
}
- public static ServiceProvider UseRelayServer(this ServiceProvider serviceProvider)
+ public static ServiceProvider UsePcpServer(this ServiceProvider serviceProvider)
{
IMessengerResolver messengerResolver = serviceProvider.GetService();
messengerResolver.AddMessenger(new List { serviceProvider.GetService() });
diff --git a/linker.messenger.relay/Entry.cs b/linker.messenger.relay/Entry.cs
index c9135dd6..5399b0fc 100644
--- a/linker.messenger.relay/Entry.cs
+++ b/linker.messenger.relay/Entry.cs
@@ -6,12 +6,10 @@ using linker.messenger.relay.server.caching;
using linker.messenger.relay.server.validator;
using linker.messenger.sync;
using Microsoft.Extensions.DependencyInjection;
-using System.Security.Cryptography.X509Certificates;
namespace linker.messenger.relay
{
public static class Entry
{
- public static X509Certificate2 certificate;
public static ServiceCollection AddRelayClient(this ServiceCollection serviceCollection)
{
serviceCollection.AddSingleton();
@@ -25,10 +23,8 @@ namespace linker.messenger.relay
return serviceCollection;
}
- public static ServiceProvider UseRelayClient(this ServiceProvider serviceProvider, X509Certificate2 certificate)
+ public static ServiceProvider UseRelayClient(this ServiceProvider serviceProvider)
{
- Entry.certificate = certificate;
-
IMessengerResolver messengerResolver = serviceProvider.GetService();
messengerResolver.AddMessenger(new List { serviceProvider.GetService() });
diff --git a/linker.messenger.relay/client/RelayApiController.cs b/linker.messenger.relay/client/RelayApiController.cs
index 47897d63..c467ffa0 100644
--- a/linker.messenger.relay/client/RelayApiController.cs
+++ b/linker.messenger.relay/client/RelayApiController.cs
@@ -1,5 +1,6 @@
using linker.libs.api;
using linker.libs.extends;
+using linker.messenger.api;
using linker.messenger.relay.client;
using linker.messenger.relay.client.transport;
using linker.messenger.relay.server;
@@ -27,6 +28,7 @@ namespace linker.messenger.relay
///
///
///
+ [Access(AccessValue.Config)]
public bool SetServers(ApiControllerParamsInfo param)
{
RelayServerInfo info = param.Content.DeJson();
diff --git a/linker.messenger.relay/client/RelayClientTransfer.cs b/linker.messenger.relay/client/RelayClientTransfer.cs
index a8a5b3be..cdcd12e7 100644
--- a/linker.messenger.relay/client/RelayClientTransfer.cs
+++ b/linker.messenger.relay/client/RelayClientTransfer.cs
@@ -18,11 +18,11 @@ namespace linker.messenger.relay.client
private Dictionary>> OnConnected { get; } = new Dictionary>>();
private readonly IRelayClientStore relayClientStore;
- public RelayClientTransfer(IMessengerSender messengerSender,ISerializer serializer,IRelayClientStore relayClientStore,SignInClientState signInClientState)
+ public RelayClientTransfer(IMessengerSender messengerSender,ISerializer serializer,IRelayClientStore relayClientStore,SignInClientState signInClientState,IMessengerStore messengerStore)
{
this.relayClientStore = relayClientStore;
Transports = new List {
- new RelayClientTransportSelfHost(messengerSender,serializer,relayClientStore,signInClientState),
+ new RelayClientTransportSelfHost(messengerSender,serializer,relayClientStore,signInClientState,messengerStore),
};
LoggerHelper.Instance.Info($"load relay transport:{string.Join(",", Transports.Select(c => c.GetType().Name))}");
}
diff --git a/linker.messenger.relay/client/transport/RelayClientTransportSelfHost.cs b/linker.messenger.relay/client/transport/RelayClientTransportSelfHost.cs
index ac5e46a6..99101eef 100644
--- a/linker.messenger.relay/client/transport/RelayClientTransportSelfHost.cs
+++ b/linker.messenger.relay/client/transport/RelayClientTransportSelfHost.cs
@@ -27,12 +27,14 @@ namespace linker.messenger.relay.client.transport
private readonly ISerializer serializer;
private readonly IRelayClientStore relayClientStore;
private readonly SignInClientState signInClientState;
- public RelayClientTransportSelfHost(IMessengerSender messengerSender, ISerializer serializer, IRelayClientStore relayClientStore, SignInClientState signInClientState)
+ private readonly IMessengerStore messengerStore;
+ public RelayClientTransportSelfHost(IMessengerSender messengerSender, ISerializer serializer, IRelayClientStore relayClientStore, SignInClientState signInClientState, IMessengerStore messengerStore)
{
this.messengerSender = messengerSender;
this.serializer = serializer;
this.relayClientStore = relayClientStore;
this.signInClientState = signInClientState;
+ this.messengerStore = messengerStore;
}
public async Task RelayAsync(RelayInfo relayInfo)
@@ -272,7 +274,7 @@ namespace linker.messenger.relay.client.transport
if (relayInfo.SSL)
{
sslStream = new SslStream(new NetworkStream(socket, false), false);
- await sslStream.AuthenticateAsServerAsync(Entry.certificate, false, SslProtocols.Tls | SslProtocols.Tls11 | SslProtocols.Tls12 | SslProtocols.Tls13, false).ConfigureAwait(false);
+ await sslStream.AuthenticateAsServerAsync(messengerStore.Certificate, false, SslProtocols.Tls | SslProtocols.Tls11 | SslProtocols.Tls12 | SslProtocols.Tls13, false).ConfigureAwait(false);
}
return new TunnelConnectionTcp
{
diff --git a/linker.messenger.relay/server/IRelayServerNodeStore.cs b/linker.messenger.relay/server/IRelayServerNodeStore.cs
index 6a01f299..b6ce2bf0 100644
--- a/linker.messenger.relay/server/IRelayServerNodeStore.cs
+++ b/linker.messenger.relay/server/IRelayServerNodeStore.cs
@@ -48,12 +48,12 @@ namespace linker.messenger.relay.server
}
}
- private string name = Dns.GetHostName().SubStr(0, 12);
+ private string name = Dns.GetHostName().SubStr(0, 32);
public string Name
{
get => name; set
{
- name = value.SubStr(0, 12);
+ name = value.SubStr(0, 32);
}
}
public string Host { get; set; } = string.Empty;
diff --git a/linker.messenger.serializer.memorypack/AccessSerializer.cs b/linker.messenger.serializer.memorypack/AccessSerializer.cs
index 3315872f..02bbc519 100644
--- a/linker.messenger.serializer.memorypack/AccessSerializer.cs
+++ b/linker.messenger.serializer.memorypack/AccessSerializer.cs
@@ -1,5 +1,6 @@
using MemoryPack;
using linker.messenger.access;
+using linker.messenger.api;
namespace linker.messenger.serializer.memorypack
{
diff --git a/linker.messenger.serializer.memorypack/Entry.cs b/linker.messenger.serializer.memorypack/Entry.cs
index a1fd44dc..471b14b5 100644
--- a/linker.messenger.serializer.memorypack/Entry.cs
+++ b/linker.messenger.serializer.memorypack/Entry.cs
@@ -59,6 +59,39 @@ namespace linker.messenger.serializer.memorypack
MemoryPackFormatterProvider.Register(new Socks5LanInfoFormatter());
MemoryPackFormatterProvider.Register(new Socks5InfoFormatter());
+
+ MemoryPackFormatterProvider.Register(new SForwardInfoFormatter());
+ MemoryPackFormatterProvider.Register(new SForwardAddInfoFormatter());
+ MemoryPackFormatterProvider.Register(new SForwardAddResultInfoFormatter());
+ MemoryPackFormatterProvider.Register(new SForwardAddForwardInfoFormatter());
+ MemoryPackFormatterProvider.Register(new SForwardRemoveForwardInfoFormatter());
+ MemoryPackFormatterProvider.Register(new SForwardProxyInfoFormatter());
+ MemoryPackFormatterProvider.Register(new SForwardCountInfoFormatter());
+
+
+ MemoryPackFormatterProvider.Register(new ForwardInfoFormatter());
+ MemoryPackFormatterProvider.Register(new ForwardAddForwardInfoFormatter());
+ MemoryPackFormatterProvider.Register(new ForwardRemoveForwardInfoFormatter());
+ MemoryPackFormatterProvider.Register(new ForwardCountInfoFormatter());
+
+ MemoryPackFormatterProvider.Register(new FlowItemInfoFormatter());
+ MemoryPackFormatterProvider.Register(new FlowInfoFormatter());
+ MemoryPackFormatterProvider.Register(new RelayFlowItemInfoFormatter());
+ MemoryPackFormatterProvider.Register(new RelayFlowRequestInfoFormatter());
+ MemoryPackFormatterProvider.Register(new RelayFlowResponseInfoFormatter());
+ MemoryPackFormatterProvider.Register(new SForwardFlowItemInfoFormatter());
+ MemoryPackFormatterProvider.Register(new SForwardFlowRequestInfoFormatter());
+ MemoryPackFormatterProvider.Register(new SForwardFlowResponseInfoFormatter());
+
+ MemoryPackFormatterProvider.Register(new TuntapVeaLanIPAddressFormatter());
+ MemoryPackFormatterProvider.Register(new TuntapVeaLanIPAddressListFormatter());
+ MemoryPackFormatterProvider.Register(new TuntapInfoFormatter());
+ MemoryPackFormatterProvider.Register(new TuntapForwardInfoFormatter());
+ MemoryPackFormatterProvider.Register(new TuntapForwardTestWrapInfoFormatter());
+ MemoryPackFormatterProvider.Register(new TuntapForwardTestInfoFormatter());
+ MemoryPackFormatterProvider.Register(new TuntapLanInfoFormatter());
+ MemoryPackFormatterProvider.Register(new LeaseInfoFormatter());
+
return serviceCollection;
}
public static ServiceProvider UseSerializerMemoryPack(this ServiceProvider serviceProvider)
diff --git a/linker.messenger.serializer.memorypack/FlowSerializer.cs b/linker.messenger.serializer.memorypack/FlowSerializer.cs
new file mode 100644
index 00000000..8717ea58
--- /dev/null
+++ b/linker.messenger.serializer.memorypack/FlowSerializer.cs
@@ -0,0 +1,533 @@
+using MemoryPack;
+using linker.messenger.flow;
+
+namespace linker.messenger.serializer.memorypack
+{
+ [MemoryPackable]
+ public readonly partial struct SerializableFlowItemInfo
+ {
+ [MemoryPackIgnore]
+ public readonly FlowItemInfo info;
+
+ [MemoryPackInclude]
+ ulong ReceiveBytes => info.ReceiveBytes;
+
+ [MemoryPackInclude]
+ ulong SendtBytes => info.SendtBytes;
+
+ [MemoryPackConstructor]
+ SerializableFlowItemInfo(ulong receiveBytes, ulong sendtBytes)
+ {
+ var info = new FlowItemInfo { ReceiveBytes = receiveBytes, SendtBytes = sendtBytes };
+ this.info = info;
+ }
+
+ public SerializableFlowItemInfo(FlowItemInfo info)
+ {
+ this.info = info;
+ }
+ }
+ public class FlowItemInfoFormatter : MemoryPackFormatter
+ {
+ public override void Serialize(ref MemoryPackWriter writer, scoped ref FlowItemInfo value)
+ {
+ if (value == null)
+ {
+ writer.WriteNullObjectHeader();
+ return;
+ }
+
+ writer.WritePackable(new SerializableFlowItemInfo(value));
+ }
+
+ public override void Deserialize(ref MemoryPackReader reader, scoped ref FlowItemInfo value)
+ {
+ if (reader.PeekIsNull())
+ {
+ reader.Advance(1); // skip null block
+ value = null;
+ return;
+ }
+
+ var wrapped = reader.ReadPackable();
+ value = wrapped.info;
+ }
+ }
+
+
+
+ [MemoryPackable]
+ public readonly partial struct SerializableFlowInfo
+ {
+ [MemoryPackIgnore]
+ public readonly FlowInfo info;
+
+ [MemoryPackInclude]
+ Dictionary Items => info.Items;
+
+ [MemoryPackInclude]
+ DateTime Start => info.Start;
+
+ [MemoryPackInclude]
+ DateTime Now => info.Now;
+
+ [MemoryPackConstructor]
+ SerializableFlowInfo(Dictionary items, DateTime start, DateTime now)
+ {
+ var info = new FlowInfo { Items = items, Now = now, Start = start };
+ this.info = info;
+ }
+
+ public SerializableFlowInfo(FlowInfo info)
+ {
+ this.info = info;
+ }
+ }
+ public class FlowInfoFormatter : MemoryPackFormatter
+ {
+ public override void Serialize(ref MemoryPackWriter writer, scoped ref FlowInfo value)
+ {
+ if (value == null)
+ {
+ writer.WriteNullObjectHeader();
+ return;
+ }
+
+ writer.WritePackable(new SerializableFlowInfo(value));
+ }
+
+ public override void Deserialize(ref MemoryPackReader reader, scoped ref FlowInfo value)
+ {
+ if (reader.PeekIsNull())
+ {
+ reader.Advance(1); // skip null block
+ value = null;
+ return;
+ }
+
+ var wrapped = reader.ReadPackable();
+ value = wrapped.info;
+ }
+ }
+
+
+
+ [MemoryPackable]
+ public readonly partial struct SerializableRelayFlowItemInfo
+ {
+ [MemoryPackIgnore]
+ public readonly RelayFlowItemInfo info;
+
+ [MemoryPackInclude]
+ ulong ReceiveBytes => info.ReceiveBytes;
+
+ [MemoryPackInclude]
+ ulong SendtBytes => info.SendtBytes;
+
+ [MemoryPackInclude]
+ ulong DiffReceiveBytes => info.DiffReceiveBytes;
+
+ [MemoryPackInclude]
+ ulong DiffSendtBytes => info.DiffSendtBytes;
+
+ [MemoryPackInclude]
+ string FromName => info.FromName;
+
+ [MemoryPackInclude]
+ string ToName => info.ToName;
+
+ [MemoryPackConstructor]
+ SerializableRelayFlowItemInfo(ulong receiveBytes, ulong sendtBytes, ulong diffReceiveBytes, ulong diffSendtBytes, string fromName, string toName)
+ {
+ var info = new RelayFlowItemInfo
+ {
+ ReceiveBytes = receiveBytes,
+ SendtBytes = sendtBytes,
+ DiffReceiveBytes = diffReceiveBytes,
+ DiffSendtBytes = diffSendtBytes,
+ FromName = fromName,
+ ToName = toName
+ };
+ this.info = info;
+ }
+
+ public SerializableRelayFlowItemInfo(RelayFlowItemInfo info)
+ {
+ this.info = info;
+ }
+ }
+ public class RelayFlowItemInfoFormatter : MemoryPackFormatter
+ {
+ public override void Serialize(ref MemoryPackWriter writer, scoped ref RelayFlowItemInfo value)
+ {
+ if (value == null)
+ {
+ writer.WriteNullObjectHeader();
+ return;
+ }
+
+ writer.WritePackable(new SerializableRelayFlowItemInfo(value));
+ }
+
+ public override void Deserialize(ref MemoryPackReader reader, scoped ref RelayFlowItemInfo value)
+ {
+ if (reader.PeekIsNull())
+ {
+ reader.Advance(1); // skip null block
+ value = null;
+ return;
+ }
+
+ var wrapped = reader.ReadPackable();
+ value = wrapped.info;
+ }
+ }
+
+
+
+ [MemoryPackable]
+ public readonly partial struct SerializableRelayFlowRequestInfo
+ {
+ [MemoryPackIgnore]
+ public readonly RelayFlowRequestInfo info;
+
+ [MemoryPackInclude]
+ string Key => info.Key;
+
+ [MemoryPackInclude]
+ string SecretKey => info.SecretKey;
+
+ [MemoryPackInclude]
+ int Page => info.Page;
+
+ [MemoryPackInclude]
+ int PageSize => info.PageSize;
+
+ [MemoryPackInclude]
+ RelayFlowOrder Order => info.Order;
+
+ [MemoryPackInclude]
+ RelayFlowOrderType OrderType => info.OrderType;
+
+ [MemoryPackConstructor]
+ SerializableRelayFlowRequestInfo(string key, string secretKey, int page, int pageSize, RelayFlowOrder order, RelayFlowOrderType orderType)
+ {
+ var info = new RelayFlowRequestInfo
+ {
+ Key = key,
+ Order = order,
+ OrderType = orderType,
+ Page = page,
+ PageSize = pageSize,
+ SecretKey = secretKey
+ };
+ this.info = info;
+ }
+
+ public SerializableRelayFlowRequestInfo(RelayFlowRequestInfo info)
+ {
+ this.info = info;
+ }
+ }
+ public class RelayFlowRequestInfoFormatter : MemoryPackFormatter
+ {
+ public override void Serialize(ref MemoryPackWriter writer, scoped ref RelayFlowRequestInfo value)
+ {
+ if (value == null)
+ {
+ writer.WriteNullObjectHeader();
+ return;
+ }
+
+ writer.WritePackable(new SerializableRelayFlowRequestInfo(value));
+ }
+
+ public override void Deserialize(ref MemoryPackReader reader, scoped ref RelayFlowRequestInfo value)
+ {
+ if (reader.PeekIsNull())
+ {
+ reader.Advance(1); // skip null block
+ value = null;
+ return;
+ }
+
+ var wrapped = reader.ReadPackable();
+ value = wrapped.info;
+ }
+ }
+
+
+
+ [MemoryPackable]
+ public readonly partial struct SerializableRelayFlowResponseInfo
+ {
+ [MemoryPackIgnore]
+ public readonly RelayFlowResponseInfo info;
+
+ [MemoryPackInclude]
+ int Page => info.Page;
+
+ [MemoryPackInclude]
+ int PageSize => info.PageSize;
+
+ [MemoryPackInclude]
+ int Count => info.Count;
+
+ [MemoryPackInclude]
+ List Data => info.Data;
+
+ [MemoryPackConstructor]
+ SerializableRelayFlowResponseInfo(int page, int pageSize, int count, List data)
+ {
+ var info = new RelayFlowResponseInfo
+ {
+ Page = page,
+ PageSize = pageSize,
+ Count = count,
+ Data = data
+ };
+ this.info = info;
+ }
+
+ public SerializableRelayFlowResponseInfo(RelayFlowResponseInfo info)
+ {
+ this.info = info;
+ }
+ }
+ public class RelayFlowResponseInfoFormatter : MemoryPackFormatter
+ {
+ public override void Serialize(ref MemoryPackWriter writer, scoped ref RelayFlowResponseInfo value)
+ {
+ if (value == null)
+ {
+ writer.WriteNullObjectHeader();
+ return;
+ }
+
+ writer.WritePackable(new SerializableRelayFlowResponseInfo(value));
+ }
+
+ public override void Deserialize(ref MemoryPackReader reader, scoped ref RelayFlowResponseInfo value)
+ {
+ if (reader.PeekIsNull())
+ {
+ reader.Advance(1); // skip null block
+ value = null;
+ return;
+ }
+
+ var wrapped = reader.ReadPackable();
+ value = wrapped.info;
+ }
+ }
+
+
+
+
+ [MemoryPackable]
+ public readonly partial struct SerializableSForwardFlowItemInfo
+ {
+ [MemoryPackIgnore]
+ public readonly SForwardFlowItemInfo info;
+
+ [MemoryPackInclude]
+ ulong ReceiveBytes => info.ReceiveBytes;
+
+ [MemoryPackInclude]
+ ulong SendtBytes => info.SendtBytes;
+
+ [MemoryPackInclude]
+ ulong DiffReceiveBytes => info.DiffReceiveBytes;
+
+ [MemoryPackInclude]
+ ulong DiffSendtBytes => info.DiffSendtBytes;
+
+ [MemoryPackInclude]
+ string Key => info.Key;
+
+ [MemoryPackConstructor]
+ SerializableSForwardFlowItemInfo(ulong receiveBytes, ulong sendtBytes, ulong diffReceiveBytes, ulong diffSendtBytes, string key)
+ {
+ var info = new SForwardFlowItemInfo
+ {
+ ReceiveBytes = receiveBytes,
+ SendtBytes = sendtBytes,
+
+ DiffReceiveBytes = diffReceiveBytes,
+ DiffSendtBytes = diffSendtBytes,
+ Key = key
+ };
+ this.info = info;
+ }
+
+ public SerializableSForwardFlowItemInfo(SForwardFlowItemInfo info)
+ {
+ this.info = info;
+ }
+ }
+ public class SForwardFlowItemInfoFormatter : MemoryPackFormatter
+ {
+ public override void Serialize(ref MemoryPackWriter writer, scoped ref SForwardFlowItemInfo value)
+ {
+ if (value == null)
+ {
+ writer.WriteNullObjectHeader();
+ return;
+ }
+
+ writer.WritePackable(new SerializableSForwardFlowItemInfo(value));
+ }
+
+ public override void Deserialize(ref MemoryPackReader reader, scoped ref SForwardFlowItemInfo value)
+ {
+ if (reader.PeekIsNull())
+ {
+ reader.Advance(1); // skip null block
+ value = null;
+ return;
+ }
+
+ var wrapped = reader.ReadPackable();
+ value = wrapped.info;
+ }
+ }
+
+
+
+
+ [MemoryPackable]
+ public readonly partial struct SerializableSForwardFlowRequestInfo
+ {
+ [MemoryPackIgnore]
+ public readonly SForwardFlowRequestInfo info;
+
+ [MemoryPackInclude]
+ string Key => info.Key;
+
+ [MemoryPackInclude]
+ string SecretKey => info.SecretKey;
+
+ [MemoryPackInclude]
+ int Page => info.Page;
+
+ [MemoryPackInclude]
+ int PageSize => info.PageSize;
+
+ [MemoryPackInclude]
+ SForwardFlowOrder Order => info.Order;
+
+ [MemoryPackInclude]
+ SForwardFlowOrderType OrderType => info.OrderType;
+
+ [MemoryPackConstructor]
+ SerializableSForwardFlowRequestInfo(string key, string secretKey, int page, int pageSize, SForwardFlowOrder order, SForwardFlowOrderType orderType)
+ {
+ var info = new SForwardFlowRequestInfo
+ {
+ Key = key,
+ Order = order,
+ OrderType = orderType,
+ Page = page,
+ PageSize = pageSize,
+ SecretKey = secretKey
+ };
+ this.info = info;
+ }
+
+ public SerializableSForwardFlowRequestInfo(SForwardFlowRequestInfo info)
+ {
+ this.info = info;
+ }
+ }
+ public class SForwardFlowRequestInfoFormatter : MemoryPackFormatter
+ {
+ public override void Serialize(ref MemoryPackWriter writer, scoped ref SForwardFlowRequestInfo value)
+ {
+ if (value == null)
+ {
+ writer.WriteNullObjectHeader();
+ return;
+ }
+
+ writer.WritePackable(new SerializableSForwardFlowRequestInfo(value));
+ }
+
+ public override void Deserialize(ref MemoryPackReader reader, scoped ref SForwardFlowRequestInfo value)
+ {
+ if (reader.PeekIsNull())
+ {
+ reader.Advance(1); // skip null block
+ value = null;
+ return;
+ }
+
+ var wrapped = reader.ReadPackable();
+ value = wrapped.info;
+ }
+ }
+
+
+
+ [MemoryPackable]
+ public readonly partial struct SerializableSForwardFlowResponseInfo
+ {
+ [MemoryPackIgnore]
+ public readonly SForwardFlowResponseInfo info;
+
+ [MemoryPackInclude]
+ int Page => info.Page;
+
+ [MemoryPackInclude]
+ int PageSize => info.PageSize;
+
+ [MemoryPackInclude]
+ int Count => info.Count;
+
+ [MemoryPackInclude]
+ List Data => info.Data;
+
+ [MemoryPackConstructor]
+ SerializableSForwardFlowResponseInfo(int page, int pageSize, int count, List data)
+ {
+ var info = new SForwardFlowResponseInfo
+ {
+ Page = page,
+ PageSize = pageSize,
+ Count = count,
+ Data = data
+ };
+ this.info = info;
+ }
+
+ public SerializableSForwardFlowResponseInfo(SForwardFlowResponseInfo info)
+ {
+ this.info = info;
+ }
+ }
+ public class SForwardFlowResponseInfoFormatter : MemoryPackFormatter
+ {
+ public override void Serialize(ref MemoryPackWriter writer, scoped ref SForwardFlowResponseInfo value)
+ {
+ if (value == null)
+ {
+ writer.WriteNullObjectHeader();
+ return;
+ }
+
+ writer.WritePackable(new SerializableSForwardFlowResponseInfo(value));
+ }
+
+ public override void Deserialize(ref MemoryPackReader reader, scoped ref SForwardFlowResponseInfo value)
+ {
+ if (reader.PeekIsNull())
+ {
+ reader.Advance(1); // skip null block
+ value = null;
+ return;
+ }
+
+ var wrapped = reader.ReadPackable();
+ value = wrapped.info;
+ }
+ }
+}
diff --git a/linker.messenger.serializer.memorypack/ForwardSerializer.cs b/linker.messenger.serializer.memorypack/ForwardSerializer.cs
new file mode 100644
index 00000000..1b9604fe
--- /dev/null
+++ b/linker.messenger.serializer.memorypack/ForwardSerializer.cs
@@ -0,0 +1,269 @@
+using MemoryPack;
+using System.Net;
+using linker.messenger.forward;
+
+namespace linker.messenger.serializer.memorypack
+{
+ [MemoryPackable]
+ public readonly partial struct SerializableForwardInfo
+ {
+ [MemoryPackIgnore]
+ public readonly ForwardInfo info;
+
+ [MemoryPackInclude]
+ uint Id => info.Id;
+
+ [MemoryPackInclude]
+ string Name => info.Name;
+
+ [MemoryPackInclude]
+ string MachineId => info.MachineId;
+
+ [MemoryPackInclude]
+ string GroupId => info.GroupId;
+
+ [MemoryPackInclude]
+ string MachineName => info.MachineName;
+
+ [MemoryPackInclude, MemoryPackAllowSerialize]
+ IPAddress BindIPAddress => info.BindIPAddress;
+
+ [MemoryPackInclude]
+ int Port => info.Port;
+
+ [MemoryPackInclude, MemoryPackAllowSerialize]
+ IPEndPoint TargetEP => info.TargetEP;
+
+ [MemoryPackInclude]
+ bool Started => info.Started;
+
+ [MemoryPackInclude]
+ byte BufferSize => info.BufferSize;
+
+ [MemoryPackInclude]
+ string Msg => info.Msg;
+
+ [MemoryPackInclude]
+ string TargetMsg => info.TargetMsg;
+
+ [MemoryPackConstructor]
+ SerializableForwardInfo(uint id, string name, string machineId, string groupId, string machineName, IPAddress bindIPAddress, int port, IPEndPoint targetEP, bool started, byte bufferSize, string msg, string targetMsg)
+ {
+ this.info = new ForwardInfo
+ {
+ Name = name,
+ BufferSize = bufferSize,
+ Id = id,
+ Started = started,
+ BindIPAddress = bindIPAddress,
+ GroupId = groupId,
+ MachineId = machineId,
+ MachineName = machineName,
+ Msg = msg,
+ Port = port,
+ TargetEP = targetEP,
+ TargetMsg = targetMsg
+
+ };
+ }
+
+ public SerializableForwardInfo(ForwardInfo info)
+ {
+ this.info = info;
+ }
+ }
+ public class ForwardInfoFormatter : MemoryPackFormatter
+ {
+ public override void Serialize(ref MemoryPackWriter writer, scoped ref ForwardInfo value)
+ {
+ if (value == null)
+ {
+ writer.WriteNullObjectHeader();
+ return;
+ }
+
+ writer.WritePackable(new SerializableForwardInfo(value));
+ }
+
+ public override void Deserialize(ref MemoryPackReader reader, scoped ref ForwardInfo value)
+ {
+ if (reader.PeekIsNull())
+ {
+ reader.Advance(1); // skip null block
+ value = null;
+ return;
+ }
+
+ var wrapped = reader.ReadPackable();
+ value = wrapped.info;
+ }
+ }
+
+
+
+ [MemoryPackable]
+ public readonly partial struct SerializableForwardAddForwardInfo
+ {
+ [MemoryPackIgnore]
+ public readonly ForwardAddForwardInfo info;
+
+ [MemoryPackInclude]
+ string MachineId => info.MachineId;
+
+ [MemoryPackInclude, MemoryPackAllowSerialize]
+ ForwardInfo Data => info.Data;
+
+ [MemoryPackConstructor]
+ SerializableForwardAddForwardInfo(string machineId, ForwardInfo data)
+ {
+ this.info = new ForwardAddForwardInfo
+ {
+ MachineId = machineId,
+ Data = data
+ };
+ }
+
+ public SerializableForwardAddForwardInfo(ForwardAddForwardInfo info)
+ {
+ this.info = info;
+ }
+ }
+ public class ForwardAddForwardInfoFormatter : MemoryPackFormatter
+ {
+ public override void Serialize(ref MemoryPackWriter writer, scoped ref ForwardAddForwardInfo value)
+ {
+ if (value == null)
+ {
+ writer.WriteNullObjectHeader();
+ return;
+ }
+
+ writer.WritePackable(new SerializableForwardAddForwardInfo(value));
+ }
+
+ public override void Deserialize(ref MemoryPackReader reader, scoped ref ForwardAddForwardInfo value)
+ {
+ if (reader.PeekIsNull())
+ {
+ reader.Advance(1); // skip null block
+ value = null;
+ return;
+ }
+
+ var wrapped = reader.ReadPackable();
+ value = wrapped.info;
+ }
+ }
+
+
+
+ [MemoryPackable]
+ public readonly partial struct SerializableForwardRemoveForwardInfo
+ {
+ [MemoryPackIgnore]
+ public readonly ForwardRemoveForwardInfo info;
+
+ [MemoryPackInclude]
+ string MachineId => info.MachineId;
+
+ [MemoryPackInclude, MemoryPackAllowSerialize]
+ uint Id => info.Id;
+
+ [MemoryPackConstructor]
+ SerializableForwardRemoveForwardInfo(string machineId, uint id)
+ {
+ this.info = new ForwardRemoveForwardInfo
+ {
+ MachineId = machineId,
+ Id = id
+ };
+ }
+
+ public SerializableForwardRemoveForwardInfo(ForwardRemoveForwardInfo info)
+ {
+ this.info = info;
+ }
+ }
+ public class ForwardRemoveForwardInfoFormatter : MemoryPackFormatter
+ {
+ public override void Serialize(ref MemoryPackWriter writer, scoped ref ForwardRemoveForwardInfo value)
+ {
+ if (value == null)
+ {
+ writer.WriteNullObjectHeader();
+ return;
+ }
+
+ writer.WritePackable(new SerializableForwardRemoveForwardInfo(value));
+ }
+
+ public override void Deserialize(ref MemoryPackReader reader, scoped ref ForwardRemoveForwardInfo value)
+ {
+ if (reader.PeekIsNull())
+ {
+ reader.Advance(1); // skip null block
+ value = null;
+ return;
+ }
+
+ var wrapped = reader.ReadPackable();
+ value = wrapped.info;
+ }
+ }
+
+
+
+ [MemoryPackable]
+ public readonly partial struct SerializableForwardCountInfo
+ {
+ [MemoryPackIgnore]
+ public readonly ForwardCountInfo info;
+
+ [MemoryPackInclude]
+ string MachineId => info.MachineId;
+
+ [MemoryPackInclude]
+ int Count => info.Count;
+
+ [MemoryPackConstructor]
+ SerializableForwardCountInfo(string machineId, int count)
+ {
+ this.info = new ForwardCountInfo
+ {
+ MachineId = machineId,
+ Count = count
+ };
+ }
+
+ public SerializableForwardCountInfo(ForwardCountInfo info)
+ {
+ this.info = info;
+ }
+ }
+ public class ForwardCountInfoFormatter : MemoryPackFormatter