Hej,
Utknałem trochę na planowaniu jak przechować listę aktywnych użytkowników.

Aktualnie mam tak: (używam Identity)
< tutaj pomijam frontend wysyla command z danymi logowania -> back end loguje, wydaje token itp >
Po udanej autoryzacji ---> front-end i back-end mam zwiazany SignalR'em.

W momencie OnConnected (w hubie):
Pobieram Name i ConnectionId (obydwa z Context) oraz wyciagam userId z claimów.
Zapisuje to do No-Sql (chwilowo MongoDb ale przymiezam sie do Redis'a) bazy jako model ConnectedUser.
W przypadku jak user z danym Id istnieje to poporstu dodaje connectionID do listy jego połączeń, jak user nie istnieje to tworze nowy rekord.
Jeżeli jest to pierwszy connectionId -> rozglaszam to również do innych użytkowników (signalR)

OnDisconnected (w hubie):
Usuwam dany connectionId z listy (jak istnieje) -> i w przypadku kiedy jest < 0 -> usuwam usera.
(connectionId lista -> potrzebna żeby przechowywać usera jeżeli połączył się z kilku urządzeń, jak wyloguje się z jednego a nadal jest zalogowany z innych to bedzie nadal dostępny)

Czy lepiej jest jeszcze dodatkowo przechowywac aktywnych userów gdzies w bazie albo np w modelu User dodac pozycje IsActive (bool) i dawać na true/false?

I jeszcze jeden problem:
Czy w momencie kiedy user zaloguje się na pierwszym connectionID (tzn w ogóle nie był zalogowany) i rozgłaszam że jest już dostępny to lepiej jest:
a. Wysłać tą informację do wszystkich (i tylko zainteresowani to obsłużą)
b. Wyciagnac najpierw liste "friendsow" danego usera -> sprawdzic którzy są online -> rozeslac.

Czy przechowywać gdzieś dodatkowo informacje o aktywnych "friendsach" ? Czy po prostu sprwadzac za każdym razem baze?

Działać to mi to działa ale chciałbym żeby to było zrobione porządnie i prawidłowo.
Byłbym wdzięczny za jakiekolwiek wskazówki.
Dzięki.