chore: formatting
This commit is contained in:
parent
2955b62012
commit
2b31505a9b
4 changed files with 124 additions and 103 deletions
|
@ -1,9 +1,9 @@
|
|||
name: Release Rai.PacketMediator
|
||||
name: Release Rai.PacketMediator
|
||||
run-name: ${{ gitea.actor }} is building the Server application
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- 'v*.*.*'
|
||||
- v*.*.*
|
||||
paths-ignore:
|
||||
- .run/**
|
||||
|
||||
|
@ -33,7 +33,7 @@ jobs:
|
|||
dotnet build RaiNote.PacketMediator.csproj -c Release
|
||||
|
||||
publish:
|
||||
needs: [ build ]
|
||||
needs: [build]
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
@ -60,7 +60,7 @@ jobs:
|
|||
dotnet nuget push "*.nupkg" --api-key ${{secrets.nuget_api_key}} --source https://forge.rainote.dev/api/packages/rainote/nuget/index.json
|
||||
|
||||
generate-licences:
|
||||
needs: [ build, preprocess ]
|
||||
needs: [build, preprocess]
|
||||
runs-on: ubuntu-latest
|
||||
container: catthehacker/ubuntu:act-latest@sha256:efe7d859ca6f98a21b3b0471ab48455af597a064d719f65332d0f105aadcad65
|
||||
steps:
|
||||
|
|
|
@ -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!");
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -23,12 +23,14 @@ public class PacketDistributor<TPacketIdEnum, TSession> where TPacketIdEnum : En
|
|||
public PacketDistributor(IServiceProvider serviceProvider,
|
||||
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,
|
||||
SingleWriter = false
|
||||
});
|
||||
}
|
||||
);
|
||||
var containingPackets = sourcesContainingPackets as Assembly[] ?? sourcesContainingPackets.ToArray();
|
||||
var allIncomingPackets = GetAllPackets(containingPackets, typeof(IIncomingPacket));
|
||||
var allOutgoingPackets = GetAllPackets(containingPackets, typeof(IOutgoingPacket));
|
||||
|
@ -45,9 +47,11 @@ public class PacketDistributor<TPacketIdEnum, TSession> where TPacketIdEnum : En
|
|||
{
|
||||
var packetHandler =
|
||||
ActivatorUtilities.GetServiceOrCreateInstance(serviceProvider,
|
||||
packetHandlerPair.Value);
|
||||
packetHandlerPair.Value
|
||||
);
|
||||
_packetHandlersInstantiation.TryAdd(packetHandlerPair.Key, packetHandler as IPacketHandler<TSession>);
|
||||
});
|
||||
}
|
||||
);
|
||||
allIncomingPackets.ForEach(packetsType =>
|
||||
{
|
||||
var lambda = CodeGenerator.Lambda<Func<byte[], IIncomingPacket>>(fun =>
|
||||
|
@ -60,9 +64,12 @@ public class PacketDistributor<TPacketIdEnum, TSession> where TPacketIdEnum : En
|
|||
CodeGenerator.Call(packetVariable, nameof(IIncomingPacket.Deserialize), argPacketData);
|
||||
|
||||
CodeGenerator.Return(packetVariable);
|
||||
}).Compile();
|
||||
}
|
||||
)
|
||||
.Compile();
|
||||
tempDeserializationMap.TryAdd(packetsType.Key, lambda);
|
||||
});
|
||||
}
|
||||
);
|
||||
|
||||
_deserializationMap = tempDeserializationMap.ToImmutableDictionary();
|
||||
}
|
||||
|
@ -74,11 +81,13 @@ public class PacketDistributor<TPacketIdEnum, TSession> where TPacketIdEnum : En
|
|||
{
|
||||
var packetsWithId = sourcesContainingPackets.SelectMany(a => a.GetTypes()
|
||||
.Where(type => type is { IsInterface: false, IsAbstract: false } &&
|
||||
type.GetInterfaces().Contains(packetType)
|
||||
&& type.GetCustomAttributes<PacketIdAttribute<TPacketIdEnum>>().Any()
|
||||
))
|
||||
type.GetInterfaces().Contains(packetType) &&
|
||||
type.GetCustomAttributes<PacketIdAttribute<TPacketIdEnum>>().Any()
|
||||
)
|
||||
)
|
||||
.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));
|
||||
|
||||
return packetsWithId;
|
||||
|
@ -89,20 +98,32 @@ public class PacketDistributor<TPacketIdEnum, TSession> where TPacketIdEnum : En
|
|||
{
|
||||
var packetHandlersWithId = sourcesContainingPacketHandlers.SelectMany(assembly => assembly.GetTypes()
|
||||
.Where(t =>
|
||||
t is { IsClass: true, IsAbstract: false } && Array.Exists(t
|
||||
.GetInterfaces(), i =>
|
||||
i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IPacketHandler<,>)))
|
||||
t is { IsClass: true, IsAbstract: false } &&
|
||||
Array.Exists(t
|
||||
.GetInterfaces(),
|
||||
i =>
|
||||
i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IPacketHandler<,>)
|
||||
)
|
||||
)
|
||||
.Select(packetHandlerType => new
|
||||
{
|
||||
Type = packetHandlerType,
|
||||
PacketId = packetHandlerType
|
||||
.GetInterfaces().First(t1 =>
|
||||
.GetInterfaces()
|
||||
.First(t1 =>
|
||||
t1 is { IsGenericType: true } &&
|
||||
t1.GetGenericTypeDefinition() == typeof(IPacketHandler<,>)).GetGenericArguments()
|
||||
.First(genericType => genericType.GetInterfaces().Any(packetType =>
|
||||
packetType == typeof(IPacket)))
|
||||
t1.GetGenericTypeDefinition() == typeof(IPacketHandler<,>)
|
||||
)
|
||||
.GetGenericArguments()
|
||||
.First(genericType => genericType.GetInterfaces()
|
||||
.Any(packetType =>
|
||||
packetType == typeof(IPacket)
|
||||
)
|
||||
)
|
||||
.GetCustomAttribute<PacketIdAttribute<TPacketIdEnum>>()
|
||||
}))
|
||||
}
|
||||
)
|
||||
)
|
||||
.Where(x => x.PacketId != null)
|
||||
.Select(x => new KeyValuePair<TPacketIdEnum, Type>(x.PacketId!.Code, x.Type));
|
||||
|
||||
|
|
Loading…
Reference in a new issue