| | |
| | | using static System.Windows.Forms.VisualStyles.VisualStyleElement.TextBox; |
| | | using System.Security.Cryptography; |
| | | using System.Windows.Markup; |
| | | using static GZ.Projects.AuxAllWCS.EasyPLC; |
| | | using static System.Runtime.CompilerServices.RuntimeHelpers; |
| | | using ServiceStack.Configuration; |
| | | using ServiceStack; |
| | | using Spectre.Console; |
| | | using System.Net.WebSockets; |
| | | using System.Net; |
| | | using System.Threading; |
| | | using System.IO; |
| | | |
| | | namespace GZ.Projects.AuxAllWCS |
| | | { |
| | |
| | | } |
| | | |
| | | // æ§è¡å§æ |
| | | if (methodName != "TaskEverythingRun") |
| | | return null; |
| | | return methodDelegate.DynamicInvoke(args); |
| | | } |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | public string WriteLine(string value = "") |
| | | { |
| | | |
| | | |
| | | |
| | | |
| | | // å¨è¿éæ¦æªå¤çè¾åº |
| | | string intercepted = $"[æ¦æªå°çè¾åº] {value}"; |
| | | return intercepted; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// æ·é¡º1 ä¿¡å·å¤ç |
| | | /// </summary> |
| | |
| | | //tag.Js1.D1212_LAST = 0; |
| | | RedisHelper.Add($"Jsæ·é¡º1.D1202_LAST", "0", out string msg); |
| | | } |
| | | |
| | | if (tag.Js1.D1213_LAST == 0 && TcpServer.GetBitdata(tag.Js1.D1212, 3) == 1) |
| | | { |
| | | var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/200", JsonConvert.SerializeObject(new |
| | |
| | | { |
| | | if (tag.wxr1.R44 && !tag.wxr1.R44_LAST && tag.wxr1.R10) |
| | | { |
| | | if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[0], out string traycode)) |
| | | if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[0], out string traycode) && !string.IsNullOrEmpty(traycode.Trim())) |
| | | { |
| | | var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/200", JsonConvert.SerializeObject(new |
| | | { |
| | |
| | | RedisHelper.Add($"ç»´å¸å°æè1.R10_LAST", "false", out string msg); |
| | | } |
| | | else |
| | | if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[0], out string traycode)) |
| | | if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[0], out string traycode) && !string.IsNullOrEmpty(traycode.Trim())) |
| | | { |
| | | //䏿¥æ ¡éªã |
| | | ///var str = Settings.apiHelper.Post(Settings.MESbaseUrl + "mom-basic/dataTransmission/json/service/202", requestJson); |
| | |
| | | { |
| | | if (tag.wxr1.R46 && !tag.wxr1.R46_LAST && tag.wxr1.R11) |
| | | { |
| | | if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[1], out string traycode)) |
| | | if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[1], out string traycode) && !string.IsNullOrEmpty(traycode.Trim())) |
| | | { |
| | | var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/200", JsonConvert.SerializeObject(new |
| | | { |
| | |
| | | RedisHelper.Add($"ç»´å¸å°æè1.R11_LAST", "false", out string msg); |
| | | } |
| | | else |
| | | if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[1], out string traycode)) |
| | | if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[1], out string traycode) && !string.IsNullOrEmpty(traycode.Trim())) |
| | | { |
| | | //䏿¥æ ¡éªã |
| | | ///var str = Settings.apiHelper.Post(Settings.MESbaseUrl + "mom-basic/dataTransmission/json/service/202", requestJson); |
| | |
| | | { |
| | | if (tag.wxr2.R44 && !tag.wxr2.R44_LAST && tag.wxr2.R10) |
| | | { |
| | | if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[0], out string traycode)) |
| | | if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[0], out string traycode) && !string.IsNullOrEmpty(traycode.Trim())) |
| | | { |
| | | var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/200", JsonConvert.SerializeObject(new |
| | | { |
| | |
| | | RedisHelper.Add($"ç»´å¸å°æè2.R10_LAST", "false", out string msg); |
| | | } |
| | | else |
| | | if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[0], out string traycode)) |
| | | if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[0], out string traycode) && !string.IsNullOrEmpty(traycode.Trim())) |
| | | { |
| | | //䏿¥æ ¡éªã |
| | | ///var str = Settings.apiHelper.Post(Settings.MESbaseUrl + "mom-basic/dataTransmission/json/service/202", requestJson); |
| | |
| | | { |
| | | if (tag.wxr2.R46 && !tag.wxr2.R46_LAST && tag.wxr2.R11) |
| | | { |
| | | if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[1], out string traycode)) |
| | | if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[1], out string traycode) && !string.IsNullOrEmpty(traycode.Trim())) |
| | | { |
| | | var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/200", JsonConvert.SerializeObject(new |
| | | { |
| | |
| | | } |
| | | else |
| | | { |
| | | //LogHelper.Info($"Threadwxr2R æçæ¾ç½®ä¿¡å·1ãã -{tag.wxr2.R11_LAST}"); |
| | | if (tag.wxr2.R11_LAST) //æçæ¾ç½®ä¿¡å·ãã |
| | | { |
| | | //LogHelper.Info($"Threadwxr2R æçæ¾ç½®ä¿¡å·1ãã -{tag.wxr2.R11}"); |
| | | if (tag.wxr2.R11) |
| | | { |
| | | //tag.wxr2.R11_LAST = false; |
| | | RedisHelper.Add($"ç»´å¸å°æè2.R11_LAST", "false", out string msg); |
| | | } |
| | | else |
| | | if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[1], out string traycode)) |
| | | if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[1], out string traycode) && !string.IsNullOrEmpty(traycode.Trim())) |
| | | { |
| | | LogHelper.Info($"Threadwxr2R 䏿¥æ ¡éª>{traycode}"); |
| | | //䏿¥æ ¡éªã |
| | | ///var str = Settings.apiHelper.Post(Settings.MESbaseUrl + "mom-basic/dataTransmission/json/service/202", requestJson); |
| | | var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/202", JsonConvert.SerializeObject(new |
| | |
| | | //æ¥è¦ã |
| | | } |
| | | } |
| | | else { TcpServer.TcpServerSend(VERX.deviceNo[1], GZ.Device.PLC.PlcHelper.Hex2Bin("544F4E")); } |
| | | else |
| | | { |
| | | LogHelper.Info($"Threadwxr2Rãã -åéæ«ç "); |
| | | TcpServer.TcpServerSend(VERX.deviceNo[1], GZ.Device.PLC.PlcHelper.Hex2Bin("544F4E")); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | else |
| | | { |
| | | Console.WriteLine($"Threadwxr2R ç»´å¸å°2 å³ è®¾å¤æªæ¾å°ã =================> "); |
| | | } |
| | | } |
| | | |
| | | |
| | | public void ThreadTaskRun(Tag tag, Func<TaskEntity, bool> action) |
| | | { |
| | |
| | | System.Threading.Thread.Sleep(3000); |
| | | return; |
| | | } |
| | | LogHelper.Info("ä»»å¡ä¸å Rgv ä»»å¡ è¿å
¥"); |
| | | |
| | | LogHelper.Info($"ä»»å¡ä¸å Rgv ä»»å¡ è¿å
¥ Rgvä¿¡æ¯ W1ç¶æ{tag.RGV.w1status} ReadTask1No>{tag.RGV.ReadTask1No} bit1taskOver>{tag.RGV.bit1taskOver} W2ç¶æ{tag.RGV.w2status} ReadTask2No>{tag.RGV.ReadTask2No} bit2taskOver>{tag.RGV.bit2taskOver}"); |
| | | TaskEntity task1 = null; |
| | | TaskEntity task2 = null; |
| | | var task1Isrun = false; |
| | |
| | | System.Threading.Thread.Sleep(3000); |
| | | return; |
| | | } |
| | | |
| | | var thisOver = 0; |
| | | LogHelper.Info($"æ¥çRGV 1å·¥ä½ä»»å¡ã"); |
| | | if (tag.RGV.ReadTask1No > 0 && tag.RGV.bit1taskOver == 1) |
| | |
| | | if (task1.S_B_STATE == "åè´§å®æ") |
| | | { |
| | | task1.S_B_STATE = "宿"; |
| | | //tag.RGV.ReadTask1No = 0; |
| | | tag.RGV.ReadTask1No = 0; |
| | | } |
| | | else |
| | | { |
| | |
| | | if (task2.S_B_STATE == "åè´§å®æ") |
| | | { |
| | | task2.S_B_STATE = "宿"; |
| | | //tag.RGV.ReadTask2No = 0; |
| | | tag.RGV.ReadTask2No = 0; |
| | | } |
| | | else |
| | | { |
| | |
| | | tag.RGV.taskmod = 2; |
| | | tag.RGV.taskno1 = Convert.ToUInt32(task1.S_TASK_NO.Substring(4)); |
| | | tag.RGV.task1do = Convert.ToUInt16(task1.S_END_LOC); |
| | | System.Threading.Thread.Sleep(750); |
| | | //RedisHelper.Add($"RGV.bit1taskOver_LAST", "0", out string msg); |
| | | //tag.RGV.taskend = 125; |
| | | //Conn.é»è®¤Redis.SetValue("RGV.taskend", "125", "RGVQueue"); |
| | | |
| | | LogHelper.Info($"{task1.S_TASK_NO}> bit1taskOver_LAST å 0"); |
| | | RedisHelper.Add($"RGV.bit1taskOver_LAST", "0", out string msg); |
| | | if (tag.RGV.bit1taskOver == 1) |
| | | tag.RGV.bit1taskOver = 0; |
| | | LogHelper.Info($"{task1.S_TASK_NO}> end å 125"); |
| | | Conn.é»è®¤Redis.SetValue("RGV.taskend", "125", "RGVQueue", false); |
| | | |
| | | LogHelper.Info($"{task1.S_TASK_NO}> bit1taskOver_LAST å 0"); |
| | | RedisHelper.Add($"RGV.bit1taskOver_LAST", "0", out string msg); |
| | | } |
| | | else //1æä»»å¡ 2 没任å¡ã |
| | | { |
| | |
| | | { |
| | | LogHelper.Info($"æ¥çRGV1 æä»»å¡{task1.S_TASK_NO},å·¥ä½2 没任å¡ã æ¾1020 1008 1016åè´§ä»»å¡{t2.S_TASK_NO}ã"); |
| | | tag.RGV.workMod = 2; |
| | | LogHelper.Info($"{task1.S_TASK_NO}> workMod 2 ã2å·¥ä½ã"); |
| | | LogHelper.Info($"{t2.S_TASK_NO}> workMod 2 ã2å·¥ä½ã"); |
| | | tag.RGV.taskmod = 1; |
| | | LogHelper.Info($"{task1.S_TASK_NO}> taskmod 1 ãåè´§ã"); |
| | | LogHelper.Info($"{t2.S_TASK_NO}> taskmod 1 ãåè´§ã"); |
| | | tag.RGV.taskno2 = Convert.ToUInt32(t2.S_TASK_NO.Substring(4)); |
| | | tag.RGV.task2do = Convert.ToUInt16(t2.S_START_LOC); |
| | | creT2 = true; |
| | | LogHelper.Info($"{t2.S_TASK_NO}> bit2taskOver_LAST å 0"); |
| | | RedisHelper.Add($"RGV.bit2taskOver_LAST", "0", out string msg); |
| | | |
| | | if (tag.RGV.bit2taskOver == 1) |
| | | tag.RGV.bit2taskOver = 0; |
| | | LogHelper.Info($"{t2.S_TASK_NO}> end å 125"); |
| | | Conn.é»è®¤Redis.SetValue("RGV.taskend", "125", "RGVQueue", false); |
| | | |
| | | LogHelper.Info($"{t2.S_TASK_NO}> bit2taskOver_LAST å 0"); |
| | | RedisHelper.Add($"RGV.bit2taskOver_LAST", "0", out string msg); |
| | | t2.S_B_STATE = "å·²æ¨é"; |
| | | taskservice.Update(t2); |
| | | } |
| | |
| | | LogHelper.Info($"{task1.S_TASK_NO}> taskmod 2 ãå¸è´§ã"); |
| | | tag.RGV.taskno1 = Convert.ToUInt32(task1.S_TASK_NO.Substring(4)); |
| | | tag.RGV.task1do = Convert.ToUInt16(task1.S_END_LOC); |
| | | System.Threading.Thread.Sleep(750); |
| | | LogHelper.Info($"{task1.S_TASK_NO}> bit1taskOver_LAST å 0"); |
| | | RedisHelper.Add($"RGV.bit1taskOver_LAST", "0", out string msg); |
| | | |
| | | if (tag.RGV.bit1taskOver == 1) |
| | | tag.RGV.bit1taskOver = 0; |
| | | LogHelper.Info($"{task1.S_TASK_NO}> taskend å 0"); |
| | | Conn.é»è®¤Redis.SetValue("RGV.taskend", "125", "RGVQueue", false); |
| | | LogHelper.Info($"{task1.S_TASK_NO}> bit1taskOver_LAST å 0"); |
| | | RedisHelper.Add($"RGV.bit1taskOver_LAST", "0", out string msg); |
| | | } |
| | | } |
| | | } |
| | |
| | | LogHelper.Info($"{task2.S_TASK_NO}> taskmod 2 ãå¸è´§ã"); |
| | | tag.RGV.taskno2 = Convert.ToUInt32(task2.S_TASK_NO.Substring(4)); |
| | | tag.RGV.task2do = Convert.ToUInt16(task2.S_END_LOC); |
| | | System.Threading.Thread.Sleep(750); |
| | | LogHelper.Info($"{task2.S_TASK_NO}> bit2taskOver_LAST å 0"); |
| | | RedisHelper.Add($"RGV.bit2taskOver_LAST", "0", out string msg); |
| | | |
| | | if (tag.RGV.bit2taskOver == 1) |
| | | tag.RGV.bit2taskOver = 0; |
| | | //tag.RGV.taskend = 125; |
| | | LogHelper.Info($"{task2.S_TASK_NO}> taskend å125"); |
| | | Conn.é»è®¤Redis.SetValue("RGV.taskend", "125", "RGVQueue", false); |
| | | LogHelper.Info($"{task2.S_TASK_NO}> bit2taskOver_LAST å 0"); |
| | | RedisHelper.Add($"RGV.bit2taskOver_LAST", "0", out string msg); |
| | | } |
| | | else if (tklist.Any()) //1mei ä»»å¡ 2 没任å¡ã |
| | | { |
| | |
| | | tag.RGV.taskno1 = tno; |
| | | LogHelper.Info($"{e1017first.S_TASK_NO}>å¼å§åå
¥ task1do>>{e1017first.S_START_LOC}ã"); |
| | | tag.RGV.task1do = Convert.ToUInt16(e1017first.S_START_LOC); |
| | | LogHelper.Info($"{e1017first.S_TASK_NO}> æ´æ°ä»»å¡ã"); |
| | | //tag.RGV.taskend=125 |
| | | if (tag.RGV.bit1taskOver == 1) |
| | | tag.RGV.bit1taskOver = 0; |
| | | LogHelper.Info($"{e1017first.S_TASK_NO}> taskend å125"); |
| | | Conn.é»è®¤Redis.SetValue("RGV.taskend", "125", "RGVQueue", false); |
| | | LogHelper.Info($"{e1017first.S_TASK_NO}> bit1taskOver_LAST å0"); |
| | | RedisHelper.Add($"RGV.bit1taskOver_LAST", "0", out string msg); |
| | | LogHelper.Info($"{e1017first.S_TASK_NO}> taskend å125"); |
| | | //tag.RGV.taskend=125 |
| | | Conn.é»è®¤Redis.SetValue("RGV.taskend", "125", "RGVQueue", false); |
| | | LogHelper.Info($"{e1017first.S_TASK_NO}> æ´æ°ä»»å¡ã"); |
| | | e1017first.S_B_STATE = "å·²æ¨é"; |
| | | taskservice.Update(e1017first); |
| | | } |
| | |
| | | tag.RGV.taskno2 = Convert.ToUInt32(t2.S_TASK_NO.Substring(4)); |
| | | LogHelper.Info($"{t2.S_TASK_NO}> taskno2 {Convert.ToUInt32(t2.S_TASK_NO.Substring(4))}ãä»»å¡å·ã"); |
| | | tag.RGV.task2do = Convert.ToUInt16(t2.S_START_LOC); |
| | | LogHelper.Info($"{t2.S_TASK_NO}> bit2taskOver_LAST å 0"); |
| | | RedisHelper.Add($"RGV.bit2taskOver_LAST", "0", out string msg); |
| | | if (tag.RGV.bit2taskOver == 1) |
| | | tag.RGV.bit2taskOver = 0; |
| | | LogHelper.Info($"{t2.S_TASK_NO}> end å 125"); |
| | | Conn.é»è®¤Redis.SetValue("RGV.taskend", "125", "RGVQueue", false); |
| | | LogHelper.Info($"{t2.S_TASK_NO}> bit2taskOver_LAST å 0"); |
| | | RedisHelper.Add($"RGV.bit2taskOver_LAST", "0", out string msg); |
| | | t2.S_B_STATE = "å·²æ¨é"; |
| | | taskservice.Update(t2); |
| | | } |
| | |
| | | foreach (var ssx in new string[] { "1003", "1005", "1011", "1013" }) |
| | | { |
| | | var RArrive = (System.UInt16)System.Convert.ChangeType(Conn.é»è®¤Redis.GetValue($"FNK1003051113.RArrive{ssx}"), typeof(System.UInt16)); |
| | | var RArriveLast = (System.UInt16)System.Convert.ChangeType(Conn.é»è®¤Redis.GetValue($"FNK1003051113.RArrive{ssx}_LAST"), typeof(System.UInt16)); |
| | | LogHelper.Info($" FNK1003051113.RArrive{ssx}>{RArrive} && FNK1003051113.RArrive{ssx}_LAST >{RArriveLast}"); |
| | | if (RArrive == 1 && RArriveLast == 0) |
| | | //var RArriveLast = (System.UInt16)System.Convert.ChangeType(Conn.é»è®¤Redis.GetValue($"FNK1003051113.RArrive{ssx}_LAST"), typeof(System.UInt16)); |
| | | var wArriveOver = (System.UInt16)System.Convert.ChangeType(Conn.é»è®¤Redis.GetValue($"FNK1003051113.wArrive{ssx}Over"), typeof(System.UInt16)); |
| | | var rReleaseOver = (System.UInt16)System.Convert.ChangeType(Conn.é»è®¤Redis.GetValue($"FNK1003051113.rRelease{ssx}Over"), typeof(System.UInt16)); |
| | | var WRelease = (System.UInt16)System.Convert.ChangeType(Conn.é»è®¤Redis.GetValue($"FNK1003051113.WRelease{ssx}"), typeof(System.UInt16)); |
| | | var RtrayCode = (System.String)System.Convert.ChangeType(Conn.é»è®¤Redis.GetValue($"SSX1003051113.R{ssx}Barcode"), typeof(System.String)); |
| | | var rdisTcode = RedisHelper.Get<string>($"Arrive{ssx}BarcodeLast", out string msg); |
| | | // åäºç©ºæ¡å°ä½çæçå·è®°å½ï¼ 妿䏿¬¡ä¿¡å·æ¥äºï¼æçå·ä¸ä¸è´å°±åï¼ä¸è´å°±ä¸åï¼é²æ¢å ç¹æ®åå 被æ¸
é¤éæ°è§¦åï¼å¯¼è´åééå¤çé®é¢ã |
| | | LogHelper.Info($@" æçå·ï¼{RtrayCode} redisæçå·ï¼{rdisTcode} 空å°ä½ RArrive{ssx}>{RArrive} æºæ¢°ææ¶å°æ§å°ä½.wArrive{ssx}Over>{wArriveOver} éåºå®æ.rRelease{ssx}Over>{rReleaseOver} æ¾è´§å®æ.WRelease{ssx}>{WRelease}"); |
| | | if (RArrive == 1 && WRelease == 0 /*&& RArriveLast == 0*/ && !string.IsNullOrEmpty(RtrayCode) && RtrayCode != rdisTcode) |
| | | { |
| | | if (ssx == "1005" && tag.SF䏿ä½.WRelease1005 == 0) |
| | | switch (ssx) |
| | | { |
| | | LogHelper.Info($"ssx == 1005 && tag.SF䏿ä½.WRelease1005:{tag.SF䏿ä½.WRelease1005} åf1 2215=1ï¼RArrive1005_LAST=1"); |
| | | tag.FNK1.D2215 = 1; |
| | | //tag.SF䏿ä½.RArrive1005_LAST = 1; |
| | | RedisHelper.Add($"FNK1003051113.RArrive1005_LAST", "1", out string msg); |
| | | |
| | | //tag.SF䏿ä½.WRelease1005 = 0; |
| | | //tag.SF䏿ä½.WSafe0305 = 0; |
| | | case "1003": |
| | | { |
| | | LogHelper.Info($"ssx == 1003 && tag.SF䏿ä½.WRelease1003:{tag.SF䏿ä½.WRelease1003} åf1 2210=1ï¼Arrive{ssx}BarcodeLast={RtrayCode}"); |
| | | tag.FNK1.D2210 = 1; |
| | | } |
| | | break; |
| | | case "1005": |
| | | { |
| | | LogHelper.Info($"ssx == 1005 && tag.SF䏿ä½.WRelease1005:{tag.SF䏿ä½.WRelease1005} åf1 2215=1ï¼Arrive{ssx}BarcodeLast={RtrayCode}"); |
| | | tag.FNK1.D2215 = 1; |
| | | } |
| | | break; |
| | | case "1011": |
| | | { |
| | | LogHelper.Info($"ssx == 1011 && tag.SF䏿ä½.WRelease1011:{tag.SF䏿ä½.WRelease1011} åf2 2210=1ï¼Arrive{ssx}BarcodeLast={RtrayCode}"); |
| | | tag.FNK2.D2210 = 1; |
| | | } |
| | | break; |
| | | case "1013": |
| | | { |
| | | LogHelper.Info($"ssx == 1013 && tag.SF䏿ä½.WRelease1013:{tag.SF䏿ä½.WRelease1013} åf2 2215=1ï¼Arrive{ssx}BarcodeLast={RtrayCode}"); |
| | | tag.FNK2.D2215 = 1; |
| | | } |
| | | break; |
| | | } |
| | | else if (ssx == "1003" && tag.SF䏿ä½.WRelease1003 == 0) |
| | | { |
| | | LogHelper.Info($"ssx == 1003 && tag.SF䏿ä½.WRelease1003:{tag.SF䏿ä½.WRelease1003} åf1 2210=1ï¼RArrive1003_LAST=1"); |
| | | tag.FNK1.D2210 = 1; |
| | | //tag.SF䏿ä½.RArrive1003_LAST = 1; |
| | | |
| | | RedisHelper.Add($"FNK1003051113.RArrive1003_LAST", "1", out string msg); |
| | | |
| | | //tag.SF䏿ä½.WRelease1003 = 0; |
| | | //tag.SF䏿ä½.WSafe0305 = 0; |
| | | } |
| | | else if (ssx == "1013" && tag.SF䏿ä½.WRelease1013 == 0) |
| | | { |
| | | LogHelper.Info($"ssx == 1013 && tag.SF䏿ä½.WRelease1013:{tag.SF䏿ä½.WRelease1013} åf2 2215=1ï¼RArrive1013_LAST=1"); |
| | | tag.FNK2.D2215 = 1; |
| | | //tag.SF䏿ä½.RArrive1013_LAST = 1; |
| | | RedisHelper.Add($"FNK1003051113.RArrive1013_LAST", "1", out string msg); |
| | | |
| | | //tag.SF䏿ä½.WRelease1013 = 0; |
| | | //tag.SF䏿ä½.WSafe1113 = 0; |
| | | } |
| | | else if (ssx == "1011" && tag.SF䏿ä½.WRelease1011 == 0) |
| | | { |
| | | LogHelper.Info($"ssx == 1011 && tag.SF䏿ä½.WRelease1011:{tag.SF䏿ä½.WRelease1011} åf2 2210=1ï¼RArrive1011_LAST=1"); |
| | | tag.FNK2.D2210 = 1; |
| | | //tag.SF䏿ä½.RArrive1011_LAST = 1; |
| | | RedisHelper.Add($"FNK1003051113.RArrive1011_LAST", "1", out string msg); |
| | | |
| | | //tag.SF䏿ä½.WRelease1011 = 0; |
| | | //tag.SF䏿ä½.WSafe1113 = 0; |
| | | } |
| | | RedisHelper.Add($"Arrive{ssx}BarcodeLast", RtrayCode, out msg); |
| | | } |
| | | else if (RArrive == 0 && RArriveLast == 1) |
| | | else if (RArrive == 0) |
| | | { |
| | | LogHelper.Info($"éç½® FNK1003051113.RArrive{ssx}_LAST=0"); |
| | | RedisHelper.Add($"FNK1003051113.RArrive{ssx}_LAST", "0", out string msg); |
| | | //if (RArriveLast == 1) |
| | | //{ |
| | | // LogHelper.Info($"éç½® FNK1003051113.RArrive{ssx}_LAST=0"); |
| | | // RedisHelper.Add($"FNK1003051113.RArrive{ssx}_LAST", "0", out string msg); |
| | | //} |
| | | if (wArriveOver == 1) |
| | | { |
| | | LogHelper.Info($"éç½® FNK1003051113.wArrive{ssx}Over=0"); |
| | | Conn.é»è®¤Redis.SetValue($"FNK1003051113.wArrive{ssx}Over", "0", $"FNK1003051113Queue"); |
| | | } |
| | | //Conn.é»è®¤Redis.SetValue($"FNK1003051113.RArrive{ssx}_LAST", "0", $"FNK1003051113Queue"); |
| | | } |
| | | |
| | | if (WRelease == 1 && rReleaseOver == 1) |
| | | { |
| | | switch (ssx) |
| | | { |
| | | case "1003": |
| | | { |
| | | LogHelper.Info($"读{ssx} WRelease=1&& rReleaseOver=1 读FNK1.D2213{tag.FNK1.D2213}=1? å¹¶å0"); |
| | | tag.FNK1.D2213 = 0; |
| | | } |
| | | break; |
| | | case "1005": |
| | | { |
| | | LogHelper.Info($"读{ssx} WRelease=1&& rReleaseOver=1 读FNK1.D2218{tag.FNK1.D2218}=1? å¹¶å0"); |
| | | tag.FNK1.D2218 = 0; |
| | | } |
| | | break; |
| | | case "1011": |
| | | { |
| | | LogHelper.Info($"读{ssx} WRelease=1&& rReleaseOver=1 读FNK2.D2213{tag.FNK1.D2213}=1? å¹¶å0"); |
| | | tag.FNK2.D2213 = 0; |
| | | } |
| | | break; |
| | | case "1013": |
| | | { |
| | | LogHelper.Info($"读{ssx} WRelease=1&& rReleaseOver=1 读FNK2.D2218{tag.FNK2.D2218}=1? å¹¶å0"); |
| | | tag.FNK2.D2218 = 0; |
| | | } |
| | | break; |
| | | } |
| | | LogHelper.Info($"读{ssx} WRelease=1&& rReleaseOver=1 WRelease å0"); |
| | | Conn.é»è®¤Redis.SetValue($"FNK1003051113.WRelease{ssx}", "0", $"FNK1003051113Queue"); |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | | public void ThreadFNK1Over(Tag tag) |
| | | { |
| | | Console.WriteLine($"ThreadFNK1Over =====>"); |
| | | LogHelper.Info($" FN1 D2217>{tag.FNK1.D2217} D2217LAST>{tag.FNK1.D2217_LAST} D2215>{tag.FNK1.D2215} D2216>{tag.FNK1.D2216} D2215>{tag.FNK1.D2215}"); |
| | | LogHelper.Info($" FN1 D2217>{tag.FNK1.D2217} D2217LAST>{tag.FNK1.D2217_LAST} D2215>{tag.FNK1.D2215} D2216>{tag.FNK1.D2216} D2218>{tag.FNK1.D2218}"); |
| | | //LogHelper.Info($" FN1 .D2217=1,2217_LAST=0 å 2215=0ï¼D2217_LAST=1ï¼WRelease1005=1 RArrive1005_LAST=0"); |
| | | if (tag.FNK1.D2217 == 1 && tag.FNK1.D2217_LAST == 0) |
| | | { |
| | | tag.FNK1.D2215 = 0; |
| | | //tag.FNK1.D2215 = 0; |
| | | tag.FNK1.D2218 = 1; |
| | | //tag.FNK1.D2212_LAST = 1; |
| | | RedisHelper.Add($"påé£ç§1ä¸çº¿.D2217_LAST", "1", out string msg); |
| | | |
| | | tag.SF䏿ä½.WRelease1005 = 1; |
| | | tag.SF䏿ä½.WSafe0305 = 1; |
| | | System.Threading.Thread.Sleep(1000); |
| | | RedisHelper.Add($"FNK1003051113.RArrive1005_LAST", "0", out msg); |
| | | LogHelper.Info($" FN1 .D2217=1,2217_LAST=0 å 2215=0ï¼D2217_LAST=1ï¼WRelease1005=1 RArrive1005_LAST=0"); |
| | | //RedisHelper.Add($"FNK1003051113.RArrive1005_LAST", "0", out msg); |
| | | RedisHelper.Add($"Arrive1005BarcodeLast", "0", out msg); |
| | | LogHelper.Info($" FN1 .D2217=1,2217_LAST=0 å 2218=1ï¼D2217_LAST=1ï¼WRelease1005=1 Arrive1005BarcodeLast=0"); |
| | | } |
| | | else if (tag.FNK1.D2217 == 0 && tag.FNK1.D2217_LAST == 1) |
| | | { |
| | |
| | | if (tag.FNK1.D2216 == 1) |
| | | { |
| | | tag.FNK1.D2215 = 0; |
| | | |
| | | LogHelper.Info($" påé£ç§1ä¸çº¿ 读D2216=1 åD2215 =0"); |
| | | tag.SF䏿ä½.wArrive1005Over = 1; |
| | | LogHelper.Info($" påé£ç§1ä¸çº¿ 读D2216=1 åD2215 =0ï¼ åæºæ¢°ææ¶å°1005 =1"); |
| | | } |
| | | |
| | | LogHelper.Info($" FN1 D2212>{tag.FNK1.D2212} D2212LAST>{tag.FNK1.D2212_LAST} D2210>{tag.FNK1.D2210} D2211>{tag.FNK1.D2211} D2210>{tag.FNK1.D2210}"); |
| | | LogHelper.Info($" FN1 D2212>{tag.FNK1.D2212} D2212LAST>{tag.FNK1.D2212_LAST} D2210>{tag.FNK1.D2210} D2211>{tag.FNK1.D2211} D2213>{tag.FNK1.D2213}"); |
| | | if (tag.FNK1.D2212 == 1 && tag.FNK1.D2212_LAST == 0) |
| | | { |
| | | tag.FNK1.D2210 = 0; |
| | | tag.FNK1.D2213 = 1; |
| | | //tag.FNK1.D2210 = 0; |
| | | //tag.FNK1.D2217_LAST = 1; |
| | | RedisHelper.Add($"påé£ç§1ä¸çº¿.D2212_LAST", "1", out string msg); |
| | | tag.SF䏿ä½.WRelease1003 = 1; |
| | | tag.SF䏿ä½.WSafe0305 = 1; |
| | | System.Threading.Thread.Sleep(1000); |
| | | RedisHelper.Add($"FNK1003051113.RArrive1003_LAST", "0", out msg); |
| | | LogHelper.Info($" FN1 .D2212=1,2212_LAST=0 å 2210=0ï¼D2212_LAST=1ï¼WRelease1003=1 RArrive1003_LAST=0"); |
| | | //RedisHelper.Add($"FNK1003051113.RArrive1003_LAST", "0", out msg); |
| | | RedisHelper.Add($"Arrive1003BarcodeLast", "0", out msg); |
| | | LogHelper.Info($" FN1 .D2212=1,2212_LAST=0 å D2213=1ï¼D2212_LAST=1ï¼WRelease1003=1 Arrive1003BarcodeLast=0"); |
| | | } |
| | | //else if (tag.FNK1.D2211 == 1) |
| | | // tag.FNK1.D2210 = 0; |
| | |
| | | if (tag.FNK1.D2211 == 1) |
| | | { |
| | | tag.FNK1.D2210 = 0; |
| | | |
| | | LogHelper.Info($" påé£ç§1ä¸çº¿ 读D2211=1 åD2210 =0"); |
| | | tag.SF䏿ä½.wArrive1003Over = 1; |
| | | LogHelper.Info($" påé£ç§1ä¸çº¿ 读D2211=1 åD2210 =0 åæºæ¢°ææ¶å°ç©ºå°1003=1"); |
| | | } |
| | | } |
| | | |
| | | public void ThreadFNK2Over(Tag tag) |
| | | { |
| | | Console.WriteLine($"ThreadFNK2Over =====>"); |
| | | LogHelper.Info($" FN2 D2217>{tag.FNK2.D2217} D2217LAST>{tag.FNK2.D2217_LAST} D2215>{tag.FNK2.D2215} D2216>{tag.FNK2.D2216} D2215>{tag.FNK2.D2215}"); |
| | | LogHelper.Info($" FN2 D2217>{tag.FNK2.D2217} D2217LAST>{tag.FNK2.D2217_LAST} D2215>{tag.FNK2.D2215} D2216>{tag.FNK2.D2216} D2218>{tag.FNK2.D2218}"); |
| | | if (tag.FNK2.D2217 == 1 && tag.FNK2.D2217_LAST == 0) |
| | | { |
| | | tag.FNK2.D2215 = 0; |
| | | //tag.FNK2.D2215 = 0; |
| | | tag.FNK2.D2218 = 1; |
| | | //tag.FNK2.D2212_LAST = 1; |
| | | RedisHelper.Add($"påé£ç§2ä¸çº¿.D2217_LAST", "1", out string msg); |
| | | |
| | | tag.SF䏿ä½.WRelease1013 = 1; |
| | | tag.SF䏿ä½.WSafe1113 = 1; |
| | | System.Threading.Thread.Sleep(1000); |
| | | RedisHelper.Add($"FNK1003051113.RArrive1013_LAST", "0", out msg); |
| | | LogHelper.Info($" FN2 .D2217=1,2217_LAST=0 å 2215=0ï¼D2217_LAST=1ï¼WRelease1013=1 RArrive1013_LAST=0"); |
| | | //RedisHelper.Add($"FNK1003051113.RArrive1013_LAST", "0", out msg); |
| | | RedisHelper.Add($"Arrive1013BarcodeLast", "0", out msg); |
| | | LogHelper.Info($" FN2 .D2217=1,2217_LAST=0 å 2218=1ï¼D2217_LAST=1ï¼WRelease1013=1 Arrive1013BarcodeLast=0"); |
| | | } |
| | | else if (tag.FNK2.D2217 == 0 && tag.FNK2.D2217_LAST == 1) |
| | | { |
| | |
| | | if (tag.FNK2.D2216 == 1) |
| | | { |
| | | tag.FNK2.D2215 = 0; |
| | | |
| | | LogHelper.Info($" påé£ç§2ä¸çº¿ 读D2216=1 åD2215 =0"); |
| | | tag.SF䏿ä½.wArrive1013Over = 1; |
| | | LogHelper.Info($" påé£ç§2ä¸çº¿ 读D2216=1 åD2215 =0 åæºæ¢°ææ¶å°ç©ºå°1013=1"); |
| | | } |
| | | |
| | | LogHelper.Info($" FN2 D2212>{tag.FNK2.D2212} D2212LAST>{tag.FNK2.D2212_LAST} D2210>{tag.FNK2.D2210} D2211>{tag.FNK2.D2211} D2210>{tag.FNK2.D2210}"); |
| | | LogHelper.Info($" FN2 D2212>{tag.FNK2.D2212} D2212LAST>{tag.FNK2.D2212_LAST} D2210>{tag.FNK2.D2210} D2211>{tag.FNK2.D2211} D2213>{tag.FNK2.D2213}"); |
| | | if (tag.FNK2.D2212 == 1 && tag.FNK2.D2212_LAST == 0) |
| | | { |
| | | tag.FNK2.D2210 = 0; |
| | | //tag.FNK2.D2210 = 0; |
| | | tag.FNK2.D2213 = 1; |
| | | //tag.FNK2.D2217_LAST = 1; |
| | | RedisHelper.Add($"påé£ç§2ä¸çº¿.D2212_LAST", "1", out string msg); |
| | | |
| | | tag.SF䏿ä½.WRelease1011 = 1; |
| | | tag.SF䏿ä½.WSafe1113 = 1; |
| | | System.Threading.Thread.Sleep(1000); |
| | | RedisHelper.Add($"FNK1003051113.RArrive1011_LAST", "0", out msg); |
| | | LogHelper.Info($" FN2 .D2212=1,2212_LAST=0 å 2210=0ï¼D2212_LAST=1ï¼WRelease1011=1 RArrive1011_LAST=0"); |
| | | //RedisHelper.Add($"FNK1003051113.RArrive1011_LAST", "0", out msg); |
| | | RedisHelper.Add($"Arrive1011BarcodeLast", "0", out msg); |
| | | LogHelper.Info($" FN2 .D2212=1,2212_LAST=0 å 2213=1ï¼D2212_LAST=1ï¼WRelease1011=1 Arrive1011BarcodeLast=0"); |
| | | } |
| | | else if (tag.FNK2.D2212 == 0 && tag.FNK2.D2212_LAST == 1) |
| | | { |
| | |
| | | if (tag.FNK2.D2211 == 1) |
| | | { |
| | | tag.FNK2.D2210 = 0; |
| | | LogHelper.Info($" påé£ç§2ä¸çº¿ 读D2211=1 åD2210 =0"); |
| | | tag.SF䏿ä½.wArrive1011Over = 1; |
| | | LogHelper.Info($" påé£ç§2ä¸çº¿ 读D2211=1 åD2210 =0 åæºæ¢°ææ¶å°ç©ºå°1011 wArrive1011Over=1"); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | public void Thread1019Down(Tag tag) |
| | |
| | | } |
| | | public void Thread2030Down(Tag tag) |
| | | { |
| | | |
| | | Console.WriteLine($"SA2030 ä»»å¡ç¶æï¼ =====>"); |
| | | Console.WriteLine($"SA2030 ä»»å¡ç¶æï¼{tag.SA2030.RtaskState}- 空é²{tag.SA2030.R5空é²} - barcode:{tag.SA2030.Ræçç }"); |
| | | |
| | | |
| | | |
| | | } |
| | | |
| | | public void ResolveMesTask() |
| | | { |
| | | TaskRepository taskservice = new TaskRepository(); |
| | | var tasks = taskservice.FindList(x => (x.S_B_STATE == "MES" || x.S_B_STATE == "People") && x.N_PRIORITY == -88); |
| | | var VERXs = Settings.deviceInfos?.FindAll(x => x.deviceType == 2); |
| | | //if (VERXs.Any()) |
| | | foreach (var task in tasks) |
| | | { |
| | | LogHelper.Info($"è§£éMESä»»å¡ ->{task.S_TASK_NO} "); |
| | | var sx = VERXs?.Find(x => x.location.Contains(task.S_END_LOC)); |
| | | LogHelper.Info($"è§£éMESä»»å¡ ->{task.S_TASK_NO} {(sx == null ? "é" : "æ¯")}æ»è£
æºå¨äººä»»å¡"); |
| | | if (sx == null) |
| | | { |
| | | LogHelper.Info($"è§£éMESä»»å¡ ->{task.S_TASK_NO} ç´æ¥çæå¯¹åºä»»å¡"); |
| | | //ç´æ¥çæå¯¹åºä»»å¡ã |
| | | var res = TaskProcess.CreateTask(task.S_TASK_NO, task.S_START_LOC, task.S_END_LOC, task.S_TYPE, 6, task.S_CNTRS?.Split(',').ToList() ?? new List<string>()); |
| | | |
| | | LogHelper.Info($"è§£éMESä»»å¡ ->{task.S_TASK_NO} ç´æ¥çæå¯¹åºä»»å¡ ç»æï¼{res}"); |
| | | if (res) |
| | | { |
| | | LogHelper.Info($"è§£éMESä»»å¡ ->{task.S_TASK_NO} ä¿®æ¹æ è¯"); |
| | | //task.N_PRIORITY = 0; |
| | | taskservice.dbcontext.Set<TaskEntity>().Attach(task); |
| | | taskservice.dbcontext.Entry(task).Property(x => x.N_PRIORITY).CurrentValue = 0; |
| | | taskservice.dbcontext.Entry(task).Property(x => x.N_PRIORITY).IsModified = true; |
| | | taskservice.dbcontext.SaveChanges(); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | var sindex = sx.location.ToList().IndexOf(task.S_END_LOC); |
| | | LocRepository locRepository = new LocRepository(); |
| | | //çæè·³è·ä»»å¡ã -- æçè´§ä½è¡¨ã |
| | | var t1s = taskservice.FindList(x => x.S_SRC_NO == task.S_TASK_NO); |
| | | |
| | | LogHelper.Info($"è§£éMESä»»å¡ ->{task.S_TASK_NO} æ¥æ¾æ¯å¦æå·²çæä»»å¡ï¼{t1s != null}"); |
| | | if (t1s.Any()) |
| | | { |
| | | var t1 = t1s.OrderBy(x => x.T_CREATE).LastOrDefault(); |
| | | if (t1.S_END_LOC == task.S_END_LOC) |
| | | { |
| | | task.N_PRIORITY = 0; |
| | | task.S_B_STATE = "MES_宿"; |
| | | taskservice.Update(task); |
| | | continue; |
| | | } |
| | | if (t1.S_B_STATE == "宿") |
| | | { |
| | | //1.ç»ç¹æ¯å¦ææçã 便®æ¯ç»ç¹ç任塿¯ ä½ä¸ºç»ç¹ï¼è¿æ¯èµ·ç¹ã |
| | | //var ec = taskservice.FindList(x => (x.S_START_LOC == task.S_START_LOC || x.S_END_LOC == task.S_END_LOC) /*&& DateTime.Now.Subtract(x.T_CREATE).TotalHours < 5*/).OrderByDescending(x => x.T_CREATE).FirstOrDefault();//($"select top 1 * from TN_TASK WHERE S_START_LOC='{task.S_END_LOC}' OR S_END_LOC='{task.S_END_LOC}' ORDER BY T_CREATE DESC"); |
| | | //var ec = taskservice.FindList(x => x.S_START_LOC == task.S_START_LOC && x.S_END_LOC == task.S_START_LOC, new Common.Data.Pagination |
| | | // { |
| | | // page = 1, |
| | | // sidx = "T_CREATE", |
| | | // sord = "desc", |
| | | // rows = 1 |
| | | // }).FirstOrDefault(); |
| | | //TaskEntity ec = null; |
| | | //var dev = Conn.é»è®¤Redis.GetValue(sx.deviceName + "." + (sindex == 0 ? "D1224" : "D1225")); |
| | | //if (dev?.Trim() == "1") |
| | | // ec = taskservice.FindList(x => x.S_END_LOC == task.S_END_LOC && x.S_B_STATE == "宿", new Common.Data.Pagination |
| | | // { |
| | | // page = 1, |
| | | // sidx = "T_CREATE", |
| | | // sord = "desc", |
| | | // rows = 1 |
| | | // }).FirstOrDefault(); |
| | | bool canReq = true; |
| | | var tf = Conn.é»è®¤Redis.GetValue(sx.deviceName + ".D1202"); |
| | | var V = sx.location.ToList().FindIndex(x => x == task.S_END_LOC) == 0; |
| | | var tf2 = int.Parse(string.IsNullOrEmpty(tf) ? "0" : tf); |
| | | canReq = TcpServer.GetBitdata(tf2, (V ? 2 : 3)) == 1; |
| | | //if (canReq) |
| | | // ec = taskservice.FindList(x => x.S_END_LOC == task.S_END_LOC && x.S_B_STATE == "宿", new Common.Data.Pagination |
| | | // { |
| | | // page = 1, |
| | | // sidx = "T_CREATE", |
| | | // sord = "desc", |
| | | // rows = 1 |
| | | // }).FirstOrDefault(); |
| | | if (t1.S_START_LOC == task.S_START_LOC && canReq)//!= task.S_END_LOC) |
| | | { |
| | | //ç¬¬äºæ®µã |
| | | LocEntity endLoc = null; |
| | | var di = sx; |
| | | if (di != null) |
| | | { |
| | | //foreach (var ssloc in di.deviceNo) |
| | | { |
| | | var ssloc = di.deviceNo[1]; |
| | | var endloc = locRepository.FindEntity(x => x.S_LOC_CODE == ssloc); |
| | | if (endloc != null && endloc.N_CURRENT_NUM == 0 && endloc.S_LOCK_STATE.Trim() == "æ ") |
| | | { |
| | | endLoc = endloc; |
| | | //break; |
| | | } |
| | | } |
| | | if (endLoc != null) |
| | | { |
| | | var res = TaskProcess.CreateTask(task.S_TASK_NO, task.S_END_LOC, endLoc.S_LOC_CODE, task.S_TYPE + "ä¸ç©º", 7, "NONE".Split(',').ToList()); |
| | | if (res) |
| | | { |
| | | task.N_PRIORITY = 0; taskservice.Update(task); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | else |
| | | { |
| | | if (t1.S_START_LOC != task.S_START_LOC) |
| | | { |
| | | t1 = taskservice.FindEntity(x => x.S_SRC_NO == task.S_TASK_NO && x.S_START_LOC == task.S_START_LOC && x.S_B_STATE == "宿"); |
| | | } |
| | | var res = TaskProcess.CreateTask(task.S_TASK_NO, t1.S_END_LOC, task.S_END_LOC, task.S_TYPE + "补满", 6, task.S_CNTRS.Split(',').ToList()); |
| | | if (res) |
| | | { |
| | | task.N_PRIORITY = 0; taskservice.Update(task); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | else |
| | | { |
| | | LogHelper.Info($"è§£éMESä»»å¡ ->{task.S_TASK_NO} çéçæç¬¬ä¸æ®µ ä»»å¡ã"); |
| | | //çæç¬¬ä¸æ®µã |
| | | LocEntity endLoc = null; |
| | | var di = sx; |
| | | if (di != null) |
| | | { |
| | | //foreach (var ssloc in di.deviceNo) |
| | | { |
| | | var ssloc = di.deviceNo[0]; |
| | | var endloc = locRepository.FindEntity(x => x.S_LOC_CODE == ssloc); |
| | | if (endloc != null && endloc.N_CURRENT_NUM == 0 && endloc.S_LOCK_STATE.Trim() == "æ ") |
| | | { |
| | | endLoc = endloc; |
| | | //break; |
| | | } |
| | | } |
| | | if (endLoc != null) |
| | | { |
| | | LogHelper.Info($"è§£éMESä»»å¡ ->{task.S_TASK_NO} åå»ºç¬¬ä¸æ®µ ä»»å¡ã"); |
| | | var res = TaskProcess.CreateTask(task.S_TASK_NO, task.S_START_LOC, endLoc.S_LOC_CODE, task.S_TYPE + "满转", 8, task.S_CNTRS.Split(',').ToList()); |
| | | |
| | | LogHelper.Info($"è§£éMESä»»å¡ ->{task.S_TASK_NO} åå»ºç¬¬ä¸æ®µ ä»»å¡ãç»æï¼{res}"); |
| | | if (res) |
| | | { |
| | | task.N_PRIORITY = 0; taskservice.Update(task); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | public HkReturnResult OperateHKTaskStatus(HaiKangOrderInfo model) |
| | | { |
| | | // æ¥è¯¢ä»»å¡ï¼æ ¹æ®ä»»å¡å· |
| | | //var wcsTask = WCSHelper.GetTask(model.taskCode); |
| | | ITaskRepository MainMissionService = new TaskRepository(); |
| | | var wcsTask = MainMissionService.FindEntity(x => model.taskCode == x.S_TASK_NO); |
| | | if (wcsTask != null) |
| | | { |
| | | if (!string.IsNullOrWhiteSpace(model.method)) |
| | | { |
| | | ILocRepository locrep = new LocRepository(); |
| | | var startloc = locrep.FindEntity(x => x.S_LOC_CODE == wcsTask.S_START_LOC); |
| | | var endLoc = locrep.FindEntity(x => x.S_LOC_CODE == wcsTask.S_END_LOC); |
| | | |
| | | List<string> cntrs = wcsTask.S_CNTRS.Split(',').ToList(); |
| | | bool bobe = false; |
| | | //model.method = model.method?.ToLower(); |
| | | switch (model.method) |
| | | { |
| | | case "start": |
| | | LogHelper.Info($"海康车任å¡ç¶æåæ´ä¸ºæ§è¡ï¼ä»»å¡å·ä¸ºï¼{model.taskCode}", "agvæåäº¤äºæ¥å¿"); |
| | | if (wcsTask.S_B_STATE.Trim() == "å·²æ¨é") |
| | | { |
| | | wcsTask.S_B_STATE = "æ§è¡ä¸"; |
| | | wcsTask.T_START_TIME = DateTime.Now; |
| | | MainMissionService.Update(wcsTask); |
| | | bobe = true; |
| | | } |
| | | break; |
| | | case "outBin": |
| | | case "outbin": |
| | | model.method = model.method?.ToLower(); |
| | | LogHelper.Info($"海康车任å¡ç¶æåæ´ä¸ºåè´§å®æï¼ä»»å¡å·ä¸ºï¼{model.taskCode}", "agvæåäº¤äºæ¥å¿"); |
| | | wcsTask.S_B_STATE = "åè´§å®æ"; |
| | | |
| | | startloc.N_CURRENT_NUM = 0; |
| | | startloc.S_LOCK_STATE = "æ "; |
| | | startloc.T_MODIFY = DateTime.Now; |
| | | //ILocContainerRepository locContainerRepository = new LocContainerRepository(); |
| | | ////var cnr = locContainerRepository.FindList(x => cntrs.Contains(x.S_CNTR_CODE.Trim()) && x.S_LOC_CODE == wcsTask.S_START_LOC); |
| | | //locContainerRepository.Delete(x => cntrs.Contains(x.S_CNTR_CODE.Trim()) && x.S_LOC_CODE == wcsTask.S_START_LOC); |
| | | MainMissionService.Update(wcsTask); |
| | | locrep.Update(startloc); |
| | | |
| | | bobe = true; |
| | | var device = Settings.deviceInfos.Find(x => x.location.Contains(wcsTask.S_START_LOC)); |
| | | if (device != null) |
| | | { |
| | | if (device.deviceType == 1) |
| | | { |
| | | if (device.deviceName.Contains("ç»´å¸å°æè")) |
| | | { //å¸è´§è¿è¡æ¸
空ï¼è§¦åæ«ç |
| | | var inde = device.location.ToList().FindIndex(x => x == wcsTask.S_START_LOC) == 0; |
| | | string V = inde ? "R05" : "R06"; |
| | | Conn.é»è®¤Redis.SetValue(device.deviceName + "." + V, "true", device.deviceName + "Queue", false); |
| | | |
| | | TcpServer.TrayIps.Remove(device.deviceNo[inde ? 0 : 1]); |
| | | } |
| | | } |
| | | else if (device.deviceType == 2) |
| | | { |
| | | //Task.Run(() => |
| | | //{ |
| | | // var inde = device.location.ToList().FindIndex(x => x == wcsTask.S_START_LOC) == 0; |
| | | // string V = inde ? "D1224" : "D1225"; |
| | | // Conn.é»è®¤Redis.SetValue(device.deviceName + "." + V, "0", device.deviceName + "Queue"); |
| | | //}); |
| | | } |
| | | } |
| | | //LocationHelper.UnLockLoc(wcsTask.S_START_LOC); |
| | | break; |
| | | case "end": |
| | | LogHelper.Info($"海康车任å¡ç¶æåæ´ä¸ºå®æï¼ä»»å¡å·ä¸ºï¼{model.taskCode}", "agvæåäº¤äºæ¥å¿"); |
| | | wcsTask.S_B_STATE = "宿"; |
| | | wcsTask.T_END_TIME = DateTime.Now; |
| | | |
| | | bobe = true; |
| | | //ILocContainerRepository locContainerRepository2 = new LocContainerRepository(); |
| | | //List<LocContainerEntity> llls = new List<LocContainerEntity>(); |
| | | //foreach (var c in cntrs) |
| | | //{ |
| | | // var action = new LocContainerEntity() |
| | | // { |
| | | // S_ID = Guid.NewGuid().ToString(), |
| | | // S_STATE = "ç¼è¾", |
| | | // T_CREATE = DateTime.Now, |
| | | // T_MODIFY = DateTime.Now, |
| | | |
| | | // S_LOC_CODE = endLoc.S_LOC_CODE, |
| | | // S_CNTR_CODE = c, |
| | | // S_TYPE = "", |
| | | // }; |
| | | // llls.Add(action); |
| | | //} |
| | | |
| | | endLoc.S_LOCK_STATE = "æ "; |
| | | endLoc.N_CURRENT_NUM = 1; |
| | | endLoc.T_MODIFY = DateTime.Now; |
| | | MainMissionService.Update(wcsTask); |
| | | if (Settings.deviceInfos.Find(x => x.deviceType == 2 && (/*x.location.Contains(wcsTask.S_END_LOC)||*/x.deviceNo.Contains(wcsTask.S_END_LOC))) != null) |
| | | locrep.Update(endLoc); |
| | | //locContainerRepository2.Insert(llls); |
| | | |
| | | var device2 = Settings.deviceInfos.Find(x => x.location.Contains(wcsTask.S_END_LOC)); |
| | | if (device2 != null) |
| | | { |
| | | if (device2.deviceType == 1) |
| | | { |
| | | if (device2.deviceName.Contains("ç»´å¸å°æè")) |
| | | { |
| | | //string V = device2.location.ToList().FindIndex(x => x == wcsTask.S_START_LOC) == 0 ? "R10" : "R11"; |
| | | //Conn.é»è®¤Redis.SetValue(device2.deviceName + "." + V, "true", device2.deviceName + "Queue"); |
| | | //å¸è´§ååæçåèµ°ã ç¶åè§¦åæ«ç è¿è¡æ ¡éªã |
| | | var inde = device2.location.ToList().FindIndex(x => x == wcsTask.S_END_LOC) == 0; |
| | | //string V = inde ? "R05" : "R06"; |
| | | //Conn.é»è®¤Redis.SetValue(device2.deviceName + "." + V, "true", device2.deviceName + "Queue"); |
| | | string V2 = inde ? "R10_LAST" : "R11_LAST"; |
| | | //Conn.é»è®¤Redis.SetValue(device2.deviceName + "." + V2, "true", device2.deviceName + "Queue"); |
| | | |
| | | GZ.Modular.Redis.RedisHelper.Add(device2.deviceName + "." + V2, "true", out string msg1); |
| | | TcpServer.TrayIps.Remove(device2.deviceNo[inde ? 0 : 1]); |
| | | } |
| | | } |
| | | else if (device2.deviceType == 2) |
| | | { |
| | | if (device2.deviceName.Contains("Jsæ·é¡º")) |
| | | { |
| | | Task.Run(() => |
| | | { |
| | | var inde = device2.location.ToList().FindIndex(x => x == wcsTask.S_END_LOC) == 0; |
| | | string V = inde ? "D1224" : "D1225"; |
| | | Conn.é»è®¤Redis.SetValue(device2.deviceName + "." + V, "1", device2.deviceName + "Queue"); |
| | | }); |
| | | |
| | | var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/202", JsonConvert.SerializeObject(new |
| | | { |
| | | sceneType = 3, |
| | | cntrCode = cntrs.FirstOrDefault() |
| | | })); |
| | | //if (device2.deviceName.Contains("1")) |
| | | //{ |
| | | // if (inde) tag.Js1.D1224 = 1; |
| | | // else tag.Js1.D1225 = 1; |
| | | //}else |
| | | //{ |
| | | // if (inde) tag.Js2.D1224 = 1; |
| | | // else tag.Js2.D1225 = 1; |
| | | //} |
| | | } |
| | | var ssloc = device2.deviceNo[1]; |
| | | var endloc = locrep.FindEntity(x => x.S_LOC_CODE == ssloc); |
| | | LogHelper.Info($"æ·é¡ºå¸è´§åï¼ æ¥çç¼åä½ {ssloc}-{endloc?.N_CURRENT_NUM}>0? åç³è¯·mesæ¬èµ°ã"); |
| | | if (endloc != null && endloc.N_CURRENT_NUM == 1) |
| | | { |
| | | var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/200", JsonConvert.SerializeObject(new |
| | | { |
| | | requestType = 3, |
| | | startBit = ssloc |
| | | })); |
| | | LogHelper.Info($"{ssloc}ç³è¯·mesä»»å¡ç»æ{str}"); |
| | | } |
| | | } |
| | | } |
| | | |
| | | //LocationMethod.JudgeLocation(wcsTask); |
| | | break; |
| | | case "cancel": |
| | | LogHelper.Info($"海康车任å¡ç¶æåæ´ä¸ºåæ¶ï¼ä»»å¡å·ä¸ºï¼{model.taskCode}", "agvæåäº¤äºæ¥å¿"); |
| | | wcsTask.S_B_STATE = "åæ¶"; |
| | | //startloc.S_LOCK_STATE = "æ "; |
| | | //endLoc.S_LOCK_STATE = "æ "; |
| | | MainMissionService.Update(wcsTask); |
| | | TaskActRepository taskActRepository = new TaskActRepository(); |
| | | var tare = taskActRepository.FindList(x => x.S_TASK_NO == wcsTask.S_TASK_NO); |
| | | if (tare.Any()) |
| | | { |
| | | if (tare.Find(x => x.S_ACTION_CODE == "outbin") == null) |
| | | { |
| | | startloc.S_LOCK_STATE = "æ "; |
| | | endLoc.S_LOCK_STATE = "æ "; |
| | | locrep.Update(startloc); |
| | | locrep.Update(endLoc); |
| | | } |
| | | else if (tare.Find(x => x.S_ACTION_CODE == "end") == null) |
| | | { |
| | | endLoc.S_LOCK_STATE = "æ "; |
| | | locrep.Update(endLoc); |
| | | } |
| | | } |
| | | |
| | | //locrep.Update(startloc); |
| | | //locrep.Update(endLoc); |
| | | //TaskProcess.OperateStatus(wcsTask, 7); |
| | | //WCSHelper.Fail(wcsTask); |
| | | break; |
| | | case "apply": |
| | | // å¤æè¯¥ä»»å¡çæ¥é©³ä½æ¯å¦æå
¶ä»å
¥åºæåºåºä»»å¡ï¼å¦ææï¼åå¨çä½çå¾
ï¼å¦ææ²¡æï¼åå
¥ |
| | | //TaskisOk(wcsTask); |
| | | break; |
| | | } |
| | | |
| | | if (!string.IsNullOrEmpty(wcsTask.S_SRC_NO)) |
| | | { |
| | | var mestask = MainMissionService.FindEntity(x => x.S_TASK_NO == wcsTask.S_SRC_NO); |
| | | if (mestask != null && bobe) |
| | | { |
| | | if (model.method != "end") |
| | | { |
| | | if (mestask.S_START_LOC == wcsTask.S_START_LOC && mestask.S_B_STATE == "MES") |
| | | Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/201", JsonConvert.SerializeObject(new |
| | | { |
| | | reqCode = wcsTask.S_SRC_NO, |
| | | model.method |
| | | })); |
| | | } |
| | | else |
| | | { |
| | | if (mestask.S_END_LOC != wcsTask.S_END_LOC) |
| | | { |
| | | LogHelper.Info($"{wcsTask.S_SRC_NO}-{wcsTask.S_TASK_NO} ä¸é¶æ®µå®æï¼éç½®è¿è¡äºé¶æ®µã"); |
| | | mestask.N_PRIORITY = -88; |
| | | MainMissionService.Update(mestask); |
| | | } |
| | | else if (mestask.S_B_STATE == "MES") |
| | | { |
| | | var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/201", JsonConvert.SerializeObject(new |
| | | { |
| | | reqCode = wcsTask.S_SRC_NO, |
| | | model.method |
| | | })); |
| | | } |
| | | } |
| | | |
| | | } |
| | | else if (mestask != null && model.method == "cancel") |
| | | { |
| | | if (mestask.S_B_STATE == "MES") |
| | | Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/201", JsonConvert.SerializeObject(new |
| | | { |
| | | reqCode = wcsTask.S_SRC_NO, |
| | | model.method |
| | | })); |
| | | LogHelper.Info($"{wcsTask.S_SRC_NO}-{wcsTask.S_TASK_NO} ä¸é¶æ®µåæ¶ï¼éç½®ç¹ï¼çº¿ç¨å¤çã"); |
| | | mestask.N_PRIORITY = -1; |
| | | mestask.S_B_STATE = "MES_åæ¶"; |
| | | MainMissionService.Update(mestask); |
| | | } |
| | | } |
| | | TaskProcess.AddActionRecord(model.taskCode, model.method, model.eqpCode, model.data, wcsTask.S_START_LOC, wcsTask.S_END_LOC); |
| | | //è°ç¨ç¬¬ä¸æ¹æ¥å£ï¼å¦ææï¼TaskProcess.ReportStatus |
| | | } |
| | | else |
| | | { |
| | | // ææ¶è®¾å®ä¸º0 |
| | | wcsTask.S_B_STATE = "䏿¥ç¶æç©º"; |
| | | //å®å
¨è¯·æ±ç |
| | | //TaskProcess.OperateReq(model.taskCode, wcsTask.N_B_STATE, model.eqpCode, model.data); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | LogHelper.Info($"å½åä»»å¡å·ä»»å¡ä¸åå¨{model.taskCode} agvæåäº¤äºæ¥å¿"); |
| | | return new HkReturnResult { reqCode = model.reqCode, code = 1, message = "è¿ä¸æ¯æä»¬çä»»å¡ã" }; |
| | | } |
| | | return new HkReturnResult { reqCode = model.reqCode, code = 0 }; |
| | | } |
| | | |
| | | public void TaskEverythingRun() |
| | | { |
| | | var host = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()); |
| | | foreach (var ip in host.AddressList) |
| | | { |
| | | if (ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork) |
| | | { |
| | | Console.WriteLine($"ip= {ip.ToString()}"); |
| | | new HttpServer(ip.ToString()).HttpServerRun(); |
| | | new TcpServer(ip.ToString()); |
| | | var server = new EnhancedWebSocketServer($"http://{ip.ToString()}:8809/").StartAsync(); |
| | | //var client = new WebSocketClient($"http://{ip.ToString()}:8809/").ConnectAsync(); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | } |
| | | |
| | | public class HttpServer |
| | | { |
| | | System.Net.HttpListener HttpSvcHost = null; |
| | | |
| | | private readonly string _listenerPrefix = ""; |
| | | public HttpServer(string ip) |
| | | { |
| | | _listenerPrefix = ip; |
| | | } |
| | | public void HttpServerRun() |
| | | { |
| | | HttpSvcHost = new System.Net.HttpListener(); |
| | | HttpSvcHost.AuthenticationSchemes = System.Net.AuthenticationSchemes.Anonymous; |
| | | HttpSvcHost.Prefixes.Add($"http://{_listenerPrefix}:8808/"); |
| | | HttpSvcHost.Start(); |
| | | HttpSvcHost.BeginGetContext(HttpSvcListenerCallback, null); |
| | | } |
| | | |
| | | |
| | | private async void HttpSvcListenerCallback(IAsyncResult ar) |
| | | { |
| | | System.Net.HttpListenerContext context = null; |
| | | var data = DateTime.Now; |
| | | string apth = ""; |
| | | try |
| | | { |
| | | HttpSvcHost.BeginGetContext(HttpSvcListenerCallback, null); |
| | | context = HttpSvcHost.EndGetContext(ar); |
| | | System.Net.HttpListenerRequest request = context.Request; |
| | | System.Net.HttpListenerResponse response = context.Response; |
| | | |
| | | using (var reader = new System.IO.StreamReader(request.InputStream, System.Text.Encoding.UTF8)) |
| | | { |
| | | string requestJson = reader.ReadToEnd(); |
| | | System.Net.HttpStatusCode statusCode = 0; |
| | | apth = request.Url.AbsolutePath; |
| | | string respstr = HttpSvcListenerCallback_he(request.HttpMethod, request.Url.AbsolutePath, requestJson, out statusCode); |
| | | string logContent = ""; |
| | | logContent += $"\r\n[{request.HttpMethod}]{request.Url.AbsolutePath}"; |
| | | logContent += $"\r\n[request]{requestJson}"; |
| | | logContent += $"\r\n[response]{respstr}"; |
| | | _ = Task.Run(() => |
| | | { |
| | | Conn.é»è®¤æ¥å¿?.Info(logContent); |
| | | }); |
| | | byte[] bytstr = Encoding.UTF8.GetBytes(respstr); |
| | | response.StatusCode = (int)statusCode; |
| | | response.SendChunked = false; |
| | | response.ContentLength64 = bytstr.Length; |
| | | //response.OutputStream.Write(bytstr, 0, bytstr.Length); |
| | | if (request.Url.AbsolutePath.ToLower().Contains(".js")) |
| | | response.ContentType = "application/javascript"; |
| | | else if (request.Url.AbsolutePath.ToLower().Contains(".svg")) |
| | | response.ContentType = "image/svg+xml"; |
| | | // 弿¥åå
¥ååº |
| | | await response.OutputStream.WriteAsync(bytstr, 0, bytstr.Length); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | _ = Task.Run(() => |
| | | { |
| | | Conn.é»è®¤æ¥å¿.Error(ex.ToString()); |
| | | }); |
| | | } |
| | | finally |
| | | { |
| | | context?.Response.Close(); |
| | | Console.WriteLine(apth + "<<>>" + DateTime.Now.Subtract(data).TotalMilliseconds); |
| | | } |
| | | } |
| | | private System.String HttpSvcListenerCallback_he(System.String method, System.String path, System.String requestJson, out System.Net.HttpStatusCode statusCode) |
| | | { |
| | | try |
| | | { |
| | | switch (method) |
| | | { |
| | | case "POST": |
| | | { |
| | | switch (path) |
| | | { |
| | | case "/agv/agvCallbackService/agvCallback": |
| | | { |
| | | statusCode = System.Net.HttpStatusCode.OK; |
| | | |
| | | LogHelper.Info("ExecuteState Request-haikangï¼" + requestJson); |
| | | var model = JsonConvert.DeserializeObject<HaiKangOrderInfo>(requestJson); |
| | | AutoThread.Instance.OperateHKTaskStatus(model); |
| | | return JsonConvert.SerializeObject(new HkReturnResult { reqCode = model.reqCode }); |
| | | } |
| | | case "/api/Wcs/CreateTask": |
| | | { |
| | | statusCode = System.Net.HttpStatusCode.OK; |
| | | |
| | | LogHelper.Info("/api/Wcs/CreateTaskï¼" + requestJson); |
| | | var model = JsonConvert.DeserializeObject<ToWMSMES.CreateTask>(requestJson); |
| | | var res = ToWMSMES.CreateTask.CreatemesTask(model); |
| | | return JsonConvert.SerializeObject(res); |
| | | } |
| | | case "/api/Wcs/TestRequestTask": |
| | | { |
| | | statusCode = System.Net.HttpStatusCode.OK; |
| | | LogHelper.Info("/api/Wcs/TestRequestTaskï¼" + requestJson); |
| | | var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/200", requestJson); |
| | | return str; |
| | | } |
| | | case "/api/Wcs/updateStatus": |
| | | { |
| | | statusCode = System.Net.HttpStatusCode.OK; |
| | | LogHelper.Info("/api/Wcs/updateStatusï¼" + requestJson); |
| | | var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/201", requestJson); |
| | | return str; |
| | | } |
| | | case "/api/Wcs/toMes": |
| | | { |
| | | statusCode = System.Net.HttpStatusCode.OK; |
| | | |
| | | LogHelper.Info("/api/Wcs/toMesï¼" + requestJson); |
| | | var str = Settings.apiHelper.Post(Settings.MESbaseUrl + "mom-basic/dataTransmission/json/service/202", requestJson); |
| | | return str; |
| | | } |
| | | case "/api/Wcs/CreatePointTask": |
| | | { |
| | | statusCode = System.Net.HttpStatusCode.OK; |
| | | |
| | | LogHelper.Info("/api/Wcs/CreatepointTaskï¼" + requestJson); |
| | | var model = JsonConvert.DeserializeObject<ToWMSMES.CreateTask>(requestJson); |
| | | var res = ToWMSMES.CreateTask.CreatePointTask(model); |
| | | return JsonConvert.SerializeObject(res); |
| | | } |
| | | } |
| | | break; |
| | | } |
| | | case "GET": |
| | | { |
| | | switch (path) |
| | | { |
| | | case var _ when System.Text.RegularExpressions.Regex.IsMatch(path, @"\.(html|ico|js|css)(\?.*)?$", System.Text.RegularExpressions.RegexOptions.IgnoreCase): |
| | | { |
| | | statusCode = System.Net.HttpStatusCode.OK; |
| | | // å¤å¶å°case ä¸ |
| | | //var _ when System.Text.RegularExpressions.Regex.IsMatch(path, @"\.(html|ico|js|css)(\?.*)?$", System.Text.RegularExpressions.RegexOptions.IgnoreCase) |
| | | var filePath = /*Directory.GetCurrentDirectory() + "\\Static" + "\\" + path.Substring(1);*/System.IO.Path.Combine(Directory.GetCurrentDirectory() + "\\Static", path.Substring(1)); |
| | | return File.ReadAllText(filePath); |
| | | } |
| | | } |
| | | break; |
| | | } |
| | | } |
| | | statusCode = System.Net.HttpStatusCode.NotFound; |
| | | return ""; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Conn.é»è®¤æ¥å¿.Error(ex.ToString()); |
| | | statusCode = System.Net.HttpStatusCode.InternalServerError; |
| | | return ""; |
| | | } |
| | | } |
| | | } |
| | | |
| | | class EnhancedWebSocketServer |
| | | { |
| | | private HttpListener _listener; |
| | | private readonly string _listenerPrefix; |
| | | private readonly ConcurrentDictionary<Guid, WebSocket> _connections = new ConcurrentDictionary<Guid, WebSocket>(); |
| | | private CancellationTokenSource _cts = new CancellationTokenSource(); |
| | | |
| | | public EnhancedWebSocketServer(string url) |
| | | { |
| | | _listenerPrefix = url; |
| | | } |
| | | |
| | | public async Task StartAsync() |
| | | { |
| | | try |
| | | { |
| | | _listener = new HttpListener(); |
| | | _listener.Prefixes.Add(_listenerPrefix); |
| | | _listener.Start(); |
| | | Console.WriteLine($"WebSocketæå¡å¨å·²å¯å¨ï¼çå¬ {_listenerPrefix}"); |
| | | while (!_cts.IsCancellationRequested) |
| | | { |
| | | HttpListenerContext context = await _listener.GetContextAsync(); |
| | | if (context.Request.IsWebSocketRequest) |
| | | { |
| | | var wsContext = await context.AcceptWebSocketAsync(null); |
| | | var connectionId = Guid.NewGuid(); |
| | | _connections[connectionId] = wsContext.WebSocket; |
| | | _ = HandleConnectionAsync(connectionId, wsContext.WebSocket, _cts.Token); |
| | | } |
| | | else |
| | | { |
| | | context.Response.StatusCode = 400; |
| | | context.Response.Close(); |
| | | } |
| | | } |
| | | } |
| | | catch (Exception ex) when (ex is HttpListenerException || ex is ObjectDisposedException) |
| | | { |
| | | // æå¡å¨åæ¢æ¶çæ£å¸¸å¼å¸¸ |
| | | Console.WriteLine("æå¡å¨æ£å¨åæ¢..."); |
| | | } |
| | | } |
| | | |
| | | private async Task HandleConnectionAsync(Guid connectionId, WebSocket webSocket, CancellationToken ct) |
| | | { |
| | | var buffer = new byte[1024 * 4]; |
| | | try |
| | | { |
| | | while (webSocket.State == WebSocketState.Open && !ct.IsCancellationRequested) |
| | | { |
| | | var result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), ct); |
| | | |
| | | if (result.MessageType == WebSocketMessageType.Close) |
| | | { |
| | | await webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "客æ·ç«¯å
³éè¿æ¥", ct); |
| | | break; |
| | | } |
| | | |
| | | string message = System.Text.Encoding.UTF8.GetString(buffer, 0, result.Count); |
| | | Console.WriteLine($"è¿æ¥ {connectionId} æ¶å°æ¶æ¯: {message}"); |
| | | |
| | | // å¹¿ææ¶æ¯ç»ææå®¢æ·ç«¯ |
| | | await BroadcastMessageAsync($"客æ·ç«¯ {connectionId} 说: {message}"); |
| | | } |
| | | } |
| | | catch (WebSocketException ex) |
| | | { |
| | | Console.WriteLine($"è¿æ¥ {connectionId} é误: {ex.WebSocketErrorCode} - {ex.Message}"); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Console.WriteLine($"å¤çè¿æ¥ {connectionId} æ¶åºé: {ex.Message}"); |
| | | } |
| | | finally |
| | | { |
| | | _connections.TryRemove(connectionId, out _); |
| | | webSocket?.Dispose(); |
| | | Console.WriteLine($"{DateTime.Now.ToString("HH:mm:ss.fff")} è¿æ¥ {connectionId} å·²å
³é"); |
| | | } |
| | | } |
| | | |
| | | public async Task BroadcastMessageAsync(string message) |
| | | { |
| | | var buffer = System.Text.Encoding.UTF8.GetBytes(message); |
| | | foreach (var connection in _connections) |
| | | { |
| | | if (connection.Value.State == WebSocketState.Open) |
| | | { |
| | | try |
| | | { |
| | | await connection.Value.SendAsync( |
| | | new ArraySegment<byte>(buffer), |
| | | WebSocketMessageType.Text, |
| | | true, |
| | | CancellationToken.None); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Console.WriteLine($"å¹¿ææ¶æ¯å°è¿æ¥ {connection.Key} 失败: {ex.Message}"); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | public async Task StopAsync() |
| | | { |
| | | _cts.Cancel(); |
| | | |
| | | // å
³éææè¿æ¥ |
| | | foreach (var connection in _connections) |
| | | { |
| | | try |
| | | { |
| | | if (connection.Value.State == WebSocketState.Open) |
| | | { |
| | | await connection.Value.CloseAsync( |
| | | WebSocketCloseStatus.NormalClosure, |
| | | "æå¡å¨å
³é", |
| | | CancellationToken.None); |
| | | } |
| | | connection.Value.Dispose(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Console.WriteLine($"å
³éè¿æ¥ {connection.Key} æ¶åºé: {ex.Message}"); |
| | | } |
| | | } |
| | | |
| | | _listener?.Stop(); |
| | | _listener?.Close(); |
| | | Console.WriteLine("WebSocketæå¡å¨å·²åæ¢"); |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | internal class WebSocketClient |
| | | { |
| | | private ClientWebSocket _webSocket = new ClientWebSocket(); |
| | | private readonly Uri _serverUri; |
| | | |
| | | public WebSocketClient(string serverUrl) |
| | | { |
| | | _serverUri = new Uri(serverUrl); |
| | | } |
| | | |
| | | public async Task ConnectAsync() |
| | | { |
| | | try |
| | | { |
| | | await _webSocket.ConnectAsync(_serverUri, CancellationToken.None); |
| | | Console.WriteLine("å·²è¿æ¥å°WebSocketæå¡å¨"); |
| | | |
| | | // å¯å¨æ¥æ¶æ¶æ¯ä»»å¡ |
| | | _ = ReceiveMessagesAsync(); |
| | | |
| | | // åéæµè¯æ¶æ¯ |
| | | await SendMessageAsync("Hello, Server!"); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Console.WriteLine($"è¿æ¥å¤±è´¥: {ex.Message}"); |
| | | } |
| | | } |
| | | |
| | | private async Task ReceiveMessagesAsync() |
| | | { |
| | | var buffer = new byte[1024]; |
| | | try |
| | | { |
| | | while (_webSocket.State == WebSocketState.Open) |
| | | { |
| | | var result = await _webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None); |
| | | if (result.MessageType == WebSocketMessageType.Close) |
| | | { |
| | | await _webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, string.Empty, CancellationToken.None); |
| | | Console.WriteLine("æå¡å¨å
³éäºè¿æ¥"); |
| | | break; |
| | | } |
| | | |
| | | string message = Encoding.UTF8.GetString(buffer, 0, result.Count); |
| | | Console.WriteLine($"æ¶å°æå¡å¨æ¶æ¯: {message}"); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Console.WriteLine($"æ¥æ¶æ¶æ¯æ¶åºé: {ex.Message}"); |
| | | } |
| | | } |
| | | |
| | | public async Task SendMessageAsync(string message) |
| | | { |
| | | if (_webSocket.State != WebSocketState.Open) |
| | | { |
| | | Console.WriteLine("WebSocketæªè¿æ¥ï¼æ æ³åéæ¶æ¯"); |
| | | return; |
| | | } |
| | | |
| | | byte[] buffer = Encoding.UTF8.GetBytes(message); |
| | | await _webSocket.SendAsync(new ArraySegment<byte>(buffer), WebSocketMessageType.Text, true, CancellationToken.None); |
| | | } |
| | | |
| | | public async Task DisconnectAsync() |
| | | { |
| | | if (_webSocket.State == WebSocketState.Open) |
| | | { |
| | | await _webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "客æ·ç«¯å
³éè¿æ¥", CancellationToken.None); |
| | | } |
| | | _webSocket.Dispose(); |
| | | Console.WriteLine("å·²æå¼WebSocketè¿æ¥"); |
| | | } |
| | | } |
| | | |
| | | |
| | | class Messss |
| | | { |
| | | public bool success { get; set; } |