Ich probiere das gerade aus. Soweit passt das TSynDictionary sehr gut in das Konzept.
Allerdings bin ich nun bei meiner Broadcastliste hängen geblieben, welche ich im Zuge der Umstrukturierung auch ändern sollte.
Der Plan war/ist ein Array welches die ID's der eingeloggten User beinhaltet und nur bei Login/Logoff aktivität geupdatet wird.
Es wird für jede ausgehende Nachricht verwendet.
Der Zugriff darauf muss also auch threadsicher sein.
var logged_users:THttpServerConnectionIDDynArray;
Falls ich das Array nicht threadsicher führen kann, besteht die Möglichkeit sie aus dem TSynDictionary abzuleiten.
Aber es will mir nicht gefallen, für jede Nachricht diesen aufwändigen Prozess zu wiederholen.
Ich kann mir aus dem TSynDictionary die Values herausschreiben lassen um an die potenziellen Benutzer zu kommen, jedoch fehlt mit der Key dazu.
Oder anders ausgedrückt:
Delphi-Quellcode:
type
TUser = record
UserName: String;
LoginCount: Integer;
end;
TUserID = Int64;
TUserIDDynArray = array of TUserID; //Key
TUserDynArray = array of TUser; //Value
Ich würde dann jeden Key benötigen, wo der UserName<>'' ist.
Theoretisch könnte ich jetzt auch wieder ein TSynDictionary dafür missbrauchen indem ich key=Value setze.
Oder aber ich füge dem bestehenden TSynDictionary bei TUser noch die ID hinzu.
Nur das ist dann ja auch irgendwie doppelt gemoppelt wenn der Key nochmals in der Struktur der Value auftaucht.
Oder eben eine TThreradlist für das THttpServerConnectionIDDynArray. (Sofern ich es gebacken bekomme das darin abzubilden)