diff --git a/plugins/OWSPluginUE5/OWSPlugin.uplugin b/plugins/OWSPluginUE5/OWSPlugin.uplugin index 39adfc3d2..9cc004029 100644 --- a/plugins/OWSPluginUE5/OWSPlugin.uplugin +++ b/plugins/OWSPluginUE5/OWSPlugin.uplugin @@ -10,7 +10,7 @@ "DocsURL": "https://www.openworldserver.com", "MarketplaceURL": "", "SupportURL": "", - "EngineVersion": "5.5.0", + "EngineVersion": "5.7.0", "CanContainContent": true, "IsBetaVersion": false, "Installed": true, @@ -25,10 +25,6 @@ { "Name": "GameplayAbilities", "Enabled": true - }, - { - "Name": "ReplicationGraph", - "Enabled": true } ] } \ No newline at end of file diff --git a/plugins/OWSPluginUE5/Source/OWSPlugin/Private/OWSAdvancedProjectile.cpp b/plugins/OWSPluginUE5/Source/OWSPlugin/Private/OWSAdvancedProjectile.cpp index 19139319c..ed5dec5a5 100644 --- a/plugins/OWSPluginUE5/Source/OWSPlugin/Private/OWSAdvancedProjectile.cpp +++ b/plugins/OWSPluginUE5/Source/OWSPlugin/Private/OWSAdvancedProjectile.cpp @@ -129,7 +129,7 @@ void AOWSAdvancedProjectile::OnRep_Instigator() //InstigatorTeamNum = GetTeamNum(); // this checks Instigator first InstigatorController = GetInstigator()->Controller; - if (Cast(GetInstigator())) + if (Cast(GetInstigator())) { ((AOWSCharacterWithAbilities*)(GetInstigator()))->LastFiredProjectile = this; } diff --git a/plugins/OWSPluginUE5/Source/OWSPlugin/Private/OWSCharacterMovementComponent.cpp b/plugins/OWSPluginUE5/Source/OWSPlugin/Private/OWSCharacterMovementComponent.cpp index 2f7836ea0..e2dfeefc1 100644 --- a/plugins/OWSPluginUE5/Source/OWSPlugin/Private/OWSCharacterMovementComponent.cpp +++ b/plugins/OWSPluginUE5/Source/OWSPlugin/Private/OWSCharacterMovementComponent.cpp @@ -153,7 +153,7 @@ void UOWSCharacterMovementComponent::OnMovementUpdated(float DeltaTime, const FV APlayerController* OurPlayerController = Cast(CharacterOwner->GetController()); if (OurPlayerController) { - OurPlayerController->SetDeprecatedInputYawScale(0.f); + //OurPlayerController->SetDeprecatedInputYawScale(0.f); } } @@ -169,7 +169,7 @@ void UOWSCharacterMovementComponent::OnMovementUpdated(float DeltaTime, const FV APlayerController* OurPlayerController = Cast(CharacterOwner->GetController()); if (OurPlayerController) { - OurPlayerController->SetDeprecatedInputYawScale(1.f); + //OurPlayerController->SetDeprecatedInputYawScale(1.f); } bUseControllerDesiredRotation = true; @@ -586,7 +586,7 @@ void UOWSCharacterMovementComponent::ProcessLanded(const FHitResult& Hit, float if (OurPlayerController) { - OurPlayerController->SetDeprecatedInputYawScale(1.f); + //OurPlayerController->SetDeprecatedInputYawScale(1.f); } } diff --git a/plugins/OWSPluginUE5/Source/OWSPlugin/Private/OWSGameInstance.cpp b/plugins/OWSPluginUE5/Source/OWSPlugin/Private/OWSGameInstance.cpp index d511bcde1..c35172f13 100644 --- a/plugins/OWSPluginUE5/Source/OWSPlugin/Private/OWSGameInstance.cpp +++ b/plugins/OWSPluginUE5/Source/OWSPlugin/Private/OWSGameInstance.cpp @@ -201,22 +201,24 @@ FString UOWSGameInstance::SerializeStructToJSONString(const UStruct* StructToSer UClass* UOWSGameInstance::FindClass(FString ClassName) const { - UObject* ClassPackage = ANY_PACKAGE; - UClass* Result = FindObject(ClassPackage, *ClassName); + if (ClassName.IsEmpty()) + { + return nullptr; + } - return Result; + UClass* FoundClass = FindFirstObject(*ClassName); + return IsValid(FoundClass) ? FoundClass : nullptr; } //This only works if the ability is already in memory. Use LoadGameplayAbilityClass instead TSubclassOf UOWSGameInstance::FindGameplayAbilityClass(FString ClassName) const { - UObject* ClassPackage = ANY_PACKAGE; - UClass* Result = FindObject(ClassPackage, *ClassName); + UClass* FoundClass = FindFirstObject(*ClassName); - TSubclassOf GameplayAbilityClass = Result; + TSubclassOf GameplayAbilityClass = FoundClass; if (GameplayAbilityClass) - return Result; + return FoundClass; else return nullptr; } diff --git a/plugins/OWSPluginUE5/Source/OWSPlugin/Private/OWSPlayerController.cpp b/plugins/OWSPluginUE5/Source/OWSPlugin/Private/OWSPlayerController.cpp index db358dd82..fd472dcb3 100644 --- a/plugins/OWSPluginUE5/Source/OWSPlugin/Private/OWSPlayerController.cpp +++ b/plugins/OWSPluginUE5/Source/OWSPlugin/Private/OWSPlayerController.cpp @@ -384,18 +384,6 @@ AOWSPlayerState* AOWSPlayerController::GetOWSPlayerState() const return GetPlayerState(); } -bool AOWSPlayerController::InputAxis(FKey Key, float Delta, float DeltaTime, int32 NumSamples, bool bGamepad) -{ - bool bResult = false; - - if (PlayerInput) - { - bResult = PlayerInput->InputKey(FInputKeyParams(Key, Delta, DeltaTime, NumSamples, bGamepad)); - } - - return bResult; -} - void AOWSPlayerController::SavePlayerLocation() { OWSPlayerControllerComponent->SavePlayerLocation(); diff --git a/plugins/OWSPluginUE5/Source/OWSPlugin/Public/OWSPlayerController.h b/plugins/OWSPluginUE5/Source/OWSPlugin/Public/OWSPlayerController.h index ae4da7be8..71b816d3e 100644 --- a/plugins/OWSPluginUE5/Source/OWSPlugin/Public/OWSPlayerController.h +++ b/plugins/OWSPluginUE5/Source/OWSPlugin/Public/OWSPlayerController.h @@ -128,9 +128,6 @@ class OWSPLUGIN_API AOWSPlayerController : public APlayerController void PawnLeavingGame(); - //bool InputKey(FKey Key, EInputEvent EventType, float AmountDepressed, bool bGamepad) override; - bool InputAxis(FKey Key, float Delta, float DeltaTime, int32 NumSamples, bool bGamepad) override; - UFUNCTION(BlueprintImplementableEvent, Category = "Save") void NotifyPawnLeavingGame(const AOWSCharacter* RPGCharacter); diff --git a/src/.env b/src/.env index ccb48f319..cf563f9e8 100644 --- a/src/.env +++ b/src/.env @@ -37,7 +37,7 @@ DATABASE_PASSWORD='yourStrong(!)Password' # MSSQL # DATABASE_CONNECTION_STRING="Server=host.docker.internal;Database=OpenWorldServer;User Id=SA;Password=${DATABASE_PASSWORD};ConnectRetryCount=0" # Postgres -DATABASE_CONNECTION_STRING="Host=host.docker.internal;Port=15432;Database=openworldserver;Username=postgres;Password=${DATABASE_PASSWORD};" +DATABASE_CONNECTION_STRING="Host=host.docker.internal;Port=15432;Database=openworldserver;Username=postgres;Password=${DATABASE_PASSWORD};Maximum Pool Size=6;" # Mysql # DATABASE_CONNECTION_STRING="server=host.docker.internal;user=root;database=openworldserver;port=3306;password=${DATABASE_PASSWORD};Allow User Variables=True;SslMode=None" diff --git a/src/OWSCharacterPersistence/Startup.cs b/src/OWSCharacterPersistence/Startup.cs index e78c0906a..630f3c478 100644 --- a/src/OWSCharacterPersistence/Startup.cs +++ b/src/OWSCharacterPersistence/Startup.cs @@ -134,20 +134,23 @@ private void InitializeContainer(IServiceCollection services) if (OWSStorageConfig.Exists()) { string dbBackend = OWSStorageConfig.GetValue("OWSDBBackend"); + string connectionString = OWSStorageConfig.GetValue("OWSDBConnectionString"); + string connectionStringWithApplicationName = $"{connectionString}Application Name=OWS Character Persistence;"; + OWSStorageConfig["OWSDBConnectionString"] = connectionStringWithApplicationName; switch (dbBackend) { case "postgres": - container.Register(Lifestyle.Singleton); - container.Register(Lifestyle.Singleton); + container.Register(Lifestyle.Scoped); + container.Register(Lifestyle.Scoped); break; case "mysql": - container.Register(Lifestyle.Singleton); - container.Register(Lifestyle.Singleton); + container.Register(Lifestyle.Scoped); + container.Register(Lifestyle.Scoped); break; default: // Default to MSSQL - container.Register(Lifestyle.Singleton); - container.Register(Lifestyle.Singleton); + container.Register(Lifestyle.Scoped); + container.Register(Lifestyle.Scoped); break; } } diff --git a/src/OWSData/Repositories/Implementations/Postgres/CharactersRepository.cs b/src/OWSData/Repositories/Implementations/Postgres/CharactersRepository.cs index 00a1eb60e..feb4c7e29 100644 --- a/src/OWSData/Repositories/Implementations/Postgres/CharactersRepository.cs +++ b/src/OWSData/Repositories/Implementations/Postgres/CharactersRepository.cs @@ -140,7 +140,7 @@ public async Task CheckMapInstanceStatus(Guid customerGUID, int ma } } - public async Task CleanUpInstances(Guid customerGUID) + public async Task CleanUpInstances(Guid customerGuid) { using (var connection = (NpgsqlConnection)Connection) { @@ -151,7 +151,7 @@ public async Task CleanUpInstances(Guid customerGUID) try { var parameters = new DynamicParameters(); - parameters.Add("@CustomerGUID", customerGUID); + parameters.Add("@CustomerGUID", customerGuid); parameters.Add("@CharacterMinutes", 1); // TODO Add Configuration Parameter parameters.Add("@MapMinutes", 2); // TODO Add Configuration Parameter @@ -180,6 +180,10 @@ await transaction.ExecuteAsync(PostgresQueries.RemoveMapInstances, transaction.Commit(); } + catch (NpgsqlException ex) + { + Console.WriteLine($"Error opening PostgreSQL connection: {ex.Message}"); + } catch { transaction.Rollback(); @@ -358,12 +362,24 @@ public async Task JoinMapByCharName(Guid customerGUID, string { MapInstances outputMapInstance = await SpinUpInstance(customerGUID, zoneName, outputPlayerGroup.PlayerGroupId); + if (outputMapInstance.WorldServerId < 1) + { + Console.WriteLine("Failed to spin up Server Instance!"); + return outputObject; + } + parameters.Add("@WorldServerId", outputMapInstance.WorldServerId); WorldServers outputWorldServers = await connection.QuerySingleOrDefaultAsync(GenericQueries.GetWorldByID, parameters, commandType: CommandType.Text); + if (outputWorldServers == null) + { + Console.WriteLine($"Failed to find Server Instance for World ServerId: {outputMapInstance.WorldServerId}"); + return outputObject; + } + outputObject.NeedToStartupMap = true; outputObject.WorldServerID = outputMapInstance.WorldServerId; outputObject.ServerIP = outputWorldServers.ServerIp; diff --git a/src/OWSData/Repositories/Implementations/Postgres/GlobalDataRespository.cs b/src/OWSData/Repositories/Implementations/Postgres/GlobalDataRespository.cs index f3aeb6cd7..a4b583f05 100644 --- a/src/OWSData/Repositories/Implementations/Postgres/GlobalDataRespository.cs +++ b/src/OWSData/Repositories/Implementations/Postgres/GlobalDataRespository.cs @@ -32,21 +32,28 @@ public async Task AddOrUpdateGlobalData(GlobalData globalData) { using (var connection = (NpgsqlConnection)Connection) { - var outputGlobalData = await connection.QuerySingleOrDefaultAsync(GenericQueries.GetGlobalDataByGlobalDataKey, - globalData, - commandType: CommandType.Text); - - if (outputGlobalData != null) + try { - await connection.ExecuteAsync(GenericQueries.UpdateGlobalData, + var outputGlobalData = await connection.QuerySingleOrDefaultAsync(GenericQueries.GetGlobalDataByGlobalDataKey, globalData, commandType: CommandType.Text); + + if (outputGlobalData != null) + { + await connection.ExecuteAsync(GenericQueries.UpdateGlobalData, + globalData, + commandType: CommandType.Text); + } + else + { + await connection.ExecuteAsync(GenericQueries.AddGlobalData, + globalData, + commandType: CommandType.Text); + } } - else + catch (Exception ex) { - await connection.ExecuteAsync(GenericQueries.AddGlobalData, - globalData, - commandType: CommandType.Text); + Console.WriteLine($"AddOrUpdateGlobalData Error: {ex.Message}"); } } } diff --git a/src/OWSData/Repositories/Implementations/Postgres/InstanceManagementRepository.cs b/src/OWSData/Repositories/Implementations/Postgres/InstanceManagementRepository.cs index 588ed3055..30b37096e 100644 --- a/src/OWSData/Repositories/Implementations/Postgres/InstanceManagementRepository.cs +++ b/src/OWSData/Repositories/Implementations/Postgres/InstanceManagementRepository.cs @@ -171,39 +171,49 @@ public async Task StartWorldServer(Guid customerGUID, string launcherGuid) using (var connection = (NpgsqlConnection)Connection) { - var parameters = new { - CustomerGUID = customerGUID, - ZoneServerGUID = launcherGuid - }; - - GetWorldServerID getWorldServerID = await connection.QueryFirstOrDefaultAsync(PostgresQueries.GetWorldServerSQL, parameters); - - if (getWorldServerID != null) - { - worldServerId = getWorldServerID.WorldServerID; - } - - if (worldServerId > 0) + try { - var parameters2 = new { + var parameters = new + { CustomerGUID = customerGUID, - WorldServerID = worldServerId + ZoneServerGUID = launcherGuid }; - await connection.ExecuteAsync(PostgresQueries.UpdateWorldServerSQL, parameters2); + GetWorldServerID getWorldServerID = await connection.QueryFirstOrDefaultAsync(PostgresQueries.GetWorldServerSQL, parameters); + + if (getWorldServerID != null) + { + worldServerId = getWorldServerID.WorldServerID; + } + + if (worldServerId > 0) + { + var parameters2 = new + { + CustomerGUID = customerGUID, + WorldServerID = worldServerId + }; + + await connection.ExecuteAsync(PostgresQueries.UpdateWorldServerSQL, parameters2); + } + } + catch (Exception ex) + { + Console.WriteLine($"StartWorldServer error: {ex.Message}"); + return -1; } } return worldServerId; } - public async Task UpdateNumberOfPlayers(Guid customerGUID, int zoneInstanceId, int numberOfPlayers) + public async Task UpdateNumberOfPlayers(Guid customerGuid, int zoneInstanceId, int numberOfPlayers) { using (var connection = (NpgsqlConnection)Connection) { var paremeters = new { - CustomerGUID = customerGUID, + CustomerGUID = customerGuid, ZoneInstanceID = zoneInstanceId, NumberOfReportedPlayers = numberOfPlayers }; @@ -211,13 +221,11 @@ public async Task UpdateNumberOfPlayers(Guid customerGUI _ = await connection.ExecuteAsync(PostgresQueries.UpdateNumberOfPlayersSQL, paremeters); } - SuccessAndErrorMessage output = new SuccessAndErrorMessage() + return new SuccessAndErrorMessage() { Success = true, ErrorMessage = "" }; - - return output; } public async Task> GetZoneInstancesOfZone(Guid customerGUID, string ZoneName) diff --git a/src/OWSData/Repositories/Implementations/Postgres/UsersRepository.cs b/src/OWSData/Repositories/Implementations/Postgres/UsersRepository.cs index 6ae8fd102..2e4e8bffb 100644 --- a/src/OWSData/Repositories/Implementations/Postgres/UsersRepository.cs +++ b/src/OWSData/Repositories/Implementations/Postgres/UsersRepository.cs @@ -33,13 +33,21 @@ public async Task> GetAllCharacters(Guid customerG using (var connection = (NpgsqlConnection)Connection) { - var p = new DynamicParameters(); - p.Add("@CustomerGUID", customerGUID); - p.Add("@UserSessionGUID", userSessionGUID); + try + { + using var conn = Connection; + var p = new DynamicParameters(); + p.Add("@CustomerGUID", customerGUID); + p.Add("@UserSessionGUID", userSessionGUID); - outputObject = await connection.QueryAsync(GenericQueries.GetAllCharacters, - p, - commandType: CommandType.Text); + outputObject = await connection.QueryAsync(GenericQueries.GetAllCharacters, + p, + commandType: CommandType.Text); + } + catch (Exception ex) + { + return []; + } } return outputObject; @@ -77,7 +85,8 @@ public async Task CreateCharacter(Guid customerGUID, Guid userS } } - public async Task CreateCharacterUsingDefaultCharacterValues(Guid customerGUID, Guid userGUID, string characterName, string defaultSetName) + public async Task CreateCharacterUsingDefaultCharacterValues(Guid customerGuid, Guid userGuid, string characterName, + string defaultSetName) { SuccessAndErrorMessage outputObject = new SuccessAndErrorMessage(); @@ -90,8 +99,8 @@ public async Task CreateCharacterUsingDefaultCharacterVa try { var parameters = new DynamicParameters(); - parameters.Add("CustomerGUID", customerGUID); - parameters.Add("UserGUID", userGUID); + parameters.Add("CustomerGUID", customerGuid); + parameters.Add("UserGUID", userGuid); parameters.Add("CharacterName", characterName); parameters.Add("DefaultSetName", defaultSetName); @@ -120,131 +129,178 @@ await connection.ExecuteAsync(GenericQueries.AddDefaultCustomCharacterData, } } - outputObject = new SuccessAndErrorMessage() + return new SuccessAndErrorMessage() { Success = true, ErrorMessage = "" }; - - return outputObject; } //_PlayerGroupTypeID 0 returns all group types - public async Task> GetPlayerGroupsCharacterIsIn(Guid customerGUID, Guid userSessionGUID, string characterName, int playerGroupTypeID = 0) + public async Task> GetPlayerGroupsCharacterIsIn(Guid customerGUID, Guid userSessionGUID, + string characterName, int playerGroupTypeID = 0) { - IEnumerable OutputObject; + IEnumerable outputObject; - using (var connection = (NpgsqlConnection)Connection) - { - var p = new DynamicParameters(); - p.Add("@CustomerGUID", customerGUID); - p.Add("@CharName", characterName); - p.Add("@UserSessionGUID", userSessionGUID); - p.Add("@PlayerGroupTypeID", playerGroupTypeID); + try + { + using (var connection = (NpgsqlConnection)Connection) + { + using var conn = Connection; + var p = new DynamicParameters(); + p.Add("@CustomerGUID", customerGUID); + p.Add("@CharName", characterName); + p.Add("@UserSessionGUID", userSessionGUID); + p.Add("@PlayerGroupTypeID", playerGroupTypeID); - OutputObject = await connection.QueryAsync("select * from GetPlayerGroupsCharacterIsIn(@CustomerGUID,@CharName,@UserSessionGUID,@PlayerGroupTypeID)", - p, - commandType: CommandType.Text); - } + outputObject = await connection.QueryAsync("select * from GetPlayerGroupsCharacterIsIn(@CustomerGUID,@CharName,@UserSessionGUID,@PlayerGroupTypeID)", + p, + commandType: CommandType.Text); + } - return OutputObject; + return outputObject; + } + catch (Exception ex) + { + return []; + } } public async Task GetUser(Guid customerGuid, Guid userGuid) { User outputObject; - using (var connection = (NpgsqlConnection)Connection) + try { - var p = new DynamicParameters(); - p.Add("@CustomerGUID", customerGuid); - p.Add("@UserGUID", userGuid); + using (var connection = (NpgsqlConnection)Connection) + { + using var conn = Connection; + var p = new DynamicParameters(); + p.Add("@CustomerGUID", customerGuid); + p.Add("@UserGUID", userGuid); - outputObject = await connection.QuerySingleOrDefaultAsync("select * from GetUser(@CustomerGUID,@UserGUID)", - p, - commandType: CommandType.Text); - } + outputObject = await connection.QuerySingleOrDefaultAsync("select * from GetUser(@CustomerGUID,@UserGUID)", + p, + commandType: CommandType.Text); - return outputObject; + return outputObject; + } + } + catch (Exception ex) + { + return new User(); + } } public async Task> GetUsers(Guid customerGuid) { IEnumerable outputObject = null; - using (var connection = (NpgsqlConnection)Connection) - { - var p = new DynamicParameters(); - p.Add("@CustomerGUID", customerGuid); + try + { + using (var connection = (NpgsqlConnection)Connection) + { + using var conn = Connection; + var p = new DynamicParameters(); + p.Add("@CustomerGUID", customerGuid); - outputObject = await connection.QueryAsync(GenericQueries.GetUsers, p); - } + outputObject = await connection.QueryAsync(GenericQueries.GetUsers, p); + } - return outputObject; + return outputObject; + } + catch (Exception ex) + { + return []; + } } - public async Task GetUserSession(Guid customerGUID, Guid userSessionGUID) + public async Task GetUserSession(Guid customerGuid, Guid userSessionGuid) { GetUserSession outputObject; - using (var connection = (NpgsqlConnection)Connection) + try { - var p = new DynamicParameters(); - p.Add("@CustomerGUID", customerGUID); - p.Add("@UserSessionGUID", userSessionGUID); + using (var connection = (NpgsqlConnection)Connection) + { + var p = new DynamicParameters(); + p.Add("@CustomerGUID", customerGuid); + p.Add("@UserSessionGUID", userSessionGuid); - outputObject = await connection.QuerySingleOrDefaultAsync("select * from GetUserSession(@CustomerGUID,@UserSessionGUID)", - p, - commandType: CommandType.Text); - } + outputObject = await connection.QuerySingleOrDefaultAsync("select * from GetUserSession(@CustomerGUID,@UserSessionGUID)", + p, + commandType: CommandType.Text); - return outputObject; + return outputObject; + } + } + catch (Exception ex) + { + return new GetUserSession(); + } } - public async Task GetUserSessionORM(Guid customerGUID, Guid userSessionGUID) + public async Task GetUserSessionORM(Guid customerGuid, Guid userSessionGuid) { GetUserSession outputObject; - using (var connection = (NpgsqlConnection)Connection) + try + { + using (var connection = (NpgsqlConnection)Connection) + { + outputObject = await connection.QueryFirstOrDefaultAsync(PostgresQueries.GetUserSessionSQL, new { @CustomerGUID = customerGuid, @UserSessionGUID = userSessionGuid }); + } + + return outputObject; + } + catch (Exception ex) { - outputObject = await connection.QueryFirstOrDefaultAsync(PostgresQueries.GetUserSessionSQL, new { @CustomerGUID = customerGUID, @UserSessionGUID = userSessionGUID }); + return new GetUserSession(); } - - return outputObject; } - public async Task GetUserSessionParallel(Guid customerGUID, Guid userSessionGUID) //id = UserSessionGUID + public async Task GetUserSessionParallel(Guid customerGuid, Guid userSessionGuid) //id = UserSessionGUID { GetUserSessionComposite outputObject = new GetUserSessionComposite(); UserSessions userSession; User user; Characters character; - using (var connection = (NpgsqlConnection)Connection) + try { - userSession = await connection.QueryFirstOrDefaultAsync(PostgresQueries.GetUserSessionOnlySQL, new { @CustomerGUID = customerGUID, @UserSessionGUID = userSessionGUID }); - var userTask = connection.QueryFirstOrDefaultAsync(PostgresQueries.GetUserSQL, new { @CustomerGUID = customerGUID, @UserGUID = userSession.UserGuid }); - var characterTask = connection.QueryFirstOrDefaultAsync(PostgresQueries.GetCharacterByNameSQL, new { @CustomerGUID = customerGUID, @CharacterName = userSession.SelectedCharacterName }); + using (var connection = (NpgsqlConnection)Connection) + { + userSession = await connection.QueryFirstOrDefaultAsync(PostgresQueries.GetUserSessionOnlySQL, new { @CustomerGUID = customerGuid, @UserSessionGUID = userSessionGuid }); + var userTask = connection.QueryFirstOrDefaultAsync(PostgresQueries.GetUserSQL, new { @CustomerGUID = customerGuid, @UserGUID = userSession.UserGuid }); + var characterTask = connection.QueryFirstOrDefaultAsync(PostgresQueries.GetCharacterByNameSQL, new { @CustomerGUID = customerGuid, @CharacterName = userSession.SelectedCharacterName }); - user = await userTask; - character = await characterTask; - } + Task.WaitAll(userTask, characterTask); - outputObject.userSession = userSession; - outputObject.user = user; - outputObject.character = character; + user = userTask.Result; + character = characterTask.Result; - return outputObject; + return new GetUserSessionComposite() + { + userSession = userSession, + user = user, + character = character + }; + } + } + catch (Exception ex) + { + return new GetUserSessionComposite(); + } } - public async Task LoginAndCreateSession(Guid customerGUID, string email, string password, bool dontCheckPassword = false) + public async Task LoginAndCreateSession(Guid customerGuid, string email, string password, bool dontCheckPassword = false) { PlayerLoginAndCreateSession outputObject; using (var connection = (NpgsqlConnection)Connection) { var p = new DynamicParameters(); - p.Add("@CustomerGUID", customerGUID); + p.Add("@CustomerGUID", customerGuid); p.Add("@Email", email); p.Add("@Password", password); p.Add("@DontCheckPassword", dontCheckPassword); @@ -367,8 +423,6 @@ public async Task GetUserFromEmail(Guid customerGUID, string ema public async Task RemoveCharacter(Guid customerGUID, Guid userSessionGUID, string characterName) { - SuccessAndErrorMessage outputObject = new SuccessAndErrorMessage(); - try { using (var connection = (NpgsqlConnection)Connection) @@ -383,24 +437,24 @@ await connection.ExecuteAsync("call RemoveCharacter(@CustomerGUID,@UserSessionGU commandType: CommandType.Text); } - outputObject.Success = true; - outputObject.ErrorMessage = ""; - - return outputObject; + return new SuccessAndErrorMessage() + { + Success = true, + ErrorMessage = "" + }; } catch (Exception ex) { - outputObject.Success = false; - outputObject.ErrorMessage = ex.Message; - - return outputObject; + return new SuccessAndErrorMessage() + { + Success = false, + ErrorMessage = ex.Message + }; } } public async Task UpdateUser(Guid customerGuid, Guid userGuid, string firstName, string lastName, string email) { - SuccessAndErrorMessage outputObject = new SuccessAndErrorMessage(); - try { using (var connection = (NpgsqlConnection)Connection) @@ -417,17 +471,19 @@ await connection.ExecuteAsync(GenericQueries.UpdateUser, commandType: CommandType.Text); } - outputObject.Success = true; - outputObject.ErrorMessage = ""; - - return outputObject; + return new SuccessAndErrorMessage() + { + Success = true, + ErrorMessage = "" + }; } catch (Exception ex) { - outputObject.Success = false; - outputObject.ErrorMessage = ex.Message; - - return outputObject; + return new SuccessAndErrorMessage() + { + Success = false, + ErrorMessage = ex.Message + }; } } } diff --git a/src/OWSGlobalData/Startup.cs b/src/OWSGlobalData/Startup.cs index 694a10bbe..cca175543 100644 --- a/src/OWSGlobalData/Startup.cs +++ b/src/OWSGlobalData/Startup.cs @@ -129,17 +129,20 @@ private void InitializeContainer(IServiceCollection services) if (OWSStorageConfig.Exists()) { string dbBackend = OWSStorageConfig.GetValue("OWSDBBackend"); + string connectionString = OWSStorageConfig.GetValue("OWSDBConnectionString"); + string connectionStringWithApplicationName = $"{connectionString}Application Name=OWS Global Data;"; + OWSStorageConfig["OWSDBConnectionString"] = connectionStringWithApplicationName; switch (dbBackend) { case "postgres": - container.Register(Lifestyle.Singleton); + container.Register(Lifestyle.Scoped); break; case "mysql": - container.Register(Lifestyle.Singleton); + container.Register(Lifestyle.Scoped); break; default: // Default to MSSQL - container.Register(Lifestyle.Singleton); + container.Register(Lifestyle.Scoped); break; } } diff --git a/src/OWSInstanceManagement/Startup.cs b/src/OWSInstanceManagement/Startup.cs index 25d895fca..2b3262d09 100644 --- a/src/OWSInstanceManagement/Startup.cs +++ b/src/OWSInstanceManagement/Startup.cs @@ -135,23 +135,26 @@ private void InitializeContainer(IServiceCollection services) if (OWSStorageConfig.Exists()) { string dbBackend = OWSStorageConfig.GetValue("OWSDBBackend"); + string connectionString = OWSStorageConfig.GetValue("OWSDBConnectionString"); + string connectionStringWithApplicationName = $"{connectionString}Application Name=OWS Instance Management;"; + OWSStorageConfig["OWSDBConnectionString"] = connectionStringWithApplicationName; switch (dbBackend) { case "postgres": - container.Register(Lifestyle.Singleton); - container.Register(Lifestyle.Singleton); - container.Register(Lifestyle.Singleton); + container.Register(Lifestyle.Scoped); + container.Register(Lifestyle.Scoped); + container.Register(Lifestyle.Scoped); break; case "mysql": - container.Register(Lifestyle.Singleton); - container.Register(Lifestyle.Singleton); - container.Register(Lifestyle.Singleton); + container.Register(Lifestyle.Scoped); + container.Register(Lifestyle.Scoped); + container.Register(Lifestyle.Scoped); break; default: // Default to MSSQL - container.Register(Lifestyle.Singleton); - container.Register(Lifestyle.Singleton); - container.Register(Lifestyle.Singleton); + container.Register(Lifestyle.Scoped); + container.Register(Lifestyle.Scoped); + container.Register(Lifestyle.Scoped); break; } } diff --git a/src/OWSPublicAPI/Startup.cs b/src/OWSPublicAPI/Startup.cs index 9c03e130a..87678c9f4 100644 --- a/src/OWSPublicAPI/Startup.cs +++ b/src/OWSPublicAPI/Startup.cs @@ -167,20 +167,23 @@ private void InitializeContainer(IServiceCollection services) if (OWSStorageConfig.Exists()) { string dbBackend = OWSStorageConfig.GetValue("OWSDBBackend"); + string connectionString = OWSStorageConfig.GetValue("OWSDBConnectionString"); + string connectionStringWithApplicationName = $"{connectionString}Application Name=OWS Public API;"; + OWSStorageConfig["OWSDBConnectionString"] = connectionStringWithApplicationName; switch (dbBackend) { case "postgres": - container.Register(Lifestyle.Singleton); - container.Register(Lifestyle.Singleton); + container.Register(Lifestyle.Scoped); + container.Register(Lifestyle.Scoped); break; case "mysql": - container.Register(Lifestyle.Singleton); - container.Register(Lifestyle.Singleton); + container.Register(Lifestyle.Scoped); + container.Register(Lifestyle.Scoped); break; default: // Default to MSSQL - container.Register(Lifestyle.Singleton); - container.Register(Lifestyle.Singleton); + container.Register(Lifestyle.Scoped); + container.Register(Lifestyle.Scoped); break; } }