/// <summary> /// The set lock. /// </summary> /// <param name="LockKey"> /// The lock key. /// </param> /// <param name="userName"> /// The user name. /// </param> /// <returns> /// The set lock. /// </returns> /// <exception cref="DataServiceNotFoundException"> /// </exception> public string SetLock(string LockKey, string userName) { if (dataService == null) { throw new DataServiceNotFoundException(); } var ld = new LockData(); ld.LockKey = LockKey; ld.UserName = userName + (UseMachineNameInKey ? " @ " + Environment.MachineName : string.Empty); try { dataService.LoadObject(ld, false, true); return(ld.UserName); } catch { DataObject dobj = ld; dataService.UpdateObject(ref dobj); if (!AllLocks.ContainsKey(ld.CombinedKey())) { AllLocks.Add(ld.CombinedKey(), ld); } return(string.Empty); } }
/// <summary> /// Снять блокировку по ключу для указанного пользователя /// </summary> /// <param name="LockKey"> /// ключ блокировки /// </param> /// <param name="userName"> /// пользователь /// </param> /// <param name="ds"> /// Сервис данных /// </param> public void ClearWebLock(string LockKey, string userName, IDataService ds) { var ld = new LockData(); ld.LockKey = LockKey; ld.UserName = userName; try { ds.LoadObject(ld); ld.SetStatus(ObjectStatus.Deleted); DataObject dobj = ld; ds.UpdateObject(ref dobj); } catch { } }
/// <summary> /// Очистить блокировку /// </summary> /// <param name="LockKey"> /// </param> /// <param name="userName"> /// </param> public void ClearLock(string LockKey, string userName) { if (dataService == null) { throw new DataServiceNotFoundException(); } var ld = new LockData(); ld.LockKey = LockKey; ld.UserName = userName + (UseMachineNameInKey ? " @ " + Environment.MachineName : string.Empty); if (AllLocks.Contains(ld.CombinedKey())) { ld.SetStatus(ObjectStatus.Deleted); DataObject dobj = ld; dataService.UpdateObject(ref dobj); AllLocks.Remove(ld.CombinedKey()); } }
/// <summary> /// Получить блокировку /// </summary> /// <param name="dobj"> /// Объект данных, для которого получаем блокировку /// </param> /// <param name="ds"> /// Сервис данных /// </param> /// <returns> /// The get web lock. /// </returns> public string GetWebLock(DataObject dobj, IDataService ds) { if (ds == null) { throw new DataServiceNotFoundException(); } var ld = new LockData(); ld.LockKey = dobj.GetType().FullName + ":" + dobj.__PrimaryKey; ld.UserName = GetUserName() + (UseMachineNameInKey ? " @ " + Environment.MachineName : string.Empty); try { ds.LoadObject(ld, false, true); return(ld.UserName); } catch { return(string.Empty); } }
/// <summary> /// Установить блокировку /// </summary> /// <param name="LockKey"> /// Ключ /// </param> /// <param name="userName"> /// Пользователь /// </param> /// <param name="ds"> /// Сервис данных /// </param> /// <returns> /// Имя пользователя, под которым блокировка находится, /// string.Empty - если блокировки не было и мы её только поставили /// </returns> public string SetWebLock(string LockKey, string userName, IDataService ds) { var ld = new LockData(); ld.LockKey = LockKey; ld.UserName = userName; try { // try/catch это не является хорошим вариантом // по соображениям производительности, // поэтому, в целях оптимизации скорее всего // придётся переписать данный код на цивилизованную проверку // наличия блокировок ds.LoadObject(ld, false, true); return(ld.UserName); } catch { DataObject dobj = ld; ds.UpdateObject(ref dobj); return(string.Empty); } }