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; } }
//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(); }
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(); }
private void PostEvent_HsmsStateChanged(HsmsState changedState) { if (HsmsStateChanged != null) { m_SyncContext.Post((object state) => { HsmsStateChanged(this, new HsmsStateChangedEventArgs(changedState)); }, null); } }
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(); }
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); }
private void ChangeHsmsState(HsmsState newState) { lock (m_Locker) { if (m_State != newState) { m_State = newState; //signal event to base case PostEvent_HsmsStateChanged(newState); } } }
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); } } }
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(); } }
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(); } }
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; }
internal HsmsStateChangedEventArgs(HsmsState newState) { m_State = newState; }