示例#1
0
        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);
                }
            }
        }
示例#2
0
        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()");
        }