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