Ultron.Proxy/Ultron.Proxy.Server/Server.cs

117 lines
3.3 KiB
C#

using Microsoft.Extensions.Configuration;
using System;
using System.Diagnostics;
using System.IO;
using log4net;
using log4net.Config;
using Ultron.Proxy.Interfaces;
namespace Ultron.Proxy
{
class Server
{
public class Log4netLogger : ILogger
{
public void Debug(object message)
{
//Logger.Debug(message);
Logger.Debug(message);
}
public void Error(object message, Exception ex)
{
//Logger.Debug(message);
Logger.Error(message,ex);
}
public void Info(object message)
{
Logger.Info(message);
}
}
public static IConfigurationRoot Configuration { get; set; }
public static ILog Logger;
static void Main(string[] args)
{
//log
var loggerRepository = LogManager.CreateRepository("NSmartServerRepository");
XmlConfigurator.ConfigureAndWatch(loggerRepository, new FileInfo("log4net.config"));
Logger = LogManager.GetLogger(loggerRepository.Name, "NSmartServer");
if (!loggerRepository.Configured) throw new Exception("log config failed.");
Logger.Debug("*** Ultron.Proxy Server v0.1 ***");
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json");
Configuration = builder.Build();
StartServer();
}
private static void StartServer()
{
try
{
ServerHost.ClientServicePort = int.Parse(Configuration.GetSection("ClientServicePort").Value);
ServerHost.ConfigServicePort = int.Parse(Configuration.GetSection("ConfigServicePort").Value);
}
catch (Exception ex)
{
Logger.Debug("配置文件读取失败:" + ex.ToString());
return;
}
ServerHost srv = new ServerHost(new Log4netLogger());
int retryCount = 0;
while (true)
{
var watch = new Stopwatch();
try
{
watch.Start();
srv.SetWebPort(int.Parse(Configuration.GetSection("WebAPIPort").Value))
.Start()
.Wait();
}
catch (Exception ex)
{
Logger.Debug(ex.ToString());
}
finally
{
watch.Stop();
}
//短时间多次出错则终止服务器
if (watch.Elapsed > TimeSpan.FromSeconds(10))
{
retryCount = 0;
}
else
{
retryCount++;
}
if (retryCount > 100) break;
}
Logger.Debug("Ultron.Proxy server terminated. Press any key to continue.");
try
{
Console.Read();
}
catch
{
// ignored
}
}
}
internal class ProxyClient
{
}
}