コード例 #1
0
        public override void Stop()
        {
            System.Diagnostics.Debug.Print("{0}: Stop", m_ConnectProcedure);

            T5_Timer_Stop();
            T6_Timer_Stop();
            T7_Timer_Stop();
            T3_Timer_Stop_All();
            LinkTest_Timer_Stop();

            m_State = HsmsState.NOT_CONNECTED;

            if (m_SocketWorker != null)
            {
                if (m_SocketWorker.Connected)
                {
                    System.Diagnostics.Debug.Print("{0}: SeparateReq", m_ConnectProcedure);
                    Send_Request_ControlMessage(SType.SeparateReq);
                }
                m_SocketWorker.Close();
                m_SocketWorker = null;
            }

            if (m_SocketListener != null)
            {
                m_SocketListener.Close();
                m_SocketListener = null;
            }
        }
コード例 #2
0
 //T7 Not Selected timeout
 void m_Timer_T7_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
 {
     System.Diagnostics.Debug.Print("{0}: m_Timer_T7_Elapsed", m_ConnectProcedure);
     m_Timer_T7.Stop();
     m_State = HsmsState.NOT_CONNECTED;
     HsmsDriver_BeginAccept();
 }
コード例 #3
0
 void m_Timer_T8_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
 {
     m_Timer_T8.Stop();
     //do it job
     m_State = HsmsState.NOT_CONNECTED;
     HsmsDriver_BeginAccept();
 }
コード例 #4
0
ファイル: HsmsHost.cs プロジェクト: yecaokinux/XtraLibrary
 private void PostEvent_HsmsStateChanged(HsmsState changedState)
 {
     if (HsmsStateChanged != null)
     {
         m_SyncContext.Post((object state) => {
             HsmsStateChanged(this, new HsmsStateChangedEventArgs(changedState));
         }, null);
     }
 }
コード例 #5
0
 private void HsmsDriver_BeginAcceptCallback(IAsyncResult ar)
 {
     m_SocketWorker = m_SocketListener.EndAccept(ar);
     //hsms state > connect but not select
     m_State = HsmsState.NOT_SELECTED;
     //wait Select.Req
     WaitForMessage_Header_New(m_SocketWorker);
     //start T7
     T7_Timer_Start();
 }
コード例 #6
0
 private void HsmsDriver_BeginConnect()
 {
     if (m_SocketWorker != null && m_SocketWorker.Connected)
     {
         m_SocketWorker.Close();
     }
     m_State        = HsmsState.NOT_CONNECTED;
     m_SocketWorker = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
     m_SocketWorker.BeginConnect(new IPEndPoint(m_IPAddress, m_PortNo), HsmsDriver_BeginConnectCallback, null);
 }
コード例 #7
0
 private void ChangeHsmsState(HsmsState newState)
 {
     lock (m_Locker)
     {
         if (m_State != newState)
         {
             m_State = newState;
             //signal event to base case
             PostEvent_HsmsStateChanged(newState);
         }
     }
 }
コード例 #8
0
ファイル: HsmsHost.cs プロジェクト: yecaokinux/XtraLibrary
 private void ChangeHsmsState(HsmsState newState)
 {
     Debug.Print("ChangeHsmsState to " + newState.ToString());
     lock (m_Locker)
     {
         if (m_State != newState)
         {
             m_State = newState;
             //signal event to base case
             PostEvent_HsmsStateChanged(newState);
         }
     }
 }
コード例 #9
0
        private void HsmsDriver_BeginConnectCallback(IAsyncResult ar)
        {
            System.Diagnostics.Debug.Print("{0}: HsmsDriver_BeginConnectCallback", m_ConnectProcedure);

            if (m_SocketWorker.Connected)
            {
                m_SocketWorker.EndConnect(ar);
                //change state to NOT_SELECTED
                m_State = HsmsState.NOT_SELECTED;
                //stop T5
                T5_Timer_Stop();
                //wait message
                WaitForMessage_Header_New(m_SocketWorker);
                //send Select.Req
                SendSelectRequest();
                //start T6
                T6_Timer_Start();
            }
            else
            {
                T5_Timer_Start();
            }
        }
コード例 #10
0
        public override void Start()
        {
            System.Diagnostics.Debug.Print("{0}: Start", m_ConnectProcedure);

            T5_Timer_Stop();
            T6_Timer_Stop();
            T7_Timer_Stop();
            T3_Timer_Stop_All();
            LinkTest_Timer_Stop();

            m_State = HsmsState.NOT_CONNECTED;

            if (m_ConnectProcedure == HsmsConnectProcedure.ACTIVE)
            {
                HsmsDriver_BeginConnect();
                //start T5
                T5_Timer_Start();
            }
            else
            {
                HsmsDriver_BeginAccept();
            }
        }
コード例 #11
0
        private void WaitForMessage_Header_Callback(IAsyncResult ar)
        {
            SocketStateHolder holder = (SocketStateHolder)ar.AsyncState;

            Socket sck = holder.Socket;

            System.Diagnostics.Debug.Print("{0}: WaitForMessage_Header_Callback Connected={1}",
                                           m_ConnectProcedure, sck.Connected);


            if (sck.Connected)
            {
                byte[] header = holder.Header;

                int byteCount = 0;

                try
                {
                    byteCount = sck.EndReceive(ar);
                }
                catch (SocketException se)
                {
                    if (se.SocketErrorCode == SocketError.ConnectionReset)
                    {
                        return;
                    }
                }

                if (byteCount == 0)
                {
                    return;
                }

                holder.RecvStartIndex += byteCount;

                System.Diagnostics.Debug.Print("{0}: WaitForMessage_Header_Callback [ByteCount: {1}]",
                                               m_ConnectProcedure, byteCount);

                if (holder.RecvStartIndex == header.Length)
                {
                    byte sType         = header[9];
                    uint bodyByteCount = 0;

                    switch (sType)
                    {
                    case 0:     //message
                        byte[] lbb = new byte[4];
                        Array.Copy(header, 0, lbb, 0, 4);
                        Array.Reverse(lbb);
                        bodyByteCount = BitConverter.ToUInt32(lbb, 0) - 10; //exclude header
                        bool needBody = (bodyByteCount > 0);                //header
                        if (needBody)
                        {
                            byte[] body = new byte[bodyByteCount];
                            WaitForMessage_Body(sck, header, body, 0);
                            return;
                        }
                        else
                        {
                            //process secs message
                            ProcessInCommingMessage(header);
                        }
                        break;

                    case 1:     //Select.Req
                        m_State = HsmsState.SELECTED;
                        //stop T7
                        T7_Timer_Stop();
                        //Select.Req relate with T5
                        SendSelectReponse(header);
                        //raise event
                        RaiseEventOnSelected();
                        break;

                    case 2:     //Select.Resp
                        m_State = HsmsState.SELECTED;
                        //T6 timer
                        T6_Timer_Stop();
                        //start link test timer
                        LinkTest_Timer_Start();
                        //raise event
                        RaiseEventOnSelected();
                        break;

                    case 5:     //Linktest.Req
                        SendLinkTestResponse(header);
                        break;

                    case 6:     //Linktest.Resp
                        //T6 timer stop
                        T6_Timer_Stop();
                        //l
                        LinkTest_Timer_Start();
                        break;

                    case 9:     //Separate.Req
                        m_State = HsmsState.NOT_CONNECTED;
                        break;

                    default:
                        //unknow
                        break;
                    }

                    WaitForMessage_Header_New(sck);

                    //** be careful when added more code below this section
                    //** because at " case 0: //message" have the "return;" statement
                    //** that might cause somethings go wrong
                }
                else
                {
                    WaitForMessage_Header(sck, header, holder.RecvStartIndex);
                }
            }
            //let the timer does its job
            //else
            //{
            //    Start();
            //}

            holder.Socket = null;
            holder.Header = null;
            holder.Body   = null;
            holder        = null;
        }
コード例 #12
0
 internal HsmsStateChangedEventArgs(HsmsState newState)
 {
     m_State = newState;
 }