GM_Disconnected.cs 3.14 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
using FLY.Thick.Base.Common;
using FlyADBase;
using System;
using System.ComponentModel;
using System.Diagnostics;

namespace FLY.Thick.Base.Server
{
    public class GM_Disconnected : GM_Base
    {
        GM_AutoScan mGMAutoScan;
        DynArea mDynArea;
        Stopwatch stopwatch = new Stopwatch();
        bool isReadyToAutoScan = false;

        public GM_Disconnected()
        {
            GMState = CTRL_STATE.DISCONNECTED;

        }
21
        public void Init(IFlyADClientAdv flyad, DynArea dynarea, GM_AutoScan gmAutoScan)
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
        {
            base.Init(flyad);
            mDynArea = dynarea;
            mGMAutoScan = gmAutoScan;
            mDynArea.PropertyChanged += new PropertyChangedEventHandler(mDynArea_PropertyChanged);
        }

        void mDynArea_PropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            if (e.PropertyName == nameof(mDynArea.FLYADIsConnect))
            {
                if (!mDynArea.FLYADIsConnect)
                {
                    //AD卡已经断开

                    if (mDynArea.ControllerState == CTRL_STATE.SCAN ||
                        mDynArea.ControllerState == CTRL_STATE.AUTOSCAN)
                    {
                        //之前在扫描中
                        isReadyToAutoScan = true;
                        stopwatch.Restart();
                    }
                    else
                    {
                        isReadyToAutoScan = false;
                        stopwatch.Stop();
                    }
                    Start();
                }
                else
                {
                    //AD盒已经重新连接上
                    if (IsRunning)//还在 CTRL_STATE.DISCONNECTED
                    {
                        if (isReadyToAutoScan)
                        {
                            //需要自动扫描
59 60 61 62 63 64 65
                            if (stopwatch.Elapsed < TimeSpan.FromSeconds(30)) {
                                isReadyToAutoScan = false;
                                stopwatch.Stop();
                                //30秒内又连上了,直接重启
                                mGMAutoScan.Start(0);
                            }
                            else if (stopwatch.Elapsed < TimeSpan.FromMinutes(3))
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
                            {
                                isReadyToAutoScan = false;
                                stopwatch.Stop();
                                //断开连接,到现在重新连上,只过了3min,重新执行扫描
                                mGMAutoScan.Start(5);
                            }
                            else
                            {
                                Stop();
                            }
                        }
                        else
                        {
                            Stop();
                        }
                    }
                }
            }
        }
        public override void Start()
        {
            IsRunning = true;
        }
        public override void Stop()
        {
            IsRunning = false;
            isReadyToAutoScan = false;
            stopwatch.Stop();
        }
    }
}