Добрый день.
Описание:
При подключении пользователя я получаю его id
,
var id = Context.User.Identity.GetUserId();
который соответствует id из БД
, и сохраняю его в память.
Таблица 1:
|Connectionid|id_из_БД(UserId)|
| Guid | 1 |
| * | 2 |
| * | 3 |
| * | 4 |
| * | 5 |
Каждый пользователя может состоять в нескольких событиях, информация о которых хранится в таблицах БД:
Таблица 2:
Таблица Meeting в БД Таблица Event в БД
|MeetingId|UserId| |EventId|UserId|
| 1 | 1 | | 1 | 1 |
| 1 | 3 | | 1 | 2 |
| 2 | 2 | | 1 | 5 |
При подключении пользователя к Hub
, он попадает в "Общую комнату" и должен отправить сообщение (автоматически по таймеру) всем пользователям в этой комнате, за исключением пользователей находящихся в "MeetingRoom" и "EventRoom" комнатах, если он с ними не состоит в этом событии(нет записи в таблице "Meeting" или "Event" БД). НО: Пользователи из "MeetingRoom" и "EventRoom" комнат также должны отправлять сообщения всем, кроме пользователей которые сейчас находятся в комнате "MeetingRoom" и "EventRoom" и не состоят в одном событии (нет записи в таблице "Meeting" или "Event" соответственно).
Пример: Предположим пользователи сейчас расположились в комнатах так.
Таблица 3:
Общая комната: MeetingRoom EventRoom
[UserId] [UserId] [UserId]
3 1 2
4 5
Список пользователей, который состоят в Event и Meeting см. в Таблице 2.
Пользователь 4 должен отправить сообщение только пользователю 3, т.к. пользователь 4 не состоит не в одном Meeting и Event (таблица в БД).
Пользователь 3 должен отправить сообщение пользователю 4 и 1, т.к. мы должны отправлять сообщения всем пользователям из общей комнаты и только тем пользователям, которые с нами в таблице "Meeting" или "Event" и находятся в этих комнатах.
Пользователь 2 должен отправить сообщение пользователям 3 и 4, пользователю 5 не отправляет т.к. пользователь хоть и состоит с пользователем 2 в одном "Event", но его нет в "EventRoom" и нет в общей комнате, также не отправляет пользователю 1 т.к. не состоит с ним в одном "Meeting"
Пользователи 1 и 5 должны отправить свои сообщения пользователям 2,3,4.
Каждый пользователь может быть только в 1 комнате в 1 единицу времени.
Решение, которое есть В Таблице 1 определили еще 1 поле в котором хранится сообщение. Для его получения, клиент с определённой периодичностью вызывает функцию на сервере, которая возвращает все сообщения, от пользователей с учетом фильтрации (список пользователей получается тяжелым запросом из БД).
То, что хочу (и уже долго пытаюсь) реализовать Оптимальное решение задачи, есть еще идея создать структуру в RAM (например, хеш-таблицу), чтобы пользователи отправляли сообщения другим с учётом фильтрации, которая бы позволила уменьшить количество обращений к базе. Возникает проблема со сложностью фильтрации.
Прошу от вас идей, намеков и хоть чего-то, что помогло бы решить такую задачу. Всем спасибо.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Создал сочетание клавиш Ctrl+O и Ctrl+АПри нажатии все работает, как я хотел, но проигрывается стандартный звук «Восклицание»
Использую ListView для отображения логовИногда в логе бывают ссылки (напимер, "Некорректная ссылка: http://example
Имеется такая функция, которая вызывает сама себя, то есть рекурсивнаяДопустим n = 5
Сейчас я только понял как добавить в источники данных БДДальше не могу понять, как поступить дальше