109 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			109 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C#
		
	
	
	
| 
								 | 
							
								using log4net;
							 | 
						|||
| 
								 | 
							
								using Microsoft.Extensions.Configuration;
							 | 
						|||
| 
								 | 
							
								using System;
							 | 
						|||
| 
								 | 
							
								using System.IO;
							 | 
						|||
| 
								 | 
							
								using System.Threading.Tasks;
							 | 
						|||
| 
								 | 
							
								using log4net.Config;
							 | 
						|||
| 
								 | 
							
								using Exception = System.Exception;
							 | 
						|||
| 
								 | 
							
								using Ultron.Proxy.Interfaces;
							 | 
						|||
| 
								 | 
							
								using Ultron.Proxy.Models;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								namespace Ultron.Proxy
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
								    class Client
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        public class Log4netLogger : ILogger
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            public void Debug(object message)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                Logger.Debug(message);
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            public void Error(object message, Exception ex)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                Logger.Error(message,ex);
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            public void Info(object message)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                Logger.Info(message);
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        public static ILog Logger;
							 | 
						|||
| 
								 | 
							
								        public static IConfigurationRoot Configuration { get; set; }
							 | 
						|||
| 
								 | 
							
								        static void Main(string[] args)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            //log
							 | 
						|||
| 
								 | 
							
								            var loggerRepository = LogManager.CreateRepository("NSmartClientRouterRepository");
							 | 
						|||
| 
								 | 
							
								            XmlConfigurator.Configure(loggerRepository, new FileInfo("log4net.config"));
							 | 
						|||
| 
								 | 
							
								            //BasicConfigurator.Configure(loggerRepository);
							 | 
						|||
| 
								 | 
							
								            Logger = LogManager.GetLogger(loggerRepository.Name, "NSmartServerClient");
							 | 
						|||
| 
								 | 
							
								            if (!loggerRepository.Configured) throw new Exception("log config failed.");
							 | 
						|||
| 
								 | 
							
								            //Thread.Sleep(3000);
							 | 
						|||
| 
								 | 
							
								            Console.ForegroundColor = ConsoleColor.Yellow;
							 | 
						|||
| 
								 | 
							
								            Logger.Info("*** NSmart ClientRouter v0.2 ***");
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            var builder = new ConfigurationBuilder()
							 | 
						|||
| 
								 | 
							
								               .SetBasePath(Directory.GetCurrentDirectory())
							 | 
						|||
| 
								 | 
							
								               .AddJsonFile("appsettings.json");
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            Configuration = builder.Build();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            //start clientrouter.
							 | 
						|||
| 
								 | 
							
								            try
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                StartClient().Wait();
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            catch (Exception e)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                Logger.Error(e.Message);
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            Logger.Info("Client terminated,press any key to continue.");
							 | 
						|||
| 
								 | 
							
								            Console.Read();
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        private static async Task StartClient()
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            Router clientRouter = new Router(new Log4netLogger());
							 | 
						|||
| 
								 | 
							
								            //read config from config file.
							 | 
						|||
| 
								 | 
							
								            SetConfig(clientRouter);// clientRouter.SetConifiguration();
							 | 
						|||
| 
								 | 
							
								            Task tsk = clientRouter.ConnectToProvider();
							 | 
						|||
| 
								 | 
							
								            try
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                await tsk;
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            catch (Exception e)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                Logger.Error(e);
							 | 
						|||
| 
								 | 
							
								                throw;
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        private static void SetConfig(Router clientRouter)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            Config config = new Config();
							 | 
						|||
| 
								 | 
							
								            config.ProviderAddress = Configuration.GetSection("ProviderAddress").Value;
							 | 
						|||
| 
								 | 
							
								            config.ProviderPort = int.Parse(Configuration.GetSection("ProviderPort").Value);
							 | 
						|||
| 
								 | 
							
								            config.ProviderConfigPort = int.Parse(Configuration.GetSection("ProviderConfigPort").Value);
							 | 
						|||
| 
								 | 
							
								            var configClients = Configuration.GetSection("Clients").GetChildren();
							 | 
						|||
| 
								 | 
							
								            foreach (var cli in configClients)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                int confConsumerPort = 0;
							 | 
						|||
| 
								 | 
							
								                if (cli["ConsumerPort"] != null) confConsumerPort = int.Parse(cli["ConsumerPort"]);
							 | 
						|||
| 
								 | 
							
								                config.Clients.Add(new ClientApp
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    IP = cli["IP"],
							 | 
						|||
| 
								 | 
							
								                    Port = int.Parse(cli["TargetServicePort"]),
							 | 
						|||
| 
								 | 
							
								                    RemotePort = confConsumerPort
							 | 
						|||
| 
								 | 
							
								                });
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            // Configuration.GetSection("1").
							 | 
						|||
| 
								 | 
							
								            clientRouter.SetConifiguration(config);
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								}
							 |