private static void AddHandlerCore1(ILPCServer server,
                                        object instance,
                                        MethodInfo method,
                                        Type requestType,
                                        Type responseType)
    {
        var addHandlerCoreMethod = typeof(LPCServerExtensions).GetMethod(nameof(AddHandlerCore2),
                                                                         BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy) !;
        var makeGenericMethod = addHandlerCoreMethod.MakeGenericMethod(requestType, responseType);

        makeGenericMethod.Invoke(null, new[] { server, instance, method });
    }
 internal static void AddHandlerCore2 <TRequest, TResponse>(ILPCServer server,
                                                            object instance,
                                                            MethodInfo method)
     where TRequest : IRequest
     where TResponse : IResponse
 {
     server.AddHandler <TRequest, TResponse>(req =>
     {
         var task = method.Invoke(instance, new object?[] { req }) !;
         return((Task <TResponse>)task);
     });
 }
Ejemplo n.º 3
0
 public ServerJob(ILogger <ServerJob> logger,
                  ILPCServer lpcServer,
                  IBkSearcherServer bkSearcherServer,
                  IAfEventHub afEventHub,
                  ISmallCache smallCache,
                  INotificationRecordServer notificationRecordServer)
 {
     _logger                   = logger;
     _lpcServer                = lpcServer;
     _bkSearcherServer         = bkSearcherServer;
     _afEventHub               = afEventHub;
     _smallCache               = smallCache;
     _notificationRecordServer = notificationRecordServer;
 }
    public static IReadOnlyList <MethodInfo> AddServerInstance <T>(this ILPCServer server, T instance)
    {
        var remoteMethods = typeof(T).GetMethods()
                            .Where(IsRemoteMethod)
                            .ToList();

        foreach (var method in remoteMethods)
        {
            AddHandlerCore1(server, instance !,
                            method,
                            method.GetParameters()[0].ParameterType,
                            method.ReturnType.GenericTypeArguments[0]);
        }

        return(remoteMethods);
    }