private static IContainer GetAutofacContainer(IServiceProxyManager serviceProxyManager) { var builder = new ContainerBuilder(); builder.Register(c => new ServiceProxyInterceptor(serviceProxyManager)); builder.RegisterType <SampleService>() .As <ISampleService>() .EnableInterfaceInterceptors() .InterceptedBy(typeof(ServiceProxyInterceptor)) .SingleInstance(); var container = builder.Build(); return(container); }
public static void Test() { LoggerManager.ServerLoggerFactory.AddConsole(LogLevel.Information); LoggerManager.ClientLoggerFactory.AddConsole(LogLevel.Error); string path = Path.Combine(Directory.GetCurrentDirectory(), "config_simple.json"); var configRoot = new ConfigurationBuilder() .AddJsonFile(path) .Build(); var globalConfig = configRoot.GetGlobalConfig(); GlobalSettings.Apply(globalConfig); IServiceProxyManager serviceProxyManager = StartClient(configRoot); IContainer container = GetAutofacContainer(serviceProxyManager); INodeServer nodeServer = StartServer(configRoot, container); System.Console.ReadLine(); nodeServer.StopAsync().Wait(); System.Console.WriteLine("Stop"); }
public void Run(ILoggerFactory loggerFactory, IServiceProxyManager serviceProxyManager, IContainer container) { loggerFactory.AddConsole(LogLevel.Information); var logger = loggerFactory.CreateLogger <XNodeBootstrap>(); var dir = Directory.GetCurrentDirectory(); var fileName = "xnode.json"; string path = Path.Combine(dir, fileName); var configRoot = new ConfigurationBuilder() .AddJsonFile(path) .Build(); var name = configRoot.GetValue <string>("name"); var globalConfig = configRoot.GetGlobalConfig(); GlobalSettings.Apply(globalConfig); #region Server XNode.Logging.LoggerManager.ServerLoggerFactory = loggerFactory; var loginValidator = new DefaultLoginValidator(configRoot.GetDefaultLoginValidatorConfig(), XNode.Logging.LoggerManager.ServerLoggerFactory); var serverConfig = configRoot.GetServerConfig(); var nodeServer = new NodeServerBuilder() .ApplyConfig(serverConfig) .ConfigSerializer(new ProtoBufSerializer(XNode.Logging.LoggerManager.ServerLoggerFactory)) .ConfigLoginValidator(loginValidator) .UseAutofac(container) .UseDotNetty(serverConfig.ServerInfo) .Build(); nodeServer.StartAsync().Wait(); #endregion #region Client var clientConfig = configRoot.GetClientConfig(); if (clientConfig.ServiceProxies == null || clientConfig.ServiceProxies.Count == 0) { return; } XNode.Logging.LoggerManager.ClientLoggerFactory = loggerFactory; var serializer = new ProtoBufSerializer(XNode.Logging.LoggerManager.ClientLoggerFactory); var serviceCaller = new ServiceCallerBuilder() .UseDefault() .Build(); foreach (var config in clientConfig.ServiceProxies) { var serviceProxy = new ServiceProxy( config.ProxyName, config?.Services, serviceCaller) .AddServices(config.ProxyTypes) .AddClients( new NodeClientBuilder() .ConfigConnections(config.Connections) .ConfigSerializer(serializer) .ConfigLoginHandler(new DefaultLoginHandler(configRoot.GetDefaultLoginHandlerConfig(config.ProxyName), serializer)) .UseDotNetty() .Build() ); serviceProxyManager.Regist(serviceProxy); } serviceProxyManager.ConnectAsync().ContinueWith(task => { if (task.Exception != null) { if (task.Exception is AggregateException) { foreach (var e in task.Exception.InnerExceptions) { if (e is NetworkException netEx) { logger.LogError(netEx, $"XNode client connect has net error. Host={netEx.Host}, Port={netEx.Port}, Message={netEx.Message}"); } } } else { logger.LogError(task.Exception, $"XNode client connect has error. Message={task.Exception.Message}"); } throw task.Exception; } }); #endregion }
public AutofacModule(IServiceProxyManager serviceProxyManager) { _serviceProxyManager = serviceProxyManager; }
/// <summary> /// 构造函数 /// </summary> /// <param name="serviceProxyManager">服务代理管理器</param> public ServiceProxyInterceptor(IServiceProxyManager serviceProxyManager) { this.serviceProxyManager = serviceProxyManager; }
/// <summary> /// 向ServiceProxyManager注册所有订阅服务的代理对象 /// </summary> /// <param name="serviceSubscriber"></param> /// <param name="serviceProxyManager">服务代理管理器</param> public static IServiceSubscriber RegistTo(this IServiceSubscriber serviceSubscriber, IServiceProxyManager serviceProxyManager) { var serviceProxies = serviceSubscriber.GetServiceProxies(); foreach (var serviceProxy in serviceProxies) { serviceProxyManager.Regist(serviceProxy); } return(serviceSubscriber); }