Пример #1
0
        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;
        }
Пример #2
0
 /// <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?
 }
Пример #3
0
 /// <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();
     }
 }