using HH.WCS.NongFuChaYuan.ApiService;
|
using HH.WCS.NongFuChaYuan.TaskController;
|
using HH.WCS.NongFuChaYuan.DeviceService;
|
using HH.WCS.NongFuChaYuan.OtherService;
|
using Microsoft.Owin.Hosting;
|
using NLog;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Net;
|
using System.Net.Sockets;
|
using System.Text;
|
using System.Threading;
|
using System.Threading.Tasks;
|
using Topshelf;
|
using Monitor = HH.WCS.NongFuChaYuan.TaskController.Monitor;
|
using HH.WCS.NongFuChaYuan.WmsService;
|
|
namespace HH.WCS.NongFuChaYuan
|
{
|
internal class StartMain
|
{
|
static void Main(string[] args)
|
{
|
//0.0 项目标识
|
////Console.WriteLine($"Startup Server On {Settings.ProjectName}!");
|
//3.0 开启外挂服务
|
StartOther();
|
//4.0 开启线程
|
var rc = HostFactory.Run(x =>
|
{
|
x.Service<WorkThread>(s =>
|
{
|
s.ConstructUsing(name => new WorkThread());
|
s.WhenStarted(tc => tc.Start());
|
s.WhenStopped(tc => tc.Stop());
|
});
|
x.RunAsLocalSystem();
|
|
x.SetDescription("hh123");
|
x.SetDisplayName("hh123.WmsService");
|
x.SetServiceName("hh123.WmsService");
|
});
|
|
var exitCode = (int)Convert.ChangeType(rc, rc.GetTypeCode());
|
Environment.ExitCode = exitCode;
|
}
|
|
private static void Startup()
|
{
|
Task.Run(() =>
|
{
|
var url = "http://+:8001";//{SettingHelper.port}
|
//var url = Settings.HttpUrlPort;//{SettingHelper.port}
|
using (WebApp.Start<Startup>(url))
|
{
|
Console.WriteLine("Startup ApiServer On {0}!", url);
|
Console.ReadLine();
|
while (true) { }
|
}
|
});
|
}
|
|
private static void StartTcp()
|
{
|
var host = Dns.GetHostEntry(Dns.GetHostName());
|
foreach (var ip in host.AddressList)
|
{
|
if (ip.AddressFamily == AddressFamily.InterNetwork)
|
{
|
Console.WriteLine($"Startup TcpServer On {ip.ToString()}:{Settings.TcpPort}!");
|
new TcpServer(ip.ToString());
|
}
|
}
|
}
|
|
private static void StartOther()
|
{
|
Console.WriteLine($"Startup OtherServer!");
|
STAttribute.InitTableName();//初始化 MOBOX、SQLSERVER 数据库表名
|
STAttribute.CreateMiddleTable();//初始化 标准数据中间表
|
|
WCSHelper.CreateMiddleTable();//创建中间表
|
//WCSHelper.InitRowLockTable();//初始化排锁定表
|
|
|
}
|
|
public class WorkThread
|
{
|
|
public void Start()
|
{
|
//1.0 开启api
|
Startup();
|
//2.0 开启tcp
|
StartTcp();
|
List<Task> tasks = new List<Task>();
|
//添加任务推送线程
|
tasks.Add(GetTask(TaskProcess.Dispatch));
|
//添加自定义线程
|
TaskAddFunc(tasks);
|
//Task.WaitAll(tasks.ToArray());
|
}
|
|
private void TaskAddFunc(List<Task> tasks)
|
{
|
tasks.Add(GetTask(Monitor.AnalysisIntraoCular));
|
tasks.Add(GetTask(Monitor.AnalysisMoveLib));
|
//tasks.Add(GetTask(Monitor.AnalysisMoveLib1));
|
//tasks.Add(GetTask(Monitor.PanKurealtime));
|
//tasks.Add(GetTask(Monitor.AnalysisProductLine));
|
//tasks.Add(GetTask(Monitor.AnalysisStockup));
|
}
|
|
public void Stop() { Console.WriteLine("Stopped Thread Server!"); }
|
private Task GetTask(Action action)
|
{
|
var task = Task.Run(() =>
|
{
|
while (true)
|
{
|
try
|
{
|
action();
|
}
|
catch (Exception ex)
|
{
|
LogHelper.Error(ex.Message, ex);
|
}
|
Thread.Sleep(3000);
|
}
|
});
|
return task;
|
}
|
}
|
}
|
}
|