public void On_Connection_Message(object MsgObj) { try { List <ReturnMessage> ReturnMsgList; string Msg = MsgObj.ToString(); logger.Debug(_Config.DeviceName + "Recieve:" + Msg.Replace("\r", "")); //lock (_Decoder) //{ ReturnMsgList = _Decoder.GetMessage(Msg); //} if (ReturnMsgList == null) { logger.Debug(_Config.DeviceName + " Decode parse error:" + Msg.Replace("\r", "")); return; } if (ReturnMsgList.Count == 0) { logger.Debug(_Config.DeviceName + " Decode parse error:" + Msg.Replace("\r", "")); } foreach (ReturnMessage ReturnMsg in ReturnMsgList) { logger.Debug(_Config.DeviceName + "Each ReturnMsg:" + JsonConvert.SerializeObject(ReturnMsg)); try { Transaction Txn; Node Node; if (ReturnMsg != null) { Node = NodeManagement.GetByController(_Config.DeviceName, ReturnMsg.NodeAdr); if (Node == null) { logger.Debug("Node not found!" + _Config.DeviceName + " - " + ReturnMsg.NodeAdr); return; } //lock (TransactionList) //{ lock (Node) { if (ReturnMsg.Type == ReturnMessage.ReturnType.Event) { _ReportTarget.On_Event_Trigger(Node, ReturnMsg); } else if (TransactionList.TryRemove(ReturnMsg.NodeAdr + ReturnMsg.IsInterrupt.ToString(), out Txn)) { logger.Debug("Txn removed."); switch (ReturnMsg.Type) { case ReturnMessage.ReturnType.Excuted: if (!Txn.CommandType.Equals("CMD") && !Txn.CommandType.Equals("MOV")) { logger.Debug("Txn timmer stoped."); Txn.SetTimeOutMonitor(false); } else { Txn.SetTimeOutMonitor(false); Txn.SetTimeOut(15000); Txn.SetTimeOutMonitor(true); TransactionList.TryAdd(ReturnMsg.NodeAdr + ReturnMsg.IsInterrupt.ToString(), Txn); } _ReportTarget.On_Command_Excuted(Node, Txn, ReturnMsg); break; case ReturnMessage.ReturnType.Finished: logger.Debug("Txn timmer stoped."); Txn.SetTimeOutMonitor(false); _ReportTarget.On_Command_Finished(Node, Txn, ReturnMsg); break; case ReturnMessage.ReturnType.Error: Txn.SetTimeOutMonitor(false); _ReportTarget.On_Command_Error(Node, Txn, ReturnMsg); break; case ReturnMessage.ReturnType.Information: logger.Debug("Txn timmer stoped."); Txn.SetTimeOutMonitor(false); _ReportTarget.On_Command_Finished(Node, Txn, ReturnMsg); //SpinWait.SpinUntil(() => false, 300); ThreadPool.QueueUserWorkItem(new WaitCallback(conn.Send), ReturnMsg.FinCommand); logger.Debug(_Config.DeviceName + "Send:" + ReturnMsg.FinCommand); break; } } else { logger.Debug(_Config.DeviceName + "(On_Connection_Message Txn is not found. msg:" + Msg); switch (ReturnMsg.Type) { case ReturnMessage.ReturnType.Information: case ReturnMessage.ReturnType.ReInformation: ThreadPool.QueueUserWorkItem(new WaitCallback(conn.Send), ReturnMsg.FinCommand); logger.Debug(_Config.DeviceName + "Send:" + ReturnMsg.FinCommand); break; } } } //} } else { logger.Debug(_Config.DeviceName + "(On_Connection_Message Message decode fail:" + Msg); } } catch (Exception e) { logger.Error(_Config.DeviceName + "(On_Connection_Message " + _Config.IPAdress + ":" + _Config.Port.ToString() + ")" + e.Message + "\n" + e.StackTrace); } } } catch (Exception e) { logger.Error(_Config.DeviceName + "(On_Connection_Message " + _Config.IPAdress + ":" + _Config.Port.ToString() + ")" + e.Message + "\n" + e.StackTrace); } }
public bool DoWork(Transaction Txn) { bool result = false; // lock (TransactionList) if (!Txn.NodeType.Equals("OCR")) { List <ReturnMessage> msgList = _Decoder.GetMessage(Txn.CommandEncodeStr); if (msgList.Count != 0) { Txn.Type = msgList[0].Command; Txn.CommandType = msgList[0].CommandType; } } else { Txn.Type = ""; //Txn.CommandType = ""; } string key = ""; if (_Config.Vendor.ToUpper().Equals("KAWASAKI")) { key = Txn.Seq; } else if (_Config.Vendor.ToUpper().Equals("HST") || _Config.Vendor.ToUpper().Equals("COGNEX")) { key = "1" + Txn.Type; } else { key = Txn.AdrNo + Txn.Type; } if (TransactionList.TryAdd(key, Txn)) { Txn.SetTimeOutReport(this); Txn.SetTimeOutMonitor(true); TransactionRecord.New(Txn); conn.Send(Txn.CommandEncodeStr); string waferids = ""; foreach (Job each in Txn.TargetJobs) { waferids += each.Job_Id + " "; } logger.Debug(_Config.DeviceName + " Send:" + Txn.CommandEncodeStr.Replace("\r", "") + " Wafer:" + waferids); result = true; } else { Transaction workingTxn; TransactionList.TryGetValue(Txn.AdrNo + Txn.Type, out workingTxn); logger.Debug(_Config.DeviceName + "(DoWork " + _Config.IPAdress + ":" + _Config.Port.ToString() + ":" + Txn.CommandEncodeStr + ") Same type command " + workingTxn.CommandEncodeStr + " is already excuting."); result = false; } //} return(result); }