/// <summary> /// Message Queue Add /// </summary> /// <param name="msgObject"></param> private void AddQueueMessageBeforeSend(CTibRVMessageBase oTibMessage) { lock (_oMessageQueue) { try { if (_CurrentSystemByte == Int32.MaxValue) { _CurrentSystemByte = 1; } oTibMessage.SystemBytes = _CurrentSystemByte++; if (!_mQueueMessageBeforeSend.ContainsKey(oTibMessage.EQP)) { _mQueueMessageBeforeSend.Add(oTibMessage.EQP, new Queue <CTibRVMessageBase>()); } _mQueueMessageBeforeSend[oTibMessage.EQP].Enqueue(oTibMessage); //CLogManager.Instance.Log(new CTIBRVFormat(Catagory.Debug, "QUEUING MESSAGE", oTibMessage.ToString())); //CHECK NEED SystemLogger.Log(Level.Verbose, string.Format(" Add Queue Message Before Send({0}/{1})", oTibMessage.EQP, oTibMessage.MSG_NAME), "MSGQueue", this.Name); } catch (Exception ex) { //CHECK NEED SystemLogger.Log(ex); } } }
public void SendMessage(CTibRVMessageBase oTibMessage) { try { if (!oTibMessage.LogSecondaryMsg) { if (!_mNoLogSecondaryMessage.Contains(oTibMessage.MSG_NAME)) { _mNoLogSecondaryMessage.Add(oTibMessage.MSG_NAME); } } if (oTibMessage.Queueing) { AddQueueMessageBeforeSend(oTibMessage); } else { if (!_mExceptQueueMessage.Contains(oTibMessage.MSG_NAME)) { _mExceptQueueMessage.Add(oTibMessage.MSG_NAME); } SendTibMessage(oTibMessage); } } catch (Exception ex) { CLogManager.Instance.Log(new CExceptionLogFormat(Catagory.Error, "EMP", ex)); CLogManager.Instance.Log(new CStatusLogFormat(Catagory.Error, "OGS", "TIB", "SendMessage \r\n" + ex.ToString())); } }
private void RaiseHostT3TimeOut(CTibRVMessageBase oTibMessage) { if (OnHostT3TimeoutOccurred != null) { OnHostT3TimeoutOccurred(oTibMessage); } }
/// <summary> /// Message Log /// </summary> /// <param name="strMSG"></param> /// <param name="bSend"></param> /// <returns></returns> private string GetMessageLog(string strMSG, bool bSend) { StringBuilder sb = new StringBuilder(); string sHostMsgName = string.Empty; Dictionary <string, string> hostMSGList = null; try { // ?? msgParser 가 필요한가? CTibRVMessageBase mMessage = new CTibRVMessageBase(); hostMSGList = mMessage.msgParser(strMSG); sHostMsgName = hostMSGList["MSG_NAME"]; sb.Append(string.Format(" {0} {1} \r\n", bSend ? "SEND" : "RECV", sHostMsgName)); foreach (string strKey in hostMSGList.Keys) { if (sHostMsgName != hostMSGList[strKey]) { sb.Append(string.Format(" {0}={1}\r\n", strKey, hostMSGList[strKey])); } } } catch (Exception ex) { //CHECK NEED SystemLogger.Log(ex); } return(sb.ToString()); }
private Dictionary <string, string> GetParseMessage(string strMSG) { Dictionary <string, string> hostMSGList = null; try { CTibRVMessageBase mMessage = new CTibRVMessageBase(); hostMSGList = mMessage.msgParser(strMSG); } catch (Exception ex) { //CHECK NEED SystemLogger.Log(ex); //CHECK NEED SystemLogger.Log(strMSG); } return(hostMSGList); }
/// <summary> /// Message Log /// </summary> /// <param name="strMSG"></param> /// <param name="bSend"></param> /// <returns></returns> private string GetMessageLog(CTibRVMessageBase oMessage, bool bSend) { StringBuilder sb = new StringBuilder(); try { sb.Append(string.Format(" {0} {1} \r\n", bSend ? "SEND" : "RECV", oMessage.MSG_NAME)); sb.Append(oMessage.ToString()); sb.Append(string.Format(" {0}={1}\r\n", "SYSTEM_BYTE", oMessage.SystemBytes.ToString())); } catch (Exception ex) { //CHECK NEED SystemLogger.Log(ex); } return(sb.ToString()); }
/// <summary> /// Message Queue Add /// </summary> /// <param name="msgObject"></param> private void AddQueueMessageAfterSend(CTibRVMessageBase oTibMessage) { lock (_oMessageQueue) { try { if (!_mQueueMessageAfterSend.ContainsKey(oTibMessage.EQP)) { _mQueueMessageAfterSend.Add(oTibMessage.EQP, new Queue <CTibRVMessageBase>()); } _mQueueMessageAfterSend[oTibMessage.EQP].Enqueue(oTibMessage); //CHECK NEED SystemLogger.Log(Level.Verbose, string.Format(" Add Queue Message After Send ({0}/{1})", oTibMessage.EQP, oTibMessage.MSG_NAME), "MSGQueue", this.Name); } catch (Exception ex) { //CHECK NEED SystemLogger.Log(ex); } } }
private string RemoveQueueMessage(string strMessage, string strKey, string strMsgName) { lock (_oMessageQueue) { try { if (_mQueueMessageAfterSend.ContainsKey(strKey) && _mQueueMessageAfterSend[strKey].Count > 0) { // System Byte Setting 을 위해 Primary Message Check CTibRVMessageBase oTibMessage = _mQueueMessageAfterSend[strKey].Dequeue(); // 받은 Message String 에 System Byte 추가함. strMessage += string.Format(" SYSTEM_BYTE={0}", oTibMessage.SystemBytes.ToString()); //CHECK NEED SystemLogger.Log(Level.Verbose, string.Format(" Del Queue Message After Send ({0}/{1})", strKey, strMsgName), "MSGQueue", this.Name); } } catch (Exception ex) { //CHECK NEED SystemLogger.Log(ex); } return(strMessage); } }
/// <summary> /// 실제로 Message를 전송 /// </summary> /// <param name="sendMessage"></param> /// <param name="sendMSG"></param> private void SendTibMessage(CTibRVMessageBase oTibMessage) { lock (_MessageSend) { try { oTibMessage.SEND_TIME = DateTime.Now; oTibMessage.StartTickCount = System.Environment.TickCount; TIBCO.Rendezvous.Message sendMessage = new TIBCO.Rendezvous.Message(); string sendMSG = oTibMessage.ToString(); sendMessage.SendSubject = REMOTE_SUBJECT; sendMessage.AddField(FIELD_NAME, sendMSG); tibTrans.Send(sendMessage); //CELSC oELSC = oTibMessage as CELSC; //if (oELSC != null) //{ // if (oELSC.IsOnlineChangeMessage) // { // if (RemoteControlStateChangeComplete != null) // RemoteControlStateChangeComplete(this, enumHostControl.Online); // } //} CEMCR oEMCR = oTibMessage as CEMCR; if (oEMCR != null) { if (oEMCR.IsOnlineChangeMessage) { if (oEMCR.RCS == "F") { if (RemoteControlStateChangeComplete != null) { RemoteControlStateChangeComplete(this, enumHostControl.Offline); } } else { if (RemoteControlStateChangeComplete != null) { RemoteControlStateChangeComplete(this, enumHostControl.Online); } } } } // 보낸 Message String 에 System Byte 추가함. sendMSG += string.Format(" SYSTEM_BYTE={0}", oTibMessage.SystemBytes.ToString()); CLogManager.Instance.Log(new CTIBRVFormat(Catagory.Info, oTibMessage.EQP, sendMSG)); //CHECK NEED SystemLogger.Log(Level.Verbose, GetMessageLog(sendMSG, true), ToString(), this.Name); } catch (Exception ex) { CLogManager.Instance.Log(new CExceptionLogFormat(Catagory.Error, "EMP", ex)); CLogManager.Instance.Log(new CStatusLogFormat(Catagory.Error, "OGS", "TIB", "SendTibMessage \r\n" + ex.ToString())); } } }
/// <summary> /// Message Send 가능한지 판단하여 Send /// </summary> private void DoCheckMessageSend() { try { while (true) { lock (_oMessageQueue) { // 각 EQP 별로 Queue 에서 Send 할 Message 를 가져옴. CTibRVMessageBase oMaxSystemByteMessage = null; Queue <CTibRVMessageBase> oQueue = null; List <CTibRVMessageBase> oCandidateList = new List <CTibRVMessageBase>(); foreach (string strKey in _mQueueMessageBeforeSend.Keys) { if (_mQueueMessageAfterSend.ContainsKey(strKey) && _mQueueMessageAfterSend[strKey].Count > 0) { continue; } oQueue = _mQueueMessageBeforeSend[strKey]; if (oQueue.Count == 0) { continue; } CTibRVMessageBase oTibMessage = oQueue.Peek(); oCandidateList.Add(oTibMessage); if (oTibMessage.SystemBytes == Int32.MaxValue) { oMaxSystemByteMessage = oTibMessage; } } // EQP 별 Send Message 중에 SystemByte 가 빠른것 부터 Send 함. // 단 MaxSystemByte Message 는 먼저 보냄. CTibRVMessageBase oSendMessage = null; foreach (CTibRVMessageBase oTibMessage in oCandidateList) { if (oSendMessage == null) { oSendMessage = oTibMessage; } else { if (oSendMessage.SystemBytes > oTibMessage.SystemBytes) { oSendMessage = oTibMessage; } } } // Message Dequeue & Send if (oSendMessage != null) { if (oMaxSystemByteMessage != null) { oSendMessage = _mQueueMessageBeforeSend[oMaxSystemByteMessage.EQP].Dequeue(); } else { oSendMessage = _mQueueMessageBeforeSend[oSendMessage.EQP].Dequeue(); } //CHECK NEED SystemLogger.Log(Level.Verbose, string.Format(" Del Message Queue ({0}/{1})", oSendMessage.EQP, oSendMessage.MSG_NAME), "MSGQueue", this.Name); //CLogManager.Instance.Log(new CTIBRVFormat(Catagory.Debug, "QUEUE OUT SEND MSG", oSendMessage.ToString())); SendTibMessage(oSendMessage); //CHECK NEED..이거 어케 하는건지 사실 잘 모르곘음. //AddQueueMessageAfterSend(oSendMessage); } } Thread.Sleep(ScanInterval); } } catch (Exception ex) { //CHECK NEED SystemLogger.Log(ex); // 비정상적으로 Thread 가 종료되었을 경우 새로운 Thread 를 만들어줌. StartMessageSendThread(); } }