chore: formatting
This commit is contained in:
parent
2955b62012
commit
2b31505a9b
4 changed files with 124 additions and 103 deletions
|
@ -1,11 +1,11 @@
|
||||||
name: Release Rai.PacketMediator
|
name: Release Rai.PacketMediator
|
||||||
run-name: ${{ gitea.actor }} is building the Server application
|
run-name: ${{ gitea.actor }} is building the Server application
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
tags:
|
tags:
|
||||||
- 'v*.*.*'
|
- v*.*.*
|
||||||
paths-ignore:
|
paths-ignore:
|
||||||
- .run/**
|
- .run/**
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
preprocess:
|
preprocess:
|
||||||
|
@ -13,75 +13,75 @@ jobs:
|
||||||
outputs:
|
outputs:
|
||||||
sanitized_branch_name: ${{ steps.sanitize.outputs.sanitized_branch_name }}
|
sanitized_branch_name: ${{ steps.sanitize.outputs.sanitized_branch_name }}
|
||||||
steps:
|
steps:
|
||||||
- name: Sanitize branch name
|
- name: Sanitize branch name
|
||||||
id: sanitize
|
id: sanitize
|
||||||
run: echo "::set-output name=sanitized_branch_name::$(echo ${{ github.ref_name }} | sed 's/\//-/g')"
|
run: echo "::set-output name=sanitized_branch_name::$(echo ${{ github.ref_name }} | sed 's/\//-/g')"
|
||||||
|
|
||||||
build:
|
build:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
- name: Setup dotnet
|
- name: Setup dotnet
|
||||||
uses: https://github.com/actions/setup-dotnet@v3
|
uses: https://github.com/actions/setup-dotnet@v3
|
||||||
with:
|
with:
|
||||||
global-json-file: global.json
|
global-json-file: global.json
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: dotnet restore
|
run: dotnet restore
|
||||||
- name: Build
|
- name: Build
|
||||||
run: |
|
run: |
|
||||||
cd RaiNote.PacketMediator
|
cd RaiNote.PacketMediator
|
||||||
dotnet build RaiNote.PacketMediator.csproj -c Release
|
dotnet build RaiNote.PacketMediator.csproj -c Release
|
||||||
|
|
||||||
publish:
|
publish:
|
||||||
needs: [ build ]
|
needs: [build]
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
- name: Setup dotnet
|
- name: Setup dotnet
|
||||||
uses: https://github.com/actions/setup-dotnet@v3
|
uses: https://github.com/actions/setup-dotnet@v3
|
||||||
with:
|
with:
|
||||||
global-json-file: global.json
|
global-json-file: global.json
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: dotnet restore
|
run: dotnet restore
|
||||||
- name: Extract Version
|
- name: Extract Version
|
||||||
run: |
|
run: |
|
||||||
VERSION=${GITHUB_REF#refs/tags/v}
|
VERSION=${GITHUB_REF#refs/tags/v}
|
||||||
echo "Extracted version is $VERSION"
|
echo "Extracted version is $VERSION"
|
||||||
echo "VERSION=$VERSION" >> $GITHUB_ENV
|
echo "VERSION=$VERSION" >> $GITHUB_ENV
|
||||||
shell: bash
|
shell: bash
|
||||||
- name: Pack nuget package
|
- name: Pack nuget package
|
||||||
run: |
|
run: |
|
||||||
cd RaiNote.PacketMediator
|
cd RaiNote.PacketMediator
|
||||||
dotnet build RaiNote.PacketMediator.csproj -c Release -p:PackageVersion=${{env.VERSION}}
|
dotnet build RaiNote.PacketMediator.csproj -c Release -p:PackageVersion=${{env.VERSION}}
|
||||||
dotnet pack -c Release -p:PackageVersion=${{env.VERSION}} --output .
|
dotnet pack -c Release -p:PackageVersion=${{env.VERSION}} --output .
|
||||||
- name: Push to NuGet
|
- name: Push to NuGet
|
||||||
run: |
|
run: |
|
||||||
cd RaiNote.PacketMediator
|
cd RaiNote.PacketMediator
|
||||||
dotnet nuget push "*.nupkg" --api-key ${{secrets.nuget_api_key}} --source https://forge.rainote.dev/api/packages/rainote/nuget/index.json
|
dotnet nuget push "*.nupkg" --api-key ${{secrets.nuget_api_key}} --source https://forge.rainote.dev/api/packages/rainote/nuget/index.json
|
||||||
|
|
||||||
generate-licences:
|
generate-licences:
|
||||||
needs: [ build, preprocess ]
|
needs: [build, preprocess]
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
container: catthehacker/ubuntu:act-latest@sha256:efe7d859ca6f98a21b3b0471ab48455af597a064d719f65332d0f105aadcad65
|
container: catthehacker/ubuntu:act-latest@sha256:efe7d859ca6f98a21b3b0471ab48455af597a064d719f65332d0f105aadcad65
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
- name: Setup dotnet
|
- name: Setup dotnet
|
||||||
uses: https://github.com/actions/setup-dotnet@v3
|
uses: https://github.com/actions/setup-dotnet@v3
|
||||||
with:
|
with:
|
||||||
dotnet-version: |
|
dotnet-version: |
|
||||||
7.0
|
7.0
|
||||||
8.0
|
8.0
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: |
|
run: |
|
||||||
dotnet restore
|
dotnet restore
|
||||||
echo "::add-path::$HOME/.dotnet/tools"
|
echo "::add-path::$HOME/.dotnet/tools"
|
||||||
- name: Install nuget-license
|
- name: Install nuget-license
|
||||||
run: dotnet tool install --global dotnet-project-licenses
|
run: dotnet tool install --global dotnet-project-licenses
|
||||||
- name: Export licenses
|
- name: Export licenses
|
||||||
run: dotnet-project-licenses -i . -u --projects-filter projects_ignore_licenses.json -m -j -e -f licenses
|
run: dotnet-project-licenses -i . -u --projects-filter projects_ignore_licenses.json -m -j -e -f licenses
|
||||||
- name: Upload licenses
|
- name: Upload licenses
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v3
|
||||||
with:
|
with:
|
||||||
name: licenses
|
name: licenses
|
||||||
path: licenses
|
path: licenses
|
||||||
retention-days: 31
|
retention-days: 31
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
// Licensed to Timothy Schenk under the Apache 2.0 License.
|
// Licensed to Timothy Schenk under the Apache 2.0 License.
|
||||||
|
|
||||||
Console.WriteLine("Hello World!");
|
Console.WriteLine("Hello World!");
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// Licensed to Timothy Schenk under the Apache 2.0 License.
|
// Licensed to Timothy Schenk under the Apache 2.0 License.
|
||||||
|
|
||||||
namespace PacketMediator.Samples;
|
namespace PacketMediator.Samples;
|
||||||
|
|
||||||
|
|
|
@ -23,12 +23,14 @@ public class PacketDistributor<TPacketIdEnum, TSession> where TPacketIdEnum : En
|
||||||
public PacketDistributor(IServiceProvider serviceProvider,
|
public PacketDistributor(IServiceProvider serviceProvider,
|
||||||
IEnumerable<Assembly> sourcesContainingPackets, IEnumerable<Assembly> sourcesContainingPacketHandlers)
|
IEnumerable<Assembly> sourcesContainingPackets, IEnumerable<Assembly> sourcesContainingPacketHandlers)
|
||||||
{
|
{
|
||||||
_channel = Channel.CreateUnbounded<ValueTuple<byte[], TPacketIdEnum, TSession>>(new UnboundedChannelOptions
|
_channel = Channel.CreateUnbounded<ValueTuple<byte[], TPacketIdEnum, TSession>>(
|
||||||
{
|
new UnboundedChannelOptions
|
||||||
AllowSynchronousContinuations = false,
|
{
|
||||||
SingleReader = false,
|
AllowSynchronousContinuations = false,
|
||||||
SingleWriter = false
|
SingleReader = false,
|
||||||
});
|
SingleWriter = false
|
||||||
|
}
|
||||||
|
);
|
||||||
var containingPackets = sourcesContainingPackets as Assembly[] ?? sourcesContainingPackets.ToArray();
|
var containingPackets = sourcesContainingPackets as Assembly[] ?? sourcesContainingPackets.ToArray();
|
||||||
var allIncomingPackets = GetAllPackets(containingPackets, typeof(IIncomingPacket));
|
var allIncomingPackets = GetAllPackets(containingPackets, typeof(IIncomingPacket));
|
||||||
var allOutgoingPackets = GetAllPackets(containingPackets, typeof(IOutgoingPacket));
|
var allOutgoingPackets = GetAllPackets(containingPackets, typeof(IOutgoingPacket));
|
||||||
|
@ -42,27 +44,32 @@ public class PacketDistributor<TPacketIdEnum, TSession> where TPacketIdEnum : En
|
||||||
new ConcurrentDictionary<TPacketIdEnum, Func<byte[], IIncomingPacket>>();
|
new ConcurrentDictionary<TPacketIdEnum, Func<byte[], IIncomingPacket>>();
|
||||||
_packetHandlersInstantiation = new ConcurrentDictionary<TPacketIdEnum, IPacketHandler<TSession>?>();
|
_packetHandlersInstantiation = new ConcurrentDictionary<TPacketIdEnum, IPacketHandler<TSession>?>();
|
||||||
packetHandlers.ForEach(packetHandlerPair =>
|
packetHandlers.ForEach(packetHandlerPair =>
|
||||||
{
|
|
||||||
var packetHandler =
|
|
||||||
ActivatorUtilities.GetServiceOrCreateInstance(serviceProvider,
|
|
||||||
packetHandlerPair.Value);
|
|
||||||
_packetHandlersInstantiation.TryAdd(packetHandlerPair.Key, packetHandler as IPacketHandler<TSession>);
|
|
||||||
});
|
|
||||||
allIncomingPackets.ForEach(packetsType =>
|
|
||||||
{
|
|
||||||
var lambda = CodeGenerator.Lambda<Func<byte[], IIncomingPacket>>(fun =>
|
|
||||||
{
|
{
|
||||||
var argPacketData = fun[0];
|
var packetHandler =
|
||||||
var newPacket = packetsType.Value.New();
|
ActivatorUtilities.GetServiceOrCreateInstance(serviceProvider,
|
||||||
|
packetHandlerPair.Value
|
||||||
|
);
|
||||||
|
_packetHandlersInstantiation.TryAdd(packetHandlerPair.Key, packetHandler as IPacketHandler<TSession>);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
allIncomingPackets.ForEach(packetsType =>
|
||||||
|
{
|
||||||
|
var lambda = CodeGenerator.Lambda<Func<byte[], IIncomingPacket>>(fun =>
|
||||||
|
{
|
||||||
|
var argPacketData = fun[0];
|
||||||
|
var newPacket = packetsType.Value.New();
|
||||||
|
|
||||||
var packetVariable = CodeGenerator.DeclareVariable(packetsType.Value, "packet");
|
var packetVariable = CodeGenerator.DeclareVariable(packetsType.Value, "packet");
|
||||||
CodeGenerator.Assign(packetVariable, newPacket);
|
CodeGenerator.Assign(packetVariable, newPacket);
|
||||||
CodeGenerator.Call(packetVariable, nameof(IIncomingPacket.Deserialize), argPacketData);
|
CodeGenerator.Call(packetVariable, nameof(IIncomingPacket.Deserialize), argPacketData);
|
||||||
|
|
||||||
CodeGenerator.Return(packetVariable);
|
CodeGenerator.Return(packetVariable);
|
||||||
}).Compile();
|
}
|
||||||
tempDeserializationMap.TryAdd(packetsType.Key, lambda);
|
)
|
||||||
});
|
.Compile();
|
||||||
|
tempDeserializationMap.TryAdd(packetsType.Key, lambda);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
_deserializationMap = tempDeserializationMap.ToImmutableDictionary();
|
_deserializationMap = tempDeserializationMap.ToImmutableDictionary();
|
||||||
}
|
}
|
||||||
|
@ -74,11 +81,13 @@ public class PacketDistributor<TPacketIdEnum, TSession> where TPacketIdEnum : En
|
||||||
{
|
{
|
||||||
var packetsWithId = sourcesContainingPackets.SelectMany(a => a.GetTypes()
|
var packetsWithId = sourcesContainingPackets.SelectMany(a => a.GetTypes()
|
||||||
.Where(type => type is { IsInterface: false, IsAbstract: false } &&
|
.Where(type => type is { IsInterface: false, IsAbstract: false } &&
|
||||||
type.GetInterfaces().Contains(packetType)
|
type.GetInterfaces().Contains(packetType) &&
|
||||||
&& type.GetCustomAttributes<PacketIdAttribute<TPacketIdEnum>>().Any()
|
type.GetCustomAttributes<PacketIdAttribute<TPacketIdEnum>>().Any()
|
||||||
))
|
)
|
||||||
|
)
|
||||||
.Select(type =>
|
.Select(type =>
|
||||||
new { Type = type, Attribute = type.GetCustomAttribute<PacketIdAttribute<TPacketIdEnum>>() })
|
new { Type = type, Attribute = type.GetCustomAttribute<PacketIdAttribute<TPacketIdEnum>>() }
|
||||||
|
)
|
||||||
.Select(x => new KeyValuePair<TPacketIdEnum, Type>(x.Attribute!.Code, x.Type));
|
.Select(x => new KeyValuePair<TPacketIdEnum, Type>(x.Attribute!.Code, x.Type));
|
||||||
|
|
||||||
return packetsWithId;
|
return packetsWithId;
|
||||||
|
@ -89,20 +98,32 @@ public class PacketDistributor<TPacketIdEnum, TSession> where TPacketIdEnum : En
|
||||||
{
|
{
|
||||||
var packetHandlersWithId = sourcesContainingPacketHandlers.SelectMany(assembly => assembly.GetTypes()
|
var packetHandlersWithId = sourcesContainingPacketHandlers.SelectMany(assembly => assembly.GetTypes()
|
||||||
.Where(t =>
|
.Where(t =>
|
||||||
t is { IsClass: true, IsAbstract: false } && Array.Exists(t
|
t is { IsClass: true, IsAbstract: false } &&
|
||||||
.GetInterfaces(), i =>
|
Array.Exists(t
|
||||||
i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IPacketHandler<,>)))
|
.GetInterfaces(),
|
||||||
|
i =>
|
||||||
|
i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IPacketHandler<,>)
|
||||||
|
)
|
||||||
|
)
|
||||||
.Select(packetHandlerType => new
|
.Select(packetHandlerType => new
|
||||||
{
|
{
|
||||||
Type = packetHandlerType,
|
Type = packetHandlerType,
|
||||||
PacketId = packetHandlerType
|
PacketId = packetHandlerType
|
||||||
.GetInterfaces().First(t1 =>
|
.GetInterfaces()
|
||||||
t1 is { IsGenericType: true } &&
|
.First(t1 =>
|
||||||
t1.GetGenericTypeDefinition() == typeof(IPacketHandler<,>)).GetGenericArguments()
|
t1 is { IsGenericType: true } &&
|
||||||
.First(genericType => genericType.GetInterfaces().Any(packetType =>
|
t1.GetGenericTypeDefinition() == typeof(IPacketHandler<,>)
|
||||||
packetType == typeof(IPacket)))
|
)
|
||||||
.GetCustomAttribute<PacketIdAttribute<TPacketIdEnum>>()
|
.GetGenericArguments()
|
||||||
}))
|
.First(genericType => genericType.GetInterfaces()
|
||||||
|
.Any(packetType =>
|
||||||
|
packetType == typeof(IPacket)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
.GetCustomAttribute<PacketIdAttribute<TPacketIdEnum>>()
|
||||||
|
}
|
||||||
|
)
|
||||||
|
)
|
||||||
.Where(x => x.PacketId != null)
|
.Where(x => x.PacketId != null)
|
||||||
.Select(x => new KeyValuePair<TPacketIdEnum, Type>(x.PacketId!.Code, x.Type));
|
.Select(x => new KeyValuePair<TPacketIdEnum, Type>(x.PacketId!.Code, x.Type));
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue