Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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");
        }
Esempio n. 3
0
        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
        }
Esempio n. 4
0
 public AutofacModule(IServiceProxyManager serviceProxyManager)
 {
     _serviceProxyManager = serviceProxyManager;
 }
Esempio n. 5
0
 /// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="serviceProxyManager">服务代理管理器</param>
 public ServiceProxyInterceptor(IServiceProxyManager serviceProxyManager)
 {
     this.serviceProxyManager = serviceProxyManager;
 }
Esempio n. 6
0
        /// <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);
        }