コード例 #1
0
ファイル: DeviceBase.cs プロジェクト: simple0812/WashMachine
        public virtual async Task <DeviceIOResult> StartAsync()
        {
            try
            {
                Debug.WriteLine($"start {DeviceType}{DeviceId} when CurrentStatus {CurrentStatus}");

//                if (CurrentStatus == DeviceStatusEnum.Running || CurrentStatus == DeviceStatusEnum.Startting)
//                {
//                    return new DeviceIOResult(true);
//                }
                var directive = GenerateTryStartDirective();

                OnPreCommunicationEvent(directive);
                CurrentStatus = DeviceStatusEnum.PreStart;
                SendDirective(directive);
                var p = await startEvent.WaitAsync();

                startEvent.Reset();

                return(p);
            }
            catch (Exception ex)
            {
                Debug.WriteLine($"start {DeviceType} timeout ->{ex.Message}");
                return(new DeviceIOResult(false));
            }
        }
コード例 #2
0
        public void Handle(DirectiveTypeEnum type, DirectiveData data, CommunicationEventArgs comEventArgs)
        {
            OldStatus = Controller.CurrentStatus;

            switch (type)
            {
            case DirectiveTypeEnum.Idle:
                HandleIdle(data, comEventArgs); break;

            case DirectiveTypeEnum.TryStart:
                HandleTryStart(data, comEventArgs); break;

            case DirectiveTypeEnum.Running:
                HandleRunning(data, comEventArgs); break;

            case DirectiveTypeEnum.TryPause:
                HandleTryPause(data, comEventArgs); break;

            case DirectiveTypeEnum.Pausing:
                HandlePausing(data, comEventArgs); break;

            case DirectiveTypeEnum.Close:
                HandleClose(data, comEventArgs); break;

            default:
                HandleError(data, comEventArgs); break;
            }
        }
コード例 #3
0
        public void InstallCircuit(Part circuit, Warranty extendedWarranty)
        {
            _circuits = Option <Part> .Some(circuit);

            _circuitWarranty    = extendedWarranty;
            _operationalStatus &= DeviceStatusEnum.CircuitFailed;
        }
コード例 #4
0
 public void CircuitNotOperational(DateTime breakDate)
 {
     _circuits.Do(c =>
     {
         c.MarkDefective(DateTime.Now);
         _operationalStatus |= DeviceStatusEnum.CircuitFailed;
     });
 }
コード例 #5
0
ファイル: DeviceBase.cs プロジェクト: simple0812/WashMachine
 protected virtual void ProcessTryStartResult(DirectiveData data, CommunicationEventArgs comEventArgs)
 {
     CurrentStatus             = DeviceStatusEnum.Startting;
     comEventArgs.DeviceStatus = DeviceStatusEnum.Startting;
     //记录泵的开始时间
     // 拿到TryStart反馈指令后启动running状态轮询
     OnCommunicationChangeEvent(comEventArgs);
     StartRunningLoop();
 }
コード例 #6
0
ファイル: DeviceBase.cs プロジェクト: simple0812/WashMachine
        protected virtual void ProcessIdleResult(DirectiveData data, CommunicationEventArgs comEventArgs)
        {
            if (CurrentStatus == DeviceStatusEnum.Idle)
            {
                comEventArgs.DeviceStatus = DeviceStatusEnum.Idle;
            }
            else
            {
                // 进入普通轮询状态
                CurrentStatus             = DeviceStatusEnum.Idle;
                comEventArgs.DeviceStatus = DeviceStatusEnum.Idle;
            }

            StartIdleLoop(data.DirectiveId);
        }
コード例 #7
0
ファイル: DeviceBase.cs プロジェクト: simple0812/WashMachine
        public virtual async Task <DeviceIOResult> StopAsync()
        {
            Debug.WriteLine($"Stop {DeviceType} {DeviceId} when  CurrentStatus {CurrentStatus}");
            if (CurrentStatus == DeviceStatusEnum.Idle || CurrentStatus == DeviceStatusEnum.Pausing)
            {
                return(new DeviceIOResult(true));
            }

            var directive = new TryPauseDirective(DeviceId, DeviceType);

            OnPreCommunicationEvent(directive);

            CurrentStatus = DeviceStatusEnum.PrePause;
            SendDirective(directive);

            var p = await stopEvent.WaitAsync();

            stopEvent.Reset();

            return(p);
        }
コード例 #8
0
        public void SetStatus(DeviceStatusEnum state)
        {
            this.CurrentStatus = state;

            switch (state)
            {
            case DeviceStatusEnum.Idle:
                this.Status = new IdleStatus(this);
                break;

            case DeviceStatusEnum.Error:
                this.Status = new ErrorStatus(this);
                break;

            case DeviceStatusEnum.Pausing:
                this.Status = new PausingStatus(this);
                break;

            case DeviceStatusEnum.PrePause:
                this.Status = new PrePauseStatus(this);
                break;

            case DeviceStatusEnum.PreStart:
                this.Status = new PreStartStatus(this);
                break;

            case DeviceStatusEnum.Running:
                this.Status = new RunningStatus(this);
                break;

            case DeviceStatusEnum.Startting:
                this.Status = new StartingStatus(this);
                break;

            default:
                break;
            }
        }
コード例 #9
0
 public void Repaired()
 {
     _operationalStatus &= DeviceStatusEnum.NotOperational;
 }
コード例 #10
0
 public void NotOperational()
 {
     _operationalStatus |= DeviceStatusEnum.NotOperational;
 }
コード例 #11
0
 public void VisibleDamage()
 {
     _operationalStatus |= DeviceStatusEnum.VisiblyDamaged;
 }