/// <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); }
/// <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); }
// 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); } } }
/// <summary>异步保存</summary> public void SaveAsync() { if (_task == null) { _task = TimerX.Delay(s => { Save(_File.GetFullPath(), this); _task = null; }, 3000); } }
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); }
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; } }
/// <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); }