Example #1
0
        /// <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);
                }
            }
        }
Example #2
0
        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()));
            }
        }
Example #3
0
 private void RaiseHostT3TimeOut(CTibRVMessageBase oTibMessage)
 {
     if (OnHostT3TimeoutOccurred != null)
     {
         OnHostT3TimeoutOccurred(oTibMessage);
     }
 }
Example #4
0
        /// <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());
        }
Example #5
0
        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);
        }
Example #6
0
        /// <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());
        }
Example #7
0
        /// <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);
                }
            }
        }
Example #8
0
        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);
            }
        }
Example #9
0
        /// <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()));
                }
            }
        }
Example #10
0
        /// <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();
            }
        }