Esempio n. 1
0
        /// <summary>登录或注册完成后,保存登录信息</summary>
        /// <param name="user"></param>
        protected override void SaveLogin(IManageUser user)
        {
            //var dv = Device;
            //if (dv != null)
            //{
            //    // 注册消息队列
            //    MQHost.Instance.Subscribe(dv.Name, dv.Name, "Device", async (sub, msg) =>
            //    {
            //    }, Session);
            //}

            // 检查下发指令
            TimerX.Delay(CheckCommand, 100);
            // 读取信息
            TimerX.Delay(async s =>
            {
                try
                {
                    var rs  = await Session.InvokeAsync <Object>("GetServer");
                    var dic = rs.ToDictionary();
                    WriteLog("Server={0}", dic["Server"]);
                }
                catch { }
            }, 1000);

            base.SaveLogin(user);
        }
Esempio n. 2
0
        /// <summary>心跳</summary>
        /// <returns></returns>
        public override Object Ping()
        {
            var ss = Session;

            // 检查下发指令
            TimerX.Delay(ss.CheckCommand, 100);

            // 保存数据区
            var dic = ControllerContext.Current?.Parameters?.ToNullable();

            if (dic != null)
            {
                var data = dic["data"] + "";
                if (!data.IsNullOrEmpty())
                {
                    var buf = data.ToHex();

                    var dv = ss.Device;
                    dv.Data = buf.ToHex();
                    dv.SaveAsync();
                }
            }

            return(base.Ping());
        }
        static void CheckContent()
        {
            // 释放ico图标
            var ico  = "favicon.ico";
            var ico2 = ico.GetFullPath();

            if (!File.Exists(ico2))
            {
                // 延迟时间释放,给子系统覆盖的机会
                TimerX.Delay(s =>
                {
                    if (!File.Exists(ico2))
                    {
                        Assembly.GetExecutingAssembly().ReleaseFile(ico, ico2);
                    }
                }, 15000);
            }

            // 检查魔方样式
            var js  = "~/Content/Cube.js".GetFullPath();
            var css = "~/Content/Cube.css".GetFullPath();

            if (File.Exists(js) && File.Exists(css))
            {
                // 判断脚本时间
                var dt = DateTime.MinValue;
                var ss = File.ReadAllLines(js);
                for (var i = 0; i < 5; i++)
                {
                    if (DateTime.TryParse(ss[i].TrimStart("//").Trim(), out dt))
                    {
                        break;
                    }
                }
                // 要求脚本最小更新时间
                if (dt >= "2017-12-07 00:00:00".ToDateTime())
                {
                    return;
                }
            }

            var url = Setting.Current.PluginServer;

            if (url.IsNullOrEmpty())
            {
                return;
            }

            var wc = new WebClientX(true, true)
            {
                Log = XTrace.Log
            };

            wc.DownloadLinkAndExtract(url, "Cube_Content", "~/Content".GetFullPath(), true);
        }
Esempio n. 4
0
 // Internal so it can be overridden in tests
 internal virtual void StartCleanupTimer()
 {
     lock (_cleanupTimerLock)
     {
         if (_cleanupTimer == null)
         {
             //_cleanupTimer = NonCapturingTimer.Create(_cleanupCallback, this, DefaultCleanupInterval, Timeout.InfiniteTimeSpan);
             _cleanupTimer = TimerX.Delay(CleanupTimer_Tick, (Int32)DefaultCleanupInterval.TotalMilliseconds);
         }
     }
 }
Esempio n. 5
0
        /// <summary>异步保存</summary>
        public void SaveAsync()
        {
            if (_task == null)
            {
                _task = TimerX.Delay(s =>
                {
                    Save(_File.GetFullPath(), this);

                    _task = null;
                }, 3000);
            }
        }
Esempio n. 6
0
        public Task StartAsync(CancellationToken cancellationToken)
        {
            // 每小时执行
            _timer = new TimerX(DoWork, null, DateTime.Today.AddMinutes(Rand.Next(60)), 3600 * 1000)
            {
                Async = true
            };

            // 临时来一次
            TimerX.Delay(DoWork, 10_000);

            return(Task.CompletedTask);
        }
Esempio n. 7
0
        private void StartExpiryTimerSlow(TimerCallback callback)
        {
            //Debug.Assert(Lifetime != Timeout.InfiniteTimeSpan);

            lock (_lock)
            {
                if (Volatile.Read(ref _timerInitialized))
                {
                    return;
                }

                _callback = callback;
                //_timer = NonCapturingTimer.Create(_timerCallback, this, Lifetime, Timeout.InfiniteTimeSpan);
                _timer            = TimerX.Delay(Timer_Tick, (Int32)Lifetime.TotalMilliseconds);
                _timerInitialized = true;
            }
        }
Esempio n. 8
0
        /// <summary>登录或注册完成后,保存登录信息</summary>
        /// <param name="user"></param>
        /// <param name="ps">附加参数</param>
        protected override void SaveLogin(IManageUser user, IDictionary <String, Object> ps)
        {
            if (user is Device dv)
            {
                Fill(dv, ps);

                if (Online is DeviceOnline olt)
                {
                    olt.ProductID = dv.ProductID;
                }

                var ns = Session as INetSession;

                dv.Logins++;
                dv.LastLoginIP = ns.Remote.Address + "";
                dv.LastLogin   = DateTime.Now;

                dv.Save();
            }

            //var dv = Device;
            //if (dv != null)
            //{
            //    // 注册消息队列
            //    MQHost.Instance.Subscribe(dv.Name, dv.Name, "Device", async (sub, msg) =>
            //    {
            //    }, Session);
            //}

            // 检查下发指令
            TimerX.Delay(CheckCommand, 100);
            //// 读取信息
            //TimerX.Delay(async s =>
            //{
            //    try
            //    {
            //        var rs = await Session.InvokeAsync<Object>("GetServer");
            //        var dic = rs.ToDictionary();
            //        WriteLog("Server={0}", dic["Server"]);
            //    }
            //    catch { }
            //}, 1000);

            base.SaveLogin(user, ps);
        }
        static void CheckContent()
        {
            // 释放ico图标
            var ico  = "favicon.ico";
            var ico2 = ("wwwroot/" + ico).GetFullPath();

            if (!File.Exists(ico2))
            {
                // 延迟时间释放,给子系统覆盖的机会
                TimerX.Delay(s =>
                {
                    if (!File.Exists(ico2))
                    {
                        //Assembly.GetExecutingAssembly().ReleaseFile(ico, ico2);
                        var asm = Assembly.GetExecutingAssembly();
                        var ns  = asm.GetManifestResourceNames();
                        var f   = ns.FirstOrDefault(e => e.EndsWithIgnoreCase(ico));
                        if (!f.IsNullOrEmpty())
                        {
                            var ms = asm.GetManifestResourceStream(f);
                            File.WriteAllBytes(ico2, ms.ReadBytes());
                        }
                    }
                }, 1000);
            }

            // 检查魔方样式
            var js  = "wwwroot/Content/Cube.js".GetFullPath();
            var css = "wwwroot/Content/Cube.css".GetFullPath();

            if (File.Exists(js) && File.Exists(css))
            {
                // 判断脚本时间
                var dt = DateTime.MinValue;
                var ss = File.ReadAllLines(js);
                for (var i = 0; i < 5; i++)
                {
                    if (DateTime.TryParse(ss[i].TrimStart("//").Trim(), out dt))
                    {
                        break;
                    }
                }
                // 要求脚本最小更新时间
                if (dt >= "2017-12-07 00:00:00".ToDateTime())
                {
                    return;
                }
            }

            var url = Setting.Current.PluginServer;

            if (url.IsNullOrEmpty())
            {
                return;
            }

            var wc = new WebClientX(true, true)
            {
                Log = XTrace.Log
            };

            wc.DownloadLinkAndExtract(url, "Cube_Content", "wwwroot/Content".GetFullPath(), true);
        }