/// <summary> /// Start new sequence in other async thread. /// </summary> /// <param name="NextSequence">New Sequence.</param> /// <returns>Task newly run.</returns> public Task StartSequence(ComPortAccessSequence NextSequence) { if (null == NextSequence) { return(null); } Task <object> task = Task <object> .Run(() => { this.OnSequenceStartingEvent( new ConnectStateChangedEventArgs( new ConnectState(NextSequence.StartingConnectionState))); if (null != this.CurSequence) { this.CurSequence.StopSequence(); this.ReleaseEventHandler(this.CurSequence); this.CurSequence = null; } this.CurSequence = NextSequence; this.SetupEventHandler(this.CurSequence); Task MainTask = this.CurSequence.StartSequence(this.ComPortAcc); this.OnSequenceStartedEvent( new ConnectStateChangedEventArgs( new ConnectState(this.CurSequence.StartedConnectionState))); return((object)MainTask); }); return((Task)(task.Result)); }
/// <summary> /// A factory method to create concrete ComPortAccessSequence object. /// </summary> /// <param name="SeqName"> /// Identifier used int creating ComPortAccessSequence concrete object. /// </param> /// <returns>Concrete ComPortAccessSequence object.</returns> public static ComPortAccessSequence SequenceFactory(SequenceName SeqName) { ComPortAccessSequence AccessSequence = null; switch (SeqName) { case SequenceName.SEQUENCE_NAME_CONNECT: AccessSequence = new ComPortConnectSequence(); break; case SequenceName.SEQUENCE_NAME_DISCONNECT: AccessSequence = new ComPortDisconnectSequence(); break; case SequenceName.SEQUENCE_NAME_SEND_AND_RECV: AccessSequence = new EchoBackComPortSendRecvSequence(); break; default: AccessSequence = null; break; } return(AccessSequence); }
/// <summary> /// Release event handler from sequence passed by arguemnt. /// </summary> /// <param name="Sequence"></param> public void ReleaseEventHandler(ComPortAccessSequence Sequence) { Sequence.TaskFinishedEvent -= this.SequenceFinisedEventCallback; Sequence.NotifySendReceiveDataEvent -= this.NotifySendReceiveDataEventCallback; Sequence.NotifyRecvExceptionEvent -= this.NotifyRecvExceptionEventCallback; }