public async Task<bool> RegistAppInstanceAsync(BahamutAppInstance instance) { instance.RegistTime = DateTime.UtcNow; instance.Id = Guid.NewGuid().ToString(); var suc = await redis.GetDatabase().StringSetAsync(instance.GetInstanceIdKey(), instance.ToJson()); if (suc) { return await PublishNotifyAsync(instance, BahamutAppInstanceNotification.TYPE_REGIST_APP_INSTANCE); } return false; }
public async Task<bool> ReActiveAppInstance(BahamutAppInstance instance) { var instanceJson = instance.ToJson(); var suc = await redis.GetDatabase().StringSetAsync(instance.GetInstanceIdKey(), instanceJson); if (suc) { return await PublishNotifyAsync(instance, BahamutAppInstanceNotification.TYPE_REGIST_APP_INSTANCE); } return false; }
public KeepAliveObserver StartKeepAlive(BahamutAppInstance instance) { var observer = new KeepAliveObserver(); var thread = new Thread(() => { var idKey = instance.GetInstanceIdKey(); while (true) { try { var db = redis.GetDatabase(); if (db.KeyExpire(idKey, AppInstanceExpireTime)) { observer.DispatchExpireOnce(instance); }else { observer.DispatchExpireError(instance, new Exception("Expire Instance Error")); } } catch (Exception ex) { observer.DispatchExpireError(instance, ex); } Thread.Sleep((int)(AppInstanceExpireTime.TotalMilliseconds * 3 / 4)); } }); thread.IsBackground = true; thread.Start(); return observer; }