private bool fail = false; // удалять пользователя или нет #endregion Fields #region Constructors /// <summary> /// Инициализирует новый экземпляр класса /// </summary> protected User() { handle = new Handle(); selected = false; mode = UserMode.Active; indexes = new List<int>(); }
/// <summary> /// Очистить список параметров для отправки пользователю /// </summary> /// <param name="handle">Описатель пользователя</param> public void ClearSelectedParameters(Handle handle) { try { locker.AcquireReaderLock(100); try { foreach (var user in users) { if (user.Handle.Identifier == handle.Identifier) { user.ClearIndexes(); user.Selected = false; } } } finally { locker.ReleaseReaderLock(); } } catch { } }
/// <summary> /// Присвоить параметру указанное значение /// </summary> /// <param name="handle">Описатель пользователя</param> /// <param name="Index">Номер параметра в списке</param> /// <param name="Value">Значение которое присвоить параметру</param> public void SetParameterValue(Handle handle, Int32 Index, Single Value) { try { locker.AcquireReaderLock(100); try { foreach (var user in users) { if (user.Handle.Identifier == handle.Identifier) { if (app != null) { app.Converter.SetParameterValue(Index, Value); } } } } finally { locker.ReleaseReaderLock(); } } catch { } }
/// <summary> /// Установить режим работы /// </summary> /// <param name="mode">Требуемый режим работы</param> /// <param name="handle">Описатель пользователя для которого установливается режим работы</param> public void SetMode(Handle handle, UserMode mode) { try { locker.AcquireWriterLock(500); try { foreach (User user in users) { if (user.Handle.Identifier == handle.Identifier) { user.Mode = mode; break; } } } finally { locker.ReleaseWriterLock(); } } catch { } return; }
// ---- команды управления параметрами ---- /// <summary> /// Установить параметры, которые необходимо передавать /// </summary> /// <param name="handle">Идентификатор пользователя</param> /// <param name="Indexes">Массив индексов параметров</param> public void SelectParameters(Handle handle, int[] Indexes) { try { locker.AcquireReaderLock(100); try { foreach (var user in users) { if (user.Handle.Identifier == handle.Identifier) { if (Indexes != null) { user.SetIndexes(Indexes); user.Selected = true; } return; } } } finally { locker.ReleaseReaderLock(); } } catch { } }
/// <summary> /// Запросить срез данных /// </summary> /// <param name="handle">Дескриптор пользователя</param> public void RequestDataSlice(Handle handle) { try { locker.AcquireReaderLock(100); try { foreach (var user in users) { if (user.Handle.Identifier == handle.Identifier) { DateTime now = DateTime.Now; Float[] results = app.Converter.GetResults(); if (results != null) { Single[] slice = new float[results.Length]; for (int i = 0; i < results.Length; i++) { slice[i] = results[i].GetCurrentValue(); } if (user.Selected) SendToUser(user, now, slice); else user.Interface.SendAll(now, slice); } } } } finally { locker.ReleaseReaderLock(); } } catch { } }
/// <summary> /// Получить текущий режим работы пользователя /// </summary> /// <param name="handle">Описатель пользователя</param> /// <returns>Текущий режим работы пользователя</returns> public UserMode GetCurrentMode(Handle handle) { try { locker.AcquireReaderLock(300); try { foreach (User user in users) { if (user.Handle.Identifier == handle.Identifier) { return user.Mode; } } } finally { locker.ReleaseReaderLock(); } } catch { } return UserMode.Default; }