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(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; } /// /// 获取项目的表名 /// private static void TableName() { STAttribute.GetValue(Settings.TableHelperList); } private static void SqlName() { BLLCreator.CreateSingleton().SqlConnectC(); } private static void Startup() { Console.WriteLine("Startup ApiController"); Task.Run(() => { //var a = Newtonsoft.Json.JsonConvert.DeserializeObject(SettingHelperList); var uri = Settings.SettingHelperList; Console.WriteLine(uri); // var url = "http://+:8801";//{SettingHelper.port} try { var url = uri; using (WebApp.Start(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 tasks = new List(); //添加任务推送线程 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; } } } }