private Guid OpenInternal(string address, string dataBase, string userID, SecureString password) { this.address = AddressUtility.GetDisplayAddress(address); this.log = new LogService(this.address.Replace(':', '_'), userID, AppUtility.UserAppDataPath); this.log.Verbose = this.verbose; this.userContext = new UserContext(this, this.ipAddress, serviceInfos[nameof(UserService)], userID, password); var user = this.userContext.Users[userID]; user.SetUserState(UserState.Online); this.userID = userID; this.authority = user.Authority; this.dataBases = new DataBaseCollection(this, this.ipAddress, dataBase, serviceInfos[nameof(DataBaseCollectionService)]); this.domainContext = new DomainContext(this, this.ipAddress, serviceInfos[nameof(DomainService)]); this.isConnected = true; this.configs = new CremaConfiguration(this.ConfigPath); this.plugins = this.container.GetService(typeof(IEnumerable <IPlugin>)) as IEnumerable <IPlugin>; foreach (var item in this.plugins) { var authentication = new Authentication(new AuthenticationProvider(user), item.ID); this.authentications.Add(authentication); item.Initialize(authentication); } this.OnOpened(EventArgs.Empty); this.token = Guid.NewGuid(); CremaLog.Info($"Crema opened : {address} {userID}"); return(token); }
public Guid Open(string address, string userID, SecureString password) { if (this.isConnected == true) { throw new InvalidOperationException(Resources.Exception_AlreadyConnected); } this.ipAddress = AddressUtility.GetIPAddress(address); this.serviceInfos = GetServiceInfo(address).ToDictionary(item => item.Name); this.OnOpening(EventArgs.Empty); return(this.dispatcher.Invoke(() => { try { this.address = AddressUtility.GetDisplayAddress(address); this.log = new LogService(this.address.Replace(':', '_'), userID, AppUtility.UserAppDataPath); this.log.Verbose = this.verbose; this.userContext = new UserContext(this, this.ipAddress, serviceInfos[nameof(UserService)], userID, password); var user = this.userContext.Users[userID]; user.SetUserState(UserState.Online); this.userID = userID; this.authority = user.Authority; this.dataBases = new DataBaseCollection(this, this.ipAddress, serviceInfos[nameof(DataBaseCollectionService)]); this.domainContext = new DomainContext(this, this.ipAddress, serviceInfos[nameof(DomainService)]); this.isConnected = true; this.configs = new CremaConfiguration(this.ConfigPath); this.plugins = this.container.GetService(typeof(IEnumerable <IPlugin>)) as IEnumerable <IPlugin>; foreach (var item in this.plugins) { var authentication = new Authentication(new AuthenticationProvider(user), item.ID); this.authentications.Add(authentication); item.Initialize(authentication); } this.OnOpened(EventArgs.Empty); this.token = Guid.NewGuid(); CremaLog.Info($"Crema opened : {address} {userID}"); return token; } catch { this.userContext?.Close(CloseInfo.Empty); this.userContext = null; this.log?.Dispose(); this.log = null; this.address = null; throw; } })); }
public void Open() { this.OnOpening(EventArgs.Empty); this.dispatcher.Invoke(() => { this.Info(Resources.Message_ProgramInfo, AppUtility.ProductName, AppUtility.ProductVersion); this.repository = this.repositoryProvider.CreateInstance(this.repositoryPath, this.workingPath); this.Info("Repository module : {0}", this.settings.RepositoryModule); this.Info("Repository path : " + this.repositoryPath); foreach (var logger in this.GetService <IEnumerable <ILogService> >()) { this.Info($"{logger.Name} log path : {logger.FileName}"); } this.Info(Resources.Message_ServiceStart); this.configs = new CremaConfiguration(Path.Combine(this.basePath, "configs.xml"), this.propertiesProvider); this.userContext = new UserContext(this); this.userContext.Dispatcher.Invoke(() => this.userContext.Initialize()); this.dataBases = new DataBaseCollection(this); this.domainContext = new DomainContext(this, this.userContext); if (this.settings.NoCache == false) { foreach (var item in this.dataBases) { this.domainContext.Restore(Authentication.System, item); } } this.plugins = this.container.GetService(typeof(IEnumerable <IPlugin>)) as IEnumerable <IPlugin>; this.plugins = this.plugins.TopologicalSort(); foreach (var item in this.plugins) { var authentication = new Authentication(new AuthenticationProvider(item), item.ID); item.Initialize(authentication); this.Info("Plugin : {0}", item.Name); } this.dispatcher.InvokeAsync(() => this.dataBases.RestoreState(this.settings)); GC.Collect(); this.Info("Crema module has been started."); this.OnOpened(EventArgs.Empty); }); }