Автор | Сообщение |
|
| постоянный участник
|
Пост N: 5901
Зарегистрирован: 12.09.06
|
|
Отправлено: 05.06.18 18:51. Заголовок: Кто вошел в программу / Who logged in application ?
Что то достали меня юзера при режиме обновления баз программы. Т.е. нужно одному юзеру войти в программу и обновить базы (если есть обновление) в монопольном режиме. А они стали тупить, других юзеров не выгоняют из программы. Программа работает в сети (файл-серверный вариант) или на серверном компе (сервер-терминалов вариант). И ещё появилась БОЛЬШАЯ потребность - определить сколько юзеров в программе, т.е. сделать запрет запуска программы, если кол-во рабочих станций больше заданного параметра (допустим разрешён запуск 5 программ в сети или на сервере-терминалов). Я знаю и применяю у себя такой простой вариант: через логин-файл-журнал входа в программу. DBF-файл открываю в многопользовательком режиме и записываю запись при входе нового пользователя. При выходе из программы - удаляю пользователя. Недостаток этого варианта - если комп "отвалиться" от сети - ушедший юзер будет числиться подключённым к программе. Можно сделать опрос допустим через семафорный файл, но тогда нужно допустим каждые 30-40 сек. опрашивать наличие семафорного файла по указанному пути. Это будет не слишком затратной операцией ? Почитал про Мультивещание - https://ru.m.wikipedia.org/wiki/%D0%9C%D1%83%D0%BB%D1%8C%D1%82%D0%B8%D0%B2%D0%B5%D1%89%D0%B0%D0%BD%D0%B8%D0%B5 или http://linkmeup.ru/blog/129.html Интересно, но сколько кода писать нужно.... Предложили мне вариант создание службы для своей программы ! Пока читаю... Кто и какие варианты делает для опроса из своей программы - "Кто вошел в программу" ?
|
|
|
Новых ответов нет
[см. все]
|
|
|
| |
Пост N: 590
Зарегистрирован: 17.06.10
|
|
Отправлено: 05.06.18 19:51. Заголовок: В одной задаче испол..
В одной задаче использовал журнал (локирование строки и признак нормального выхода) В другой вешал сокет на сервер и юзера, при открытии своей проги, коннектились с этим сокетом. А уж он сам разбирался кто как отвалился. Правда я это делал для юзеров, которые обращались к серверу с таблетки по внешнему IP
|
|
|
|
| постоянный участник
|
Пост N: 1837
Зарегистрирован: 17.02.12
|
|
Отправлено: 05.06.18 21:04. Заголовок: Andrey пишет Кто и к..
Andrey пишет цитата: | Кто и какие варианты делает для опроса из своей программы - "Кто вошел в программу" ? |
| LetoDb - переменные памяти. Добавь в свою программу LetoDb только для этих дел (регистрация пользователей в переменных памяти и контроль кол-ва) , потом, со временем, исп. Lock\Unlock команды сервера для замены версии\баз ... Leto, как понимаю будет локальным
|
|
|
|
| постоянный участник
|
Пост N: 1838
Зарегистрирован: 17.02.12
|
|
Отправлено: 05.06.18 21:11. Заголовок: PS Можешь контроль в..
PS Можешь контроль входа user, password перевести на LetoDb - тогда больше 5 (?) не подконнектятся и будет тебе ... ну что то будет
|
|
|
|
| постоянный участник
|
Пост N: 5902
Зарегистрирован: 12.09.06
|
|
Отправлено: 05.06.18 22:35. Заголовок: SergKis пишет: Leto..
SergKis пишет: цитата: | LetoDb - переменные памяти. |
| К сожалению не могу использовать это. Не у всех стоит модуль передачи баз по LetoDb. Большая часть вообще использует локальный вариант - одну программу. Хотя в этой идее что-то есть ! Буду думать... Если на главное окно программы повесить таймер и каждые 60 сек. записывать (код оператора+имя оператора) в DBF-файл, то это сильно будет напрягать систему ?
|
|
|
|
| |
Пост N: 6839
Зарегистрирован: 17.05.05
|
|
Отправлено: 05.06.18 22:58. Заголовок: Andrey пишет: запис..
Andrey пишет: цитата: | записывать (код оператора+имя оператора) в DBF-файл, то это сильно будет напрягать систему ? |
| Не попробуешь , не узнаешь.
|
|
|
|
| постоянный участник
|
Пост N: 1839
Зарегистрирован: 17.02.12
|
|
Отправлено: 06.06.18 04:45. Заголовок: Andrey пишетэто силь..
Andrey пишет цитата: | это сильно будет напрягать систему ? |
| Посмотри еще раз пример из темы GUI "Вылет из программы" http://my-files.ru/gkupot Жми кнопку Start пока не надоест и смотри как работает перемещение, выбор даты в календаре. На каждом окне два таймера на 200 и 1000 миллисекунд цитата: | Не у всех стоит модуль передачи баз по LetoDb. |
| Ты не внимательно прочитал, я предложил ставить leto local у программы, не связанной с существ. передачей данных. Исп. для коннекта и контроля user-ов, смены версии, базы использовав Lock\Unlock сервера (блокируя работу) Плюс можно организовать сообщения user-ам о приостановке работы на время тех. работ цитата: | записывать (код оператора+имя оператора) в DBF-файл |
| Добавь дату, время для актуальности, что бы понимать, что не отвалился\подвис user
|
|
|
|
| |
Пост N: 627
Зарегистрирован: 08.07.06
|
|
Отправлено: 06.06.18 16:02. Заголовок: Использую простейший..
Использую простейший вариант: в папке с данным \\srvr\data создал каталог \logs, куда при старте программы каждый ее экземпляр скидывает текстовый файл-семафор с диагностической инфой. Файл назван по имени рабочей станции, например: work_056.log - т.е. признак того, что программа номер 056 запущена. Фоновый процесс, запущенный по hb_IdleAdd() обновляет его раз в минуту: внутрь пишется код текущего юзера, всякие MEMORY(x), стек вызовов через PROCNAME(x) / PROCLINE(x) и тп фигню. В случае корректного выхода и/или контролируемого Run Time Error - файл удаляется. В случае зависа/reset/выдергивания шнура питания из UPS - файл остается, но и дата/время файла больше не обновляется. Таким образом, в любой момент времени ясно, кто в базе и чем занят. А если дата/время файла-семафора сильно отличается от текущего - значит, нужно выяснить - что случилось: может идет кл длительный процесс отчета или реально кто-то сделал перезагрузку/выключение винды и его ждет пистон... Кроме этого, на время обслуживания в этом-же каталоге появляется семафор stop_325.log - это значит, что машина 325 делает "что-то" такое с базой (например, реиндекс), что дальнейший вход юзеров невозможен: текущих обзваниваем, обходим, пишем смс, а новые - ждут разрешения на вход в БД до тех пор, пока в каталоге есть файл stop_*.log. Внутри него обычно пишется причина: например, восстановление после аварии, реиндекс, и планируемое время завершения обслуживания и имя юзера, который выполняет обслуживание. Ожидающий разрешения юзер это "видит" в сообщении и может использовать свое рабочее время более рационально. Например, за это время позвонить нескольким клиентам. Надежно работает уже более 20 лет. Думал сначала "модернизировать" и хранить все в одной табличке согласно записям, но с файлами произвольного формата мне оказалось удобнее работать.
|
|
|
|
| |
Пост N: 7925
Зарегистрирован: 17.05.05
|
|
Отправлено: 09.01.24 20:18. Заголовок: Sergy Можешь показа..
Sergy Можешь показать кусочек лога ? Тоже продумываю эту тему
|
|
|
|