using HH.WCS.Hexafluo.api;
|
using HH.WCS.Hexafluo.core;
|
using HH.WCS.Hexafluo.device;
|
using HH.WCS.Hexafluo.util;
|
using HH.WCS.SJML.Bll;
|
using HH.WCS.ZCQTJ.core;
|
using HH.WCS.ZCQTJ.util;
|
using Microsoft.Owin.Hosting;
|
using System;
|
using System.Collections.Generic;
|
using System.Diagnostics;
|
using System.Net;
|
using System.Net.Sockets;
|
using System.Threading;
|
using System.Threading.Tasks;
|
using Topshelf;
|
|
namespace HH.WCS.Hexafluo
|
{
|
internal class Program
|
{
|
static void Main(string[] args)
|
{
|
string currentProcessName = Process.GetCurrentProcess().ProcessName;
|
Process[] processes = Process.GetProcessesByName(currentProcessName);
|
if (processes.Length > 1)
|
{
|
Environment.Exit(0);
|
}
|
//1.0 开启api
|
Startup();
|
//2.0 开启tcp
|
StartTcp();
|
//初始化表名
|
TableName();
|
//初始化连接池
|
SqlName();
|
//3.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("hh");
|
x.SetDisplayName("中策大江东WCS V1.03");
|
x.SetServiceName("hh.wms");
|
});
|
|
var exitCode = (int)Convert.ChangeType(rc, rc.GetTypeCode());
|
Environment.ExitCode = exitCode;
|
}
|
|
/// <summary>
|
/// 获取项目的表名
|
/// </summary>
|
private static void TableName()
|
{
|
STAttribute.GetValue(Settings.TableHelperList);
|
}
|
private static void SqlName()
|
{
|
BLLCreator.CreateSingleton<SqlServerList>().SqlConnectC();
|
}
|
|
private static void Startup()
|
{
|
Console.WriteLine("Startup ApiController");
|
|
Task.Run(() =>
|
{
|
//var a = Newtonsoft.Json.JsonConvert.DeserializeObject<SettingHelper>(SettingHelperList);
|
var uri = Settings.SettingHelperList;
|
Console.WriteLine(uri);
|
// var url = "http://+:8801";//{SettingHelper.port}
|
try
|
{
|
var url = uri;
|
using (WebApp.Start<Startup>(url))
|
{
|
Console.WriteLine("Running on {0}", url);
|
Console.ReadLine();
|
}
|
}
|
catch (Exception ex)
|
{
|
Console.WriteLine(ex.Message);
|
}
|
|
});
|
}
|
private static void StartTcp()
|
{
|
var host = Dns.GetHostEntry(Dns.GetHostName());
|
foreach (var ip in host.AddressList)
|
{
|
if (ip.AddressFamily == AddressFamily.InterNetwork)
|
{
|
Console.WriteLine($"ip= {ip.ToString()}");
|
new TcpServer(ip.ToString());
|
}
|
}
|
}
|
|
public class WorkThread
|
{
|
public void Start()
|
{
|
List<Task> tasks = new List<Task>();
|
//添加任务推送线程
|
tasks.Add(GetTask(TaskCore.Dispatch));//正式
|
//tasks.Add(GetTask(TaskCore.agvce));//测试
|
|
//添加自定义线程
|
tasks.Add(GetTask(MonitorZxc.CheckCamera));//总线程
|
//tasks.Add(GetTask(MonitorWtp.CheckCamera));//无托盘获取托盘信息
|
//tasks.Add(GetTask(Monitor.CheckCamera));//入库
|
//tasks.Add(GetTask(MonitorWtp.CheckCamera));//无托盘入库 获取托盘信息
|
//tasks.Add(GetTask(MonitorOut.CheckCamera));//出库
|
|
// tasks.Add(GetTask(MonitorAgvPriy.CheckCamera));//调整优先级
|
|
tasks.Add(GetTask(WcsSecurityRequest.CheckCamera));//1102/1104安全请求 等异步请求
|
tasks.Add(GetTaskCv(UnBing.CheckCamera));//解锁接驳位
|
tasks.Add(GetTaskCv2(TaskOver.CheckCameraTask));//钉钉
|
tasks.Add(GetTaskCv5(TaskOver.CheckCameraTask2));//钉钉2 30分钟
|
tasks.Add(GetTaskCv4(TaskOverItem.CheckCameraTask));//钉钉推送物料数据
|
tasks.Add(GetTask2(OverTimeAgvTask.AgvOverTaskPir));//出库agv任务调整优先级
|
tasks.Add(GetTask(MesKtTask.MesKtTaskIssued));//空托任务处理
|
|
//任务状态更新线程
|
// tasks.Add(GetTask(TaskCore.SeleTaskListTm));
|
Task.WaitAll(tasks.ToArray());
|
}
|
public void Stop() { Console.WriteLine("work stopped"); }
|
private Task GetTask(Action action)
|
{
|
var task = Task.Run(() =>
|
{
|
while (true)
|
{
|
try
|
{
|
action();
|
}
|
catch (Exception ex)
|
{
|
LogHelper.Error(ex.Message, ex);
|
}
|
Thread.Sleep(5000);
|
}
|
});
|
return task;
|
}
|
private Task GetTask2(Action action)
|
{
|
var task = Task.Run(() =>
|
{
|
while (true)
|
{
|
try
|
{
|
action();
|
}
|
catch (Exception ex)
|
{
|
LogHelper.Error(ex.Message, ex);
|
}
|
Thread.Sleep(30000);
|
}
|
});
|
return task;
|
}
|
private Task GetTaskCv(Action action)
|
{
|
var task = Task.Run(() =>
|
{
|
while (true)
|
{
|
try
|
{
|
action();
|
}
|
catch (Exception ex)
|
{
|
LogHelper.Error(ex.Message, ex);
|
}
|
Thread.Sleep(60000);
|
}
|
});
|
return task;
|
}
|
|
private Task GetTaskCv2(Action action)
|
{
|
var task = Task.Run(() =>
|
{
|
while (true)
|
{
|
try
|
{
|
action();
|
}
|
catch (Exception ex)
|
{
|
LogHelper.Error(ex.Message, ex);
|
}
|
Thread.Sleep(300000);
|
}
|
});
|
return task;
|
}
|
|
private Task GetTaskCv3(Action action)
|
{
|
var task = Task.Run(() =>
|
{
|
while (true)
|
{
|
try
|
{
|
action();
|
}
|
catch (Exception ex)
|
{
|
LogHelper.Error(ex.Message, ex);
|
}
|
Thread.Sleep(900000);
|
}
|
});
|
return task;
|
}
|
|
private Task GetTaskCv4(Action action)
|
{
|
var task = Task.Run(() =>
|
{
|
while (true)
|
{
|
try
|
{
|
action();
|
}
|
catch (Exception ex)
|
{
|
LogHelper.Error(ex.Message, ex);
|
}
|
Thread.Sleep(3600000);
|
}
|
});
|
return task;
|
}
|
private Task GetTaskCv5(Action action)
|
{
|
var task = Task.Run(() =>
|
{
|
while (true)
|
{
|
try
|
{
|
action();
|
}
|
catch (Exception ex)
|
{
|
LogHelper.Error(ex.Message, ex);
|
}
|
Thread.Sleep(2400000);
|
}
|
});
|
return task;
|
}
|
}
|
|
}
|
}
|