public UserAppEngine(UserAppConfiguration configuration, VisionChannel visionChannel) { Configuration = configuration; _visionChannel = visionChannel; _visionChannel.ClearModules(); _visionChannel.RegisterVisibleModule(VisionChannelSourceId, "UA", this); _drpPeerEngine = new DrpPeerEngine(new DrpPeerEngineConfiguration { VisionChannel = _visionChannel, VisionChannelSourceId = VisionChannelSourceId }); _db = new UserAppDatabase(_drpPeerEngine.CryptoLibrary, configuration.DatabaseKeyProvider, _visionChannel, VisionChannelSourceId, configuration.DatabaseBasePathNullable); LocalUsers = new Dictionary <int, LocalUser>(); var userRegistrationIDs = _db.GetUserRegistrationIDs(); foreach (var u in _db.GetUsers(true)) { var rootUserKeys = _db.GetRootUserKeys(u.Id); if (rootUserKeys != null) { var localUser = new LocalUser { User = u, RootUserKeys = rootUserKeys, }; if (!userRegistrationIDs.TryGetValue(u.Id, out localUser.UserRegistrationIDs)) { localUser.UserRegistrationIDs = new List <UserRegistrationID>(); } LocalUsers.Add(u.Id, localUser); localUser.CreateLocalDrpPeers(this); } } WriteToLog_deepDetail($"loaded {LocalUsers.Count} local users"); foreach (var contactUser in _db.GetUsers(false)) { if (LocalUsers.TryGetValue(contactUser.OwnerLocalUserId, out var localUser)) { var contact = new Contact { User = contactUser }; if (!userRegistrationIDs.TryGetValue(contact.User.Id, out contact.RegistrationIDs)) { contact.RegistrationIDs = new List <UserRegistrationID>(); } localUser.Contacts.Add(contact.User.Id, contact); } } }
public void Dispose() { WriteToLog_deepDetail(">> UserAppEngine.Dispose()"); WriteToLog_deepDetail($"destroying local users..."); foreach (var localUser in LocalUsers.Values) { localUser.Dispose(); } WriteToLog_deepDetail($"destroying DRP peer engine..."); _drpPeerEngine.Dispose(); WriteToLog_deepDetail($"destroying database..."); _db?.Dispose(); _db = null; WriteToLog_deepDetail("<< UserAppEngine.Dispose()"); }