117 lines
3.3 KiB
C#
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
|
|
{
|
|
}
|
|
}
|