Exemplo n.º 1
0
        private void EngineStateReportEventHandler(TELEGRAPH_ENGINE_STATE State, TelegraphEngine EngineItem)
        {
            switch (State)
            {
            case TELEGRAPH_ENGINE_STATE.ENGINE_START:
                m_Adapter.WriteLogLine("Telegraph engine starts working..");
                break;

            case TELEGRAPH_ENGINE_STATE.ENGINE_DISPOSED:
                EngineItem.EngineStateReportEvent -= new EngineStateReport(EngineStateReportEventHandler);
                m_Adapter.WriteLogLine("Telegraph engine is disposed.");
                if (m_tEngine == EngineItem)
                {
                    m_tEngine = null;
                }

                break;

            case TELEGRAPH_ENGINE_STATE.ENGINE_STOPED:
                //EngineItem.EngineStateReportEvent -= new EngineStateReport(EngineStateReportEventHandler);
                m_Adapter.WriteLogLine("Telegraph engine stopped.");

                break;

            case TELEGRAPH_ENGINE_STATE.ENGINE_STOPPING:
                m_Adapter.WriteLogLine("Requesting stopping telegraph engine...");
                break;
            }
        }
Exemplo n.º 2
0
        protected override void OnPipelineServiceCancelled()
        {
            base.OnPipelineServiceCancelled();

            OnCancelAllPendingTelegraphs();

            if (null != m_tEngine)
            {
                try
                {
                    m_tEngine.Dispose();
                    m_tEngine = null;
                }
                catch (Exception Err)
                {
                    Err.ToString();
                }
            }
        }
Exemplo n.º 3
0
        //private AutoResetEvent m_EngineCompleteSignal = null;

        public override System.Boolean DoService()
        {
            if (Cancelled)
            {
                //! recieve cancel request
                OnCancelAllPendingTelegraphs();
                return(false);
            }

            if (FSM_SEND_TELEGRAPHS)
            {
                if (null == m_TelegraphList)
                {
                    return(false);
                }
                if (0 == m_TelegraphList.Count)
                {
                    return(false);
                }

                foreach (Telegraph tTelegraph in m_TelegraphList)
                {
                    SinglePhaseTelegraph tTelegraphItem = tTelegraph as SinglePhaseTelegraph;
                    if (null == tTelegraphItem)
                    {
                        //! cancel this telegraph
                        m_TelegraphList.Remove(tTelegraph);
                        tTelegraph.OnCancel();
                        continue;
                    }
                }


                if (null == m_tEngine)
                {
                    m_tEngine = m_TelegraphList[0].CreateTelegraphEngine() as SinglePhaseTelegraphEngine;
                    m_tEngine.ParentAdapter           = m_Adapter;
                    m_tEngine.Priority                = ThreadPriority.AboveNormal;
                    m_tEngine.EngineStateReportEvent += new EngineStateReport(EngineStateReportEventHandler);
                    m_Adapter.WriteLogLine("New telegraph engine is created.");
                }
                if (null != m_tEngine.CompleteSignal)
                {
                    m_tEngine.CompleteSignal.Reset();
                }

                m_tEngine.TryToSendTelegraphs(m_TelegraphList.ToArray());

                if (null != m_tEngine.CompleteSignal)
                {
                    m_tEngine.CompleteSignal.WaitOne();
                }
                else
                {
                    Thread.Sleep(10);
                }

                FSM_SEND_TELEGRAPHS = false;
                FSM_WAIT_RESULT     = true;
            }

            if (FSM_WAIT_RESULT)
            {
                do
                {
                    lock (((ICollection)m_TelegraphList).SyncRoot)
                    {
                        if (0 == m_TelegraphList.Count)
                        {
                            if (null != m_tEngine)
                            {
                                try
                                {
                                    m_tEngine.Dispose();
                                    m_tEngine = null;
                                }
                                catch (Exception)
                                {
                                }
                            }

                            //m_tEngine = null;
                            FSM_WAIT_RESULT     = false;
                            FSM_SEND_TELEGRAPHS = true;
                            return(false);
                        }
                    }

                    if (Cancelled)
                    {
                        FSM_WAIT_RESULT     = false;
                        FSM_SEND_TELEGRAPHS = true;

                        //! recieve cancel request
                        OnCancelAllPendingTelegraphs();
                        return(false);
                    }

                    Thread.Sleep(1);
                } while (true);
            }

            return(true);
        }