Web app logon.
This commit is contained in:
@@ -29,9 +29,12 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Control.App
|
||||
private PropertySet propertySet;
|
||||
private Dictionary<String, SbmAppConfig> appConfigs = new Dictionary<string, SbmAppConfig>();
|
||||
private Dictionary<String, SbmEmailConfig> emailConfigs = new Dictionary<string, SbmEmailConfig>();
|
||||
ushort sessionContextIdx_Control = 0;
|
||||
// Singular databases.
|
||||
private ISacsDatabase controlDatabase = null;
|
||||
private ISacsDatabase templateDatabase = null;
|
||||
// Session contexts.
|
||||
private static ushort sessionContextIdx_Next = 100;
|
||||
private ushort sessionContextIdx_Control = 0;
|
||||
private class SessionContextData
|
||||
{
|
||||
public SessionContextData(SbmSessionContext_Web sessionContext)
|
||||
@@ -39,8 +42,8 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Control.App
|
||||
SessionContext = sessionContext;
|
||||
}
|
||||
public SbmSessionContext_Web SessionContext { get; }
|
||||
public ISacsDatabase ControlDatabase { get; set; }
|
||||
public ISacsDatabase BusMgrDatabase { get; set; }
|
||||
public List<string> DbIdentifiers { get; } = new List<string>();
|
||||
public ISacsDatabase BusMgrDatabase { get; set; }
|
||||
}
|
||||
private readonly Dictionary<ushort, SessionContextData> sessionContexts = new Dictionary<ushort, SessionContextData>();
|
||||
|
||||
@@ -58,7 +61,7 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Control.App
|
||||
catch (Exception exc)
|
||||
{
|
||||
SaLogger.Error(GetType().Name + ".CTR " + ExceptionUtil.GetErrorStateMessage(exc));
|
||||
throw exc;
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -76,11 +79,19 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Control.App
|
||||
{
|
||||
return sessionContexts.GetValue(index, null)?.SessionContext ?? null;
|
||||
}
|
||||
public override ISacsDatabase GetControlDatabase(SbmSessionContext sessionContext)
|
||||
public override ISacsDatabase GetControlDatabase()
|
||||
{
|
||||
return sessionContexts.GetValue(sessionContext.Index, null)?.ControlDatabase;
|
||||
return controlDatabase;
|
||||
}
|
||||
public override ISacsDatabase GetBusMgrDatabase(SbmSessionContext sessionContext)
|
||||
public override ISacsDatabase GetTemplateDatabase()
|
||||
{
|
||||
return templateDatabase;
|
||||
}
|
||||
public override List<string> GetDbIdentifiers(SbmSessionContext sessionContext)
|
||||
{
|
||||
return sessionContexts.GetValue(sessionContext.Index, null)?.DbIdentifiers ?? new List<string>();
|
||||
}
|
||||
public override ISacsDatabase GetBusMgrDatabase(SbmSessionContext sessionContext)
|
||||
{
|
||||
return sessionContexts.GetValue(sessionContext.Index, null)?.BusMgrDatabase;
|
||||
}
|
||||
@@ -136,29 +147,46 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Control.App
|
||||
LogApplicationStart(fn);
|
||||
|
||||
// Control database connection.
|
||||
SacsDatabaseConsole.OdbcConfig config = new SacsDatabaseConsole.OdbcConfig();
|
||||
config.location = AppConfig.ControlDatabase.Location;
|
||||
config.user = AppConfig.ControlDatabase.User;
|
||||
config.pword = AppConfig.ControlDatabase.Password;
|
||||
SacsDatabase controlDatabase = SacsDatabaseConsole.OpenOdbcDatabase(config);
|
||||
SacsDatabaseConsole.OdbcConfig odbcConfig = new SacsDatabaseConsole.OdbcConfig();
|
||||
odbcConfig.location = AppConfig.ControlDatabase.Location;
|
||||
odbcConfig.user = AppConfig.ControlDatabase.User;
|
||||
odbcConfig.pword = AppConfig.ControlDatabase.Password;
|
||||
controlDatabase = SacsDatabaseConsole.OpenOdbcDatabase(odbcConfig);
|
||||
if (controlDatabase.HasErrorState())
|
||||
SaLogger.Warn(fn + " Control Database initialisation error: " + controlDatabase.ErrorStateMessage);
|
||||
|
||||
// BusinessMgr database connection.
|
||||
config = new SacsDatabaseConsole.OdbcConfig();
|
||||
config.location = AppConfig.BusMgrDatabase.Location;
|
||||
config.user = AppConfig.BusMgrDatabase.User;
|
||||
config.pword = AppConfig.BusMgrDatabase.Password;
|
||||
SacsDatabase busMgrDatabase = SacsDatabaseConsole.OpenOdbcDatabase(config);
|
||||
if (busMgrDatabase.HasErrorState())
|
||||
SaLogger.Warn(fn + " BusMgr Database initialisation error: " + busMgrDatabase.ErrorStateMessage);
|
||||
// Template database connection.
|
||||
if (AppConfig.TemplateDatabase != null)
|
||||
{
|
||||
odbcConfig = new SacsDatabaseConsole.OdbcConfig();
|
||||
odbcConfig.location = AppConfig.TemplateDatabase.Location;
|
||||
odbcConfig.user = AppConfig.TemplateDatabase.User;
|
||||
odbcConfig.pword = AppConfig.TemplateDatabase.Password;
|
||||
templateDatabase = SacsDatabaseConsole.OpenOdbcDatabase(odbcConfig);
|
||||
if (templateDatabase.HasErrorState())
|
||||
SaLogger.Warn(fn + " Template Database initialisation error: " + controlDatabase.ErrorStateMessage);
|
||||
}
|
||||
|
||||
// Session context - only one context available/necessary (for now).
|
||||
sessionContextIdx_Control = sessionContextIdx_Next++;
|
||||
SessionContextData sessionContextData = new SessionContextData(new SbmSessionContext_Web(sessionContextIdx_Control, Sbm.Application.WebControl));
|
||||
sessionContextData.ControlDatabase = controlDatabase;
|
||||
sessionContextData.BusMgrDatabase = busMgrDatabase;
|
||||
sessionContexts.Add(sessionContextData.SessionContext.Index, sessionContextData);
|
||||
// BusinessMgr database connections.
|
||||
foreach (SbmAppConfig.DatabaseConfig dbConfig in AppConfig.BusMgrDatabases)
|
||||
{
|
||||
odbcConfig = new SacsDatabaseConsole.OdbcConfig();
|
||||
odbcConfig.location = dbConfig.Location;
|
||||
odbcConfig.user = dbConfig.User;
|
||||
odbcConfig.pword = dbConfig.Password;
|
||||
SacsDatabase busMgrDatabase = SacsDatabaseConsole.OpenOdbcDatabase(odbcConfig);
|
||||
if (busMgrDatabase.HasErrorState())
|
||||
SaLogger.Warn(fn + " BusMgr Database: " + busMgrDatabase.DatabaseName + ". Initialisation error: " + busMgrDatabase.ErrorStateMessage);
|
||||
|
||||
// Session context.
|
||||
ushort sessionContextIdx = sessionContextIdx_Next++;
|
||||
if (sessionContextIdx_Control < 1)
|
||||
sessionContextIdx_Control = sessionContextIdx;
|
||||
SessionContextData sessionContextData = new SessionContextData(new SbmSessionContext_Web(sessionContextIdx, Sbm.Application.WebControl));
|
||||
sessionContextData.DbIdentifiers.AddRange(dbConfig.Identifiers);
|
||||
sessionContextData.BusMgrDatabase = busMgrDatabase;
|
||||
sessionContexts.Add(sessionContextData.SessionContext.Index, sessionContextData);
|
||||
}
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
@@ -166,9 +194,8 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Control.App
|
||||
}
|
||||
|
||||
// Occasional startup processing.
|
||||
SbmSessionContext sessionContext = GetSessionContext(sessionContextIdx_Control);
|
||||
if (generateDatabaseDefinitions_Control)
|
||||
GenerateDatabaseDefinition(sessionContext, SbmDbDfnGenerator.DatabaseInstance.Control, GetControlDatabase(sessionContext));
|
||||
GenerateDatabaseDefinition(SbmDbDfnGenerator.DatabaseInstance.Control, GetControlDatabase());
|
||||
if (generateDatabaseDefinitions_BusMgr)
|
||||
{
|
||||
// Use the 'template' database connection parameters.
|
||||
@@ -176,24 +203,24 @@ namespace Sarand.BusinessMgr.Net.Core.Web.Control.App
|
||||
config.location = AppConfig.TemplateDatabase.Location;
|
||||
config.user = AppConfig.TemplateDatabase.User;
|
||||
config.pword = AppConfig.TemplateDatabase.Password;
|
||||
GenerateDatabaseDefinition(sessionContext, SbmDbDfnGenerator.DatabaseInstance.BusinessMgr, SacsDatabaseConsole.GenerateConnectionString(config));
|
||||
GenerateDatabaseDefinition(SbmDbDfnGenerator.DatabaseInstance.BusinessMgr, GetTemplateDatabase());
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Generate database definition.
|
||||
private void GenerateDatabaseDefinition(SbmSessionContext sessionContext, SbmDbDfnGenerator.DatabaseInstance dbInstance, ISacsDatabase db)
|
||||
private void GenerateDatabaseDefinition(SbmDbDfnGenerator.DatabaseInstance dbInstance, ISacsDatabase db)
|
||||
{
|
||||
if (!generateDatabaseDefinitions_BusMgr || !SbmSystem.DebugMode || sessionContext == null) return;
|
||||
if (!generateDatabaseDefinitions_BusMgr || !SbmSystem.DebugMode) return;
|
||||
if (!StringUtil.EmptyOnNull(EnvironmentName).EqualsCI("Development")) return;
|
||||
if (db == null || StringUtil.IsEmpty(db.ConnectionString)) return;
|
||||
|
||||
// Generate database definitions.
|
||||
GenerateDatabaseDefinition(sessionContext, dbInstance, db.ConnectionString);
|
||||
GenerateDatabaseDefinition(dbInstance, db.ConnectionString);
|
||||
}
|
||||
private void GenerateDatabaseDefinition(SbmSessionContext sessionContext, SbmDbDfnGenerator.DatabaseInstance dbInstance, String connectionString)
|
||||
private void GenerateDatabaseDefinition(SbmDbDfnGenerator.DatabaseInstance dbInstance, String connectionString)
|
||||
{
|
||||
if (!generateDatabaseDefinitions_BusMgr || !SbmSystem.DebugMode || sessionContext == null) return;
|
||||
if (!generateDatabaseDefinitions_BusMgr || !SbmSystem.DebugMode) return;
|
||||
if (!StringUtil.EmptyOnNull(EnvironmentName).EqualsCI("Development")) return;
|
||||
if (StringUtil.IsEmpty(connectionString)) return;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user