public void DepartFrom(ILocation location) { if (null == location) { throw new ArgumentNullException("location"); } VoyageState stateBeforeTransition; VoyageState previousState = CurrentState; do { stateBeforeTransition = previousState; VoyageState newValue = stateBeforeTransition.DepartFrom(location); previousState = Interlocked.CompareExchange <VoyageState>(ref this.CurrentState, newValue, stateBeforeTransition); }while (previousState != stateBeforeTransition); if (!previousState.Equals(this.CurrentState)) { VoyageEventArgs args = new VoyageEventArgs(CurrentState.LastKnownLocation, CurrentState.NextExpectedLocation); EventHandler <VoyageEventArgs> handler = Departed; if (null != handler) { handler(this, args); } } }
public void StopOverAt (ILocation location) { if(null == location) throw new ArgumentNullException("location"); // Thread safe, lock free sincronization VoyageState stateBeforeTransition; VoyageState previousState = CurrentState; do { stateBeforeTransition = previousState; VoyageState newValue = stateBeforeTransition.StopOverAt(location); previousState = Interlocked.CompareExchange<VoyageState>(ref this.CurrentState, newValue, stateBeforeTransition); } while (previousState != stateBeforeTransition); if(!previousState.Equals(this.CurrentState)) { VoyageEventArgs args = new VoyageEventArgs(previousState.LastKnownLocation, previousState.NextExpectedLocation); EventHandler<VoyageEventArgs> handler = Stopped; if(null != handler) handler(this, args); } }
public void StopOverAt(ILocation location) { if (null == location) { throw new ArgumentNullException("location"); } // Thread safe, lock free sincronization VoyageState stateBeforeTransition; VoyageState previousState = CurrentState; do { stateBeforeTransition = previousState; VoyageState newValue = stateBeforeTransition.StopOverAt(location); previousState = Interlocked.CompareExchange <VoyageState>(ref this.CurrentState, newValue, stateBeforeTransition); }while (previousState != stateBeforeTransition); if (!previousState.Equals(this.CurrentState)) { VoyageEventArgs args = new VoyageEventArgs(previousState.LastKnownLocation, previousState.NextExpectedLocation); EventHandler <VoyageEventArgs> handler = Stopped; if (null != handler) { handler(this, args); } } }
public void Ctor_withValidLocations_works() { // arrange: UnLocode previous = new UnLocode("CDPRV"); UnLocode destination = new UnLocode("CDDES"); // act: VoyageEventArgs args = new VoyageEventArgs(previous, destination); // assert: Assert.AreSame(previous, args.PreviousLocation); Assert.AreSame(destination, args.DestinationLocation); }
public void DepartFrom (ILocation location) { if(null == location) throw new ArgumentNullException("location"); VoyageState stateBeforeTransition; VoyageState previousState = CurrentState; do { stateBeforeTransition = previousState; VoyageState newValue = stateBeforeTransition.DepartFrom(location); previousState = Interlocked.CompareExchange<VoyageState>(ref this.CurrentState, newValue, stateBeforeTransition); } while (previousState != stateBeforeTransition); if(!previousState.Equals(this.CurrentState)) { VoyageEventArgs args = new VoyageEventArgs(CurrentState.LastKnownLocation, CurrentState.NextExpectedLocation); EventHandler<VoyageEventArgs> handler = Departed; if(null != handler) handler(this, args); } }