Topic: Отображение активных пользователей - "Кто онлайн"

Здравствуйте, может у кого то есть уже такие проекты.

Каким способом можно отображать активных участников у которых запущена программа и не нагружая саму программу.
1. Отображать кто сейчас находится в программе (у кого открыто приложение);
2. Запретить запуск более одной программы на компьютере.

Re: Отображение активных пользователей - "Кто онлайн"

Hi,
If you want to display who is currently using your program, this implies that your users actually sign-in to your program, possibly using the standard 'role based' functionality built in to MVD.
Working on this assumption, you could:
1.   add a new field to the '_user' table (for examle 'on_line' - type of boolean)
2.   in a simple script, set 'on_line' to 1 when a user logs in and set 'on_line' to 0 when a user logs out.
3.  use a tool such as DB Browser to interrogate the relevant sqlite.db.(or write another MVD program that shares the sqlite.db to display who is logged on).
4.  using the 'on_line' field in the '_user' table to count how many users are online, you could display a message to show the program is already in use.
Derek.

Re: Отображение активных пользователей - "Кто онлайн"

derek wrote:

Hi,
If you want to display who is currently using your program, this implies that your users actually sign-in to your program, possibly using the standard 'role based' functionality built in to MVD.
Working on this assumption, you could:
1.   add a new field to the '_user' table (for examle 'on_line' - type of boolean)
2.   in a simple script, set 'on_line' to 1 when a user logs in and set 'on_line' to 0 when a user logs out.
3.  use a tool such as DB Browser to interrogate the relevant sqlite.db.(or write another MVD program that shares the sqlite.db to display who is logged on).
4.  using the 'on_line' field in the '_user' table to count how many users are online, you could display a message to show the program is already in use.
Derek.

Спасибо DEREK
А можно предоставить пример, если Вас не затруднит.
И возможно такое что через определенное количество минут обновлялся статус (кто онлайн) у пользователей.

4 (edited by k245 2024-07-22 06:58:33)

Re: Отображение активных пользователей - "Кто онлайн"

1. Чтобы сделать решение независимым от СУБД, придется использовать решение, которое все же будет "напрягать" программу, в некотором смысле.  Добавление поля on_line - самое простое решение, но у него есть недостаток: в случае аварийного завершения программы пользователь так и останется отмеченным он-лайн. Если требуется более достоверная информация, то это поле нужно сделать типа DateTime, а приложение должно обновлять его каждую минуту (по таймеру). В этом случае можно определять подключенных пользователей с точностью в одну минуту. Но есть тут подводный камень: для MySQL все будет точно, так как время в базу будет записываться серверное, а вот в SQLite каждый компьютер будет записывать своё локальное время.


2. Контроль числа запущенных экземпляров правильно бы сделать на мьютексах, но их в MVDB нет, остается вариант с поиском запущенной копии по заголовку окна.

// Не мьютекс, но работает почти всегда)))
// Проверка заголовка главной формы

const
  APP_NAME = 'My App Name';

procedure Form1_OnShow(Sender: string; Action: string);
begin
  Form1.Caption := '';
  if FindWindow(nil, APP_NAME) <> 0 then
  begin
    ShowMessage('Application is already launched.');
    Form1.Close;
  end;
  Form1.Caption := APP_NAME;
end;

Этот пример и другие решения можно найти в "Руководство разработчика" - это база знаний, куда вы сможете добавлять свои собственные находки.
https://k245.ru/software-ru/is-ru/rukov … chika.html

Визуальное программирование: блог и телеграм-канал.