chore: formatting

This commit is contained in:
Timothy Schenk 2024-08-07 21:57:19 +02:00
parent 2955b62012
commit 2b31505a9b
Signed by: rainote
SSH key fingerprint: SHA256:pnkNSDwpAnaip00xaZlVFHKKsS7T8UtOomMzvs0yITE
4 changed files with 124 additions and 103 deletions

View file

@ -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

View file

@ -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!");

View file

@ -1,8 +1,8 @@
// 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;
public class Sample public class Sample
{ {
} }

View file

@ -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));