private Aid waitingAid; //aid waiting to be lasered #endregion Fields #region Constructors private LaserMarker() { this.laserHardware = null; this.state = LaserMarkerState.WaitingForWork; //handle AidsQueueUpdated event AidQueue aidQueue = AidQueue.Instance; aidQueue.AidAdded += new EventHandler(AidsQueueUpdated); this.waitingAid = null; }
/// <summary> /// Called when hardware status changes /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void HardwareDoorChanged(object sender, DoorChangedEventArgs e) { if (e.Status == LaserHardwareDoorStatus.Closed) { //door now closed if (this.waitingAid != null) { //there is a waiting aid so mark it LaserMarkResult result = this.laserHardware.Mark(this.waitingAid.Model.Name, this.waitingAid.SerialText, this.waitingAid.ModelText); if (result == LaserMarkResult.Success) { //mark successfull this.waitingAid = null; if (AidQueue.Instance.PeekHeadAid() == null) { this.state = LaserMarkerState.WaitingForWork; } else { this.state = LaserMarkerState.WaitingForDoorOpen; } this.StateModified(); } else { //mark unsuccessfull if (this.MarkFailed != null) { MarkFailAction action = this.MarkFailed(this, new MarkFailEventArgs(result)); if (action == MarkFailAction.Cancel) { //mark canceled, remove aid this.waitingAid = null; if (AidQueue.Instance.PeekHeadAid() == null) { this.state = LaserMarkerState.WaitingForWork; } else { this.state = LaserMarkerState.WaitingForDoorOpen; } } else { //retry mark this.state = LaserMarkerState.WaitingForDoorOpen; } this.StateModified(); } } } } else if (e.Status == LaserHardwareDoorStatus.Open) { //door now open if (this.waitingAid == null) { //get a new aid to mark this.waitingAid = AidQueue.Instance.GetHeadAid(); //if there is a aid to mark change state if (this.waitingAid != null) this.state = LaserMarkerState.WaitingForDoorClose; this.StateModified(); } else { //this might happen if mark fails and is retried if (this.state != LaserMarkerState.WaitingForDoorClose) { this.state = LaserMarkerState.WaitingForDoorClose; this.StateModified(); } } } //door status unknown? }
/// <summary> /// Called when Aid added to aid queue /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void AidsQueueUpdated(object sender, EventArgs e) { AidQueue aidQueue = AidQueue.Instance; if (this.waitingAid == null) { if (this.laserHardware.GetDoorStatus() == LaserHardwareDoorStatus.Open) { this.waitingAid = aidQueue.GetHeadAid(); this.state = LaserMarkerState.WaitingForDoorClose; } else { //waiting for door to open this.state = LaserMarkerState.WaitingForDoorOpen; } this.StateModified(); } }