Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: Dartanlla/OWS
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: main
Choose a base ref
...
head repository: brasky/OWS
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: main
Choose a head ref
Can’t automatically merge. Don’t worry, you can still create the pull request.
  • 14 commits
  • 207 files changed
  • 1 contributor

Commits on May 4, 2024

  1. Copy the full SHA
    84c12cb View commit details

Commits on May 5, 2024

  1. Copy the full SHA
    7e87193 View commit details
  2. Copy the full SHA
    e3aaa4d View commit details

Commits on May 6, 2024

  1. Copy the full SHA
    9329632 View commit details
  2. Copy the full SHA
    b601125 View commit details
  3. Copy the full SHA
    59e4857 View commit details
  4. rename sln

    brasky committed May 6, 2024
    Copy the full SHA
    5a347d8 View commit details
  5. set up docker

    brasky committed May 6, 2024
    Copy the full SHA
    f5a6d44 View commit details
  6. Copy the full SHA
    44fd1f5 View commit details
  7. Copy the full SHA
    d312d83 View commit details
  8. Copy the full SHA
    ef7e1f4 View commit details
  9. update readme

    brasky committed May 6, 2024
    Copy the full SHA
    128a71a View commit details

Commits on May 7, 2024

  1. setup only runs once

    brasky committed May 7, 2024
    Copy the full SHA
    c966328 View commit details

Commits on May 26, 2024

  1. Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature.
    Copy the full SHA
    4c6dfef View commit details
Showing with 2,414 additions and 5,995 deletions.
  1. +5 −4 README.md
  2. +1 −1 src/.env
  3. +2 −0 src/OWS.API.Silo/.dockerignore
  4. +7 −6 src/{OWSInstanceManagement → OWS.API.Silo}/Dockerfile
  5. +47 −0 src/OWS.API.Silo/OWS.API.Silo.csproj
  6. +78 −0 src/OWS.API.Silo/Program.cs
  7. +9 −0 src/OWS.API.Silo/appsettings.Development.json
  8. +12 −0 src/OWS.API.Silo/appsettings.json
  9. +17 −0 src/OWS.Grains/BaseGrain.cs
  10. +429 −0 src/OWS.Grains/CharacterGrain.cs
  11. +38 −0 src/OWS.Grains/GlobalDataGrain.cs
  12. +197 −0 src/OWS.Grains/InstanceGrain.cs
  13. +20 −0 src/OWS.Grains/OWS.Grains.csproj
  14. +32 −0 src/OWS.Grains/ServerGrain.cs
  15. +124 −0 src/OWS.Grains/UserGrain.cs
  16. +26 −0 src/OWS.Interfaces/ICharacterGrain.cs
  17. +12 −0 src/OWS.Interfaces/IGlobalDataGrain.cs
  18. +23 −0 src/OWS.Interfaces/IInstanceGrain.cs
  19. +19 −0 src/OWS.Interfaces/IUserGrain.cs
  20. +17 −0 src/OWS.Interfaces/OWS.Interfaces.csproj
  21. +175 −0 src/OWS.PerfTests/sampletest.js
  22. +16 −22 src/OWS.sln
  23. +2 −1 src/OWSBenchmarks/OWSBenchmarks.csproj
  24. +34 −3 src/OWSBenchmarks/ResponseBenchmarks.cs
  25. +0 −84 src/OWSCharacterPersistence/Controllers/CharactersController.cs
  26. +0 −36 src/OWSCharacterPersistence/Controllers/StatusController.cs
  27. +0 −29 src/OWSCharacterPersistence/Controllers/SystemController.cs
  28. +0 −24 src/OWSCharacterPersistence/Dockerfile
  29. +0 −45 src/OWSCharacterPersistence/OWSCharacterPersistence.csproj
  30. +0 −330 src/OWSCharacterPersistence/OWSCharacterPersistence.xml
  31. +0 −52 src/OWSCharacterPersistence/Program.cs
  32. +0 −34 src/OWSCharacterPersistence/Properties/launchSettings.json
  33. +0 −38 src/OWSCharacterPersistence/Requests/Abilities/GetAbilitiesRequest.cs
  34. +0 −31 src/OWSCharacterPersistence/Requests/Characters/AddOrUpdateCustomCharacterDataRequest.cs
  35. +0 −33 src/OWSCharacterPersistence/Requests/Characters/GetByNameRequest.cs
  36. +0 −36 src/OWSCharacterPersistence/Requests/Characters/PlayerLogoutRequest.cs
  37. +0 −44 src/OWSCharacterPersistence/Requests/Characters/UpdateCharacterStatsRequest.cs
  38. +0 −57 src/OWSCharacterPersistence/Requests/Status/GetCharacterStatusesRequest.cs
  39. +0 −160 src/OWSCharacterPersistence/Startup.cs
  40. +0 −9 src/OWSCharacterPersistence/appsettings.Development.json
  41. +0 −44 src/OWSCharacterPersistence/appsettings.json
  42. +5 −8 src/OWSData/Models/Composites/CharacterAndCustomData.cs
  43. +27 −29 src/OWSData/Models/Composites/CreateCharacter.cs
  44. +4 −1 src/OWSData/Models/Composites/CustomCharacterDataDTO.cs
  45. +4 −4 src/OWSData/Models/Composites/CustomCharacterDataRows.cs
  46. +2 −4 src/OWSData/Models/Composites/GetServerToConnectTo.cs
  47. +3 −5 src/OWSData/Models/Composites/GetWorldServerID.cs
  48. +2 −4 src/OWSData/Models/Composites/SuccessAndErrorMessage.cs
  49. +5 −6 src/OWSData/Models/StoredProcs/AddOrUpdateAllPlayerPoisitionsRequest.cs
  50. +4 −1 src/OWSData/Models/StoredProcs/GetAbilityBars.cs
  51. +6 −1 src/OWSData/Models/StoredProcs/GetAbilityBarsAndAbilities.cs
  52. +3 −4 src/OWSData/Models/StoredProcs/GetAllCharacters.cs
  53. +2 −3 src/OWSData/Models/StoredProcs/GetCharByCharName.cs
  54. +4 −1 src/OWSData/Models/StoredProcs/GetCharacterAbilities.cs
  55. +2 −3 src/OWSData/Models/StoredProcs/GetCurrentWorldTime.cs
  56. +4 −1 src/OWSData/Models/StoredProcs/GetPlayerGroupsCharacterIsIn.cs
  57. +3 −3 src/OWSData/Models/StoredProcs/GetServerInstanceFromPort.cs
  58. +24 −20 src/OWSData/Models/StoredProcs/GetUserSession.cs
  59. +3 −1 src/OWSData/Models/StoredProcs/GetZoneInstancesForWorldServer.cs
  60. +3 −3 src/OWSData/Models/StoredProcs/GetZoneInstancesForZone.cs
  61. +15 −17 src/OWSData/Models/StoredProcs/JoinMapByCharName.cs
  62. +3 −4 src/OWSData/Models/StoredProcs/PlayerLoginAndCreateSession.cs
  63. +2 −3 src/OWSData/Models/StoredProcs/UpdateCharacterStats.cs
  64. +4 −1 src/OWSData/Models/Tables/CustomCharacterData.cs
  65. +6 −1 src/OWSData/OWSData.csproj
  66. +3 −6 src/OWSData/Repositories/Implementations/MSSQL/CharactersRepository.cs
  67. +1 −2 src/OWSData/Repositories/Implementations/MSSQL/GlobalDataRepository.cs
  68. +3 −6 src/OWSData/Repositories/Implementations/MSSQL/InstanceManagementRepository.cs
  69. +3 −5 src/OWSData/Repositories/Implementations/MSSQL/UsersRepository.cs
  70. +2 −2 src/OWSData/Repositories/Implementations/MongoDB/CharactersRepository.cs
  71. +2 −2 src/OWSData/Repositories/Implementations/MySQL/GlobalDataRepository.cs
  72. +2 −2 src/OWSData/Repositories/Implementations/MySQL/InstanceManagementRepository.cs
  73. +2 −2 src/OWSData/Repositories/Implementations/MySQL/UsersRepository.cs
  74. +2 −2 src/OWSData/Repositories/Implementations/Postgres/GlobalDataRespository.cs
  75. +2 −2 src/OWSData/Repositories/Implementations/Postgres/InstanceManagementRepository.cs
  76. +2 −2 src/OWSData/Repositories/Implementations/Postgres/UsersRepository.cs
  77. +1 −0 src/OWSExternalLoginProviders/OWSExternalLoginProviders.csproj
  78. +0 −29 src/OWSGlobalData/Controllers/SystemController.cs
  79. +0 −24 src/OWSGlobalData/Dockerfile
  80. +0 −45 src/OWSGlobalData/OWSGlobalData.csproj
  81. +0 −40 src/OWSGlobalData/OWSGlobalData.xml
  82. +0 −52 src/OWSGlobalData/Program.cs
  83. +0 −31 src/OWSGlobalData/Properties/launchSettings.json
  84. +0 −152 src/OWSGlobalData/Startup.cs
  85. +0 −8 src/OWSGlobalData/appsettings.Development.json
  86. +0 −44 src/OWSGlobalData/appsettings.json
  87. +1 −0 src/OWSInstanceLauncher/OWSInstanceLauncher.csproj
  88. +3 −3 src/OWSInstanceLauncher/Program.cs
  89. +1 −1 src/OWSInstanceLauncher/Properties/launchSettings.json
  90. +1 −37 src/OWSInstanceLauncher/Startup.cs
  91. +7 −7 src/OWSInstanceLauncher/appsettings.json
  92. +0 −29 src/OWSInstanceManagement/Controllers/SystemController.cs
  93. +0 −46 src/OWSInstanceManagement/OWSInstanceManagement.csproj
  94. +0 −120 src/OWSInstanceManagement/OWSInstanceManagement.xml
  95. +0 −52 src/OWSInstanceManagement/Program.cs
  96. +0 −34 src/OWSInstanceManagement/Properties/launchSettings.json
  97. +0 −164 src/OWSInstanceManagement/Startup.cs
  98. +0 −9 src/OWSInstanceManagement/appsettings.Development.json
  99. +0 −44 src/OWSInstanceManagement/appsettings.json
  100. +0 −4 src/OWSManagement/.dockerignore
  101. +0 −29 src/OWSManagement/Controllers/SystemController.cs
  102. +0 −86 src/OWSManagement/Controllers/UsersController.cs
  103. +0 −10 src/OWSManagement/DTOs/AddUserDTO.cs
  104. +0 −12 src/OWSManagement/DTOs/EditUserDTO.cs
  105. +0 −31 src/OWSManagement/Dockerfile
  106. +0 −57 src/OWSManagement/OWSManagement.csproj
  107. +0 −24 src/OWSManagement/OWSManagement.xml
  108. +0 −30 src/OWSManagement/Program.cs
  109. +0 −39 src/OWSManagement/Properties/launchSettings.json
  110. +0 −30 src/OWSManagement/Requests/Users/AddUserRequest.cs
  111. +0 −27 src/OWSManagement/Requests/Users/EditUserRequest.cs
  112. +0 −26 src/OWSManagement/Requests/Users/GetUsersRequest.cs
  113. +0 −153 src/OWSManagement/Startup.cs
  114. +0 −8 src/OWSManagement/appsettings.Development.json
  115. +0 −19 src/OWSManagement/appsettings.json
  116. +0 −24 src/OWSManagement/wwwroot/.gitignore
  117. +0 −3 src/OWSManagement/wwwroot/.vscode/extensions.json
  118. +0 −18 src/OWSManagement/wwwroot/README.md
  119. +0 −18 src/OWSManagement/wwwroot/components.d.ts
  120. +0 −14 src/OWSManagement/wwwroot/index.html
  121. +0 −1,060 src/OWSManagement/wwwroot/package-lock.json
  122. +0 −24 src/OWSManagement/wwwroot/package.json
  123. +0 −1 src/OWSManagement/wwwroot/public/vite.svg
  124. +0 −91 src/OWSManagement/wwwroot/src/App.vue
  125. BIN src/OWSManagement/wwwroot/src/assets/logo.png
  126. +0 −1 src/OWSManagement/wwwroot/src/assets/vue.svg
  127. +0 −39 src/OWSManagement/wwwroot/src/components/CharactersGrid.vue
  128. +0 −31 src/OWSManagement/wwwroot/src/components/Dashboard.vue
  129. +0 −37 src/OWSManagement/wwwroot/src/components/GlobalDataGrid.vue
  130. +0 −21 src/OWSManagement/wwwroot/src/components/SideNav.vue
  131. +0 −134 src/OWSManagement/wwwroot/src/components/UsersAdd.vue
  132. +0 −185 src/OWSManagement/wwwroot/src/components/UsersGrid.vue
  133. +0 −39 src/OWSManagement/wwwroot/src/components/WorldServersGrid.vue
  134. +0 −37 src/OWSManagement/wwwroot/src/components/ZoneInstancesGrid.vue
  135. +0 −37 src/OWSManagement/wwwroot/src/components/ZonesGrid.vue
  136. +0 −7 src/OWSManagement/wwwroot/src/main.ts
  137. +0 −17 src/OWSManagement/wwwroot/src/owsApi.ts
  138. +0 −148 src/OWSManagement/wwwroot/src/owsApiClient.ts
  139. +0 −50 src/OWSManagement/wwwroot/src/plugins/vuetify.ts
  140. +0 −74 src/OWSManagement/wwwroot/src/router/index.ts
  141. +0 −21 src/OWSManagement/wwwroot/src/style.css
  142. +0 −1 src/OWSManagement/wwwroot/src/vite-env.d.ts
  143. +0 −22 src/OWSManagement/wwwroot/tsconfig.json
  144. +0 −9 src/OWSManagement/wwwroot/tsconfig.node.json
  145. +0 −38 src/OWSManagement/wwwroot/vite.config.ts
  146. +19 −25 src/{OWSCharacterPersistence → OWSPublicAPI}/Controllers/AbilitiesController.cs
  147. +78 −35 src/OWSPublicAPI/Controllers/CharactersController.cs
  148. +4 −5 src/{OWSGlobalData → OWSPublicAPI}/Controllers/GlobalDataController.cs
  149. +30 −72 src/{OWSInstanceManagement → OWSPublicAPI}/Controllers/InstanceController.cs
  150. +48 −46 src/OWSPublicAPI/Controllers/UsersController.cs
  151. +7 −24 src/{OWSInstanceManagement → OWSPublicAPI}/Controllers/ZonesController.cs
  152. +5 −2 src/OWSPublicAPI/OWSPublicAPI.csproj
  153. +389 −107 src/OWSPublicAPI/OWSPublicAPI.xml
  154. +39 −11 src/OWSPublicAPI/Program.cs
  155. +1 −1 src/OWSPublicAPI/Properties/launchSettings.json
  156. +0 −21 src/{OWSCharacterPersistence → OWSPublicAPI}/Requests/Abilities/AddAbilityToCharacterRequest.cs
  157. +0 −17 src/{OWSCharacterPersistence → OWSPublicAPI}/Requests/Abilities/GetAbilityBarsAndAbilitiesRequest.cs
  158. +0 −17 src/{OWSCharacterPersistence → OWSPublicAPI}/Requests/Abilities/GetAbilityBarsRequest.cs
  159. +0 −17 src/{OWSCharacterPersistence → OWSPublicAPI}/Requests/Abilities/GetCharacterAbilitiesRequest.cs
  160. +0 −21 src/{OWSCharacterPersistence → OWSPublicAPI}/Requests/Abilities/RemoveAbilityFromCharacterRequest.cs
  161. +0 −21 src/{OWSCharacterPersistence → OWSPublicAPI}/Requests/Abilities/UpdateAbilityOnCharacterRequest.cs
  162. +15 −0 src/OWSPublicAPI/Requests/Characters/AddOrUpdateCustomCharacterDataRequest.cs
  163. +7 −104 src/OWSPublicAPI/Requests/Characters/GetByNameRequest.cs
  164. +0 −19 src/{OWSCharacterPersistence → OWSPublicAPI}/Requests/Characters/GetCustomDataRequest.cs
  165. +16 −0 src/OWSPublicAPI/Requests/Characters/PlayerLogoutRequest.cs
  166. +113 −0 src/OWSPublicAPI/Requests/Characters/PublicGetByNameRequest.cs
  167. 0 src/{OWSCharacterPersistence → OWSPublicAPI}/Requests/Characters/UpdateAllPlayerPositionsRequest.cs
  168. +17 −0 src/OWSPublicAPI/Requests/Characters/UpdateCharacterStatsRequest.cs
  169. 0 src/{OWSGlobalData/Requests → OWSPublicAPI/Requests/GlobalData}/AddOrUpdateGlobalDataItemRequest.cs
  170. 0 src/{OWSGlobalData/Requests → OWSPublicAPI/Requests/GlobalData}/GetGlobalDataItemRequest.cs
  171. 0 src/{OWSInstanceManagement → OWSPublicAPI}/Requests/Instance/GetCurrentWorldTimeRequest.cs
  172. 0 src/{OWSInstanceManagement → OWSPublicAPI}/Requests/Instance/GetServerInstanceFromPortRequest.cs
  173. 0 src/{OWSInstanceManagement → OWSPublicAPI}/Requests/Instance/GetServerToConnectToRequest.cs
  174. 0 src/{OWSInstanceManagement → OWSPublicAPI}/Requests/Instance/GetZoneInstanceRequest.cs
  175. 0 ...{OWSInstanceManagement → OWSPublicAPI}/Requests/Instance/GetZoneInstancesForWorldServerRequest.cs
  176. 0 src/{OWSInstanceManagement → OWSPublicAPI}/Requests/Instance/GetZoneInstancesForZoneRequest.cs
  177. 0 src/{OWSInstanceManagement → OWSPublicAPI}/Requests/Instance/RegisterInstanceLauncherRequest.cs
  178. 0 src/{OWSInstanceManagement → OWSPublicAPI}/Requests/Instance/SetZoneInstanceStatusRequest.cs
  179. 0 src/{OWSInstanceManagement → OWSPublicAPI}/Requests/Instance/ShutDownInstanceLauncherRequest.cs
  180. 0 src/{OWSInstanceManagement → OWSPublicAPI}/Requests/Instance/ShutDownServerInstanceRequest.cs
  181. 0 src/{OWSInstanceManagement → OWSPublicAPI}/Requests/Instance/SpinUpServerInstanceRequest.cs
  182. 0 src/{OWSInstanceManagement → OWSPublicAPI}/Requests/Instance/StartInstanceLauncherRequest.cs
  183. 0 src/{OWSInstanceManagement → OWSPublicAPI}/Requests/Instance/UpdateNumberOfPlayersRequest.cs
  184. +1 −1 src/OWSPublicAPI/Requests/Users/CreateCharacterUsingDefaultCharacterValuesRequest.cs
  185. +1 −1 src/OWSPublicAPI/Requests/Users/GetUserRequest.cs
  186. +2 −44 src/OWSPublicAPI/Requests/Users/GetUserSessionRequest.cs
  187. +1 −1 src/OWSPublicAPI/Requests/Users/LogoutRequest.cs
  188. +2 −4 src/OWSPublicAPI/Requests/Users/RegisterUserRequest.cs
  189. 0 src/{OWSInstanceManagement → OWSPublicAPI}/Requests/Zones/AddZoneRequest.cs
  190. +27 −95 src/OWSPublicAPI/Startup.cs
  191. +7 −2 src/OWSPublicAPI/appsettings.json
  192. 0 src/{OWSGlobalData → OWSShared}/DTOs/AddOrUpdateGlobalDataItemDTO.cs
  193. +1 −1 src/{OWSPublicAPI → OWSShared}/DTOs/CreateCharacterUsingDefaultCharacterValuesDTO.cs
  194. +1 −1 src/{OWSPublicAPI → OWSShared}/DTOs/GetByNameDTO.cs
  195. +1 −1 src/{OWSPublicAPI → OWSShared}/DTOs/LogoutDTO.cs
  196. +4 −1 src/{OWSPublicAPI → OWSShared}/DTOs/RegisterUserDTO.cs
  197. +0 −50 src/OWSShared/InternalAPICalls/InternalAPICallsService.cs
  198. +27 −18 src/OWSShared/Middleware/StoreCustomerGUIDMiddleware.cs
  199. +4 −0 src/OWSShared/OWSShared.csproj
  200. +6 −0 src/OWSShared/Options/StorageOptions.cs
  201. +4 −1 src/OWSShared/RequestPayloads/AddOrUpdateZoneRequestPayload.cs
  202. +3 −1 src/OWSShared/RequestPayloads/RegisterInstanceLauncherRequestPayload.cs
  203. +1 −0 src/OWSTests/OWSTests.csproj
  204. +1 −44 src/docker-compose.override.linux.yml
  205. +0 −28 src/docker-compose.override.osx.yml
  206. +1 −22 src/docker-compose.override.windows.yml
  207. +11 −73 src/docker-compose.yml
9 changes: 5 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
@@ -22,13 +22,14 @@ Open World Server (OWS) is a server instance manager designed to create large wo
| Project | Purpose |
|-----------------------------------------------------------------|--------------------------------------------------------------------|
| [Benchmarks](src/OWSBenchmarks) | This project will allow us to configure and run performance testing on the OWS API. This will be important for comparing the impact of certain changes. |
| [Character Persistence](src/OWSCharacterPersistence) | The Character Persistence API will be responsible for storing our player characters and all related data. This will be important for comparing the impact of certain changes. |
| [Performance Tests](src/OWS.PerfTests) | This project contains the [K6](https://grafana.com/docs/k6/latest/) load test files. |
| [Data](src/OWSData) | This is a shared project that houses our data repository access code. |
| [External Login Providers](src/OWSExternalLoginProviders) | This project contains code for integrating with external login providers such as Xsolla, Google, Facebook, etc. |
| [Instance Launcher](src/OWSInstanceLauncher) | This project builds our Instance Launcher that replaces the RPG World Server in OWS 1. |
| [Instance Management](src/OWSInstanceManagement) | This API manages Zone Instances and the OWS Instance Launchers. |
| [Public API](src/OWSPublicAPI) | This API handles all API calls that come directly from player clients such as registration, login, and connecting to the game. |
| [Public API](src/OWSPublicAPI) | This API handles all incoming requests to the service and sends grains to the Silo project to execute |
| [Shared](src/OWSShared) | This project houses various miscellaneous code that multiple other projects require. |
| [Silo](src/OWS.API.Silo) | This project provides the compute runtime for our [Orleans silos](https://learn.microsoft.com/en-us/dotnet/orleans/overview), this is where grains are executed. |
| [Interfaces](src/OWS.Interfaces) | This project is where the contracts are defined for communication from the Public API to the Orleans Silos |
| [Grains](src/OWS.Grains) | This project is where the implementation for each [Grain](https://learn.microsoft.com/en-us/dotnet/orleans/overview#what-are-grains) is defined.|
| [Tests](src/OWSTests) | This project provides Unit testing and Functional testing and Benchmark Tools (Development) |

# Contributing
2 changes: 1 addition & 1 deletion src/.env
Original file line number Diff line number Diff line change
@@ -35,7 +35,7 @@ DATABASE_PASSWORD='yourStrong(!)Password'
# Database Connection String

# MSSQL
DATABASE_CONNECTION_STRING="Server=host.docker.internal;Database=OpenWorldServer;User Id=SA;Password=${DATABASE_PASSWORD};ConnectRetryCount=0"
DATABASE_CONNECTION_STRING="Server=host.docker.internal;Database=OpenWorldServer;User Id=SA;Password=${DATABASE_PASSWORD};ConnectRetryCount=0;TrustServerCertificate=True"
# Postgres
# DATABASE_CONNECTION_STRING="Host=host.docker.internal;Port=5432;Database=openworldserver;Username=postgres;Password=${DATABASE_PASSWORD};"
# Mysql
2 changes: 2 additions & 0 deletions src/OWS.API.Silo/.dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
bin/
obj/
Original file line number Diff line number Diff line change
@@ -7,18 +7,19 @@ EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
COPY ["OWSInstanceManagement/OWSInstanceManagement.csproj", "OWSInstanceManagement/"]
COPY ["OWS.API.Silo/OWS.API.Silo.csproj", "OWS.API.Silo/"]
COPY ["OWSExternalLoginProviders/OWSExternalLoginProviders.csproj", "OWSExternalLoginProviders/"]
COPY ["OWSShared/OWSShared.csproj", "OWSShared/"]
COPY ["OWSData/OWSData.csproj", "OWSData/"]
RUN dotnet restore "OWSInstanceManagement/OWSInstanceManagement.csproj"
RUN dotnet restore "OWS.API.Silo/OWS.API.Silo.csproj"
COPY . .
WORKDIR "/src/OWSInstanceManagement"
RUN dotnet build "OWSInstanceManagement.csproj" -c Release -o /app/build
WORKDIR "/src/OWS.API.Silo"
RUN dotnet build "OWS.API.Silo.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "OWSInstanceManagement.csproj" -c Release -o /app/publish
RUN dotnet publish "OWS.API.Silo.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "OWSInstanceManagement.dll"]
ENTRYPOINT ["dotnet", "OWS.API.Silo.dll"]
47 changes: 47 additions & 0 deletions src/OWS.API.Silo/OWS.API.Silo.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>

<ItemGroup>
<None Remove="appsettings.Development.json" />
<None Remove="appsettings.json" />
</ItemGroup>

<ItemGroup>
<Content Include="appsettings.Development.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
</Content>
<Content Include="appsettings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
</Content>
</ItemGroup>

<ItemGroup>
<PackageReference Include="Microsoft.Data.SqlClient" Version="5.2.0" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="8.0.0" />
<PackageReference Include="Microsoft.Orleans.Clustering.AdoNet" Version="8.1.0" />
<PackageReference Include="Microsoft.Orleans.OrleansTelemetryConsumers.Counters" Version="3.7.1" />
<PackageReference Include="Microsoft.Orleans.Persistence.AdoNet" Version="8.1.0" />
<PackageReference Include="Microsoft.Orleans.Sdk" Version="8.1.0" />
<PackageReference Include="Microsoft.Orleans.Server" Version="8.1.0" />
<PackageReference Include="OrleansDashboard" Version="8.0.0" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\OWS.Grains\OWS.Grains.csproj" />
<ProjectReference Include="..\OWS.Interfaces\OWS.Interfaces.csproj" />
</ItemGroup>
<PropertyGroup>
<OrleansGenerateFieldIds>true</OrleansGenerateFieldIds>
</PropertyGroup>
</Project>
78 changes: 78 additions & 0 deletions src/OWS.API.Silo/Program.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using OWSData.Repositories.Interfaces;
using OWSShared.Options;
using OWSShared.Implementations;
using OWSShared.Interfaces;

var configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.AddEnvironmentVariables()
.Build();

HostApplicationBuilder builder = Host.CreateApplicationBuilder(args);

builder.Configuration.Sources.Clear();
builder.Configuration.AddConfiguration(configuration);

OWSStorageConfig storageOptions = new();
builder.Configuration.GetSection(nameof(OWSStorageConfig)).Bind(storageOptions);

builder.Services.Configure<OWSStorageConfig>(
builder.Configuration.GetSection(
key: nameof(OWSStorageConfig)));

builder.Services.Configure<OWSShared.Options.RabbitMQOptions>(builder.Configuration.GetSection(RabbitMQOptions.SectionName));

builder.UseOrleans(silo =>
{
//Long term we shouldnt use our main SQL DB for clustering, for development we could use UseLocalhostClustering()
//but to be able to demonstrate scaling in docker locally we are using SQL.
silo.UseAdoNetClustering(options =>
{
options.Invariant = "Microsoft.Data.SqlClient";
options.ConnectionString = storageOptions.OWSDBConnectionString;
});

//This is currently unused but just to show how you could configure persistence backed by SQL
silo.AddAdoNetGrainStorage("OrleansStorage", options =>
{
options.Invariant = "Microsoft.Data.SqlClient";
options.ConnectionString = storageOptions.OWSDBConnectionString;
});
silo.UseInMemoryReminderService();
silo.UseDashboard();
});

switch (storageOptions.OWSDBBackend)
{
case "postgres":
builder.Services.AddScoped<IInstanceManagementRepository, OWSData.Repositories.Implementations.Postgres.InstanceManagementRepository>();
builder.Services.AddTransient<ICharactersRepository, OWSData.Repositories.Implementations.Postgres.CharactersRepository>();
builder.Services.AddTransient<IUsersRepository, OWSData.Repositories.Implementations.Postgres.UsersRepository>();
break;
case "mysql":
builder.Services.AddScoped<IInstanceManagementRepository, OWSData.Repositories.Implementations.MySQL.InstanceManagementRepository>();
builder.Services.AddTransient<ICharactersRepository, OWSData.Repositories.Implementations.MySQL.CharactersRepository>();
builder.Services.AddTransient<IUsersRepository, OWSData.Repositories.Implementations.MySQL.UsersRepository>();
break;
default: // Default to MSSQL
builder.Services.AddScoped<IInstanceManagementRepository, OWSData.Repositories.Implementations.MSSQL.InstanceManagementRepository>();
builder.Services.AddTransient<ICharactersRepository, OWSData.Repositories.Implementations.MSSQL.CharactersRepository>();
builder.Services.AddTransient<IUsersRepository, OWSData.Repositories.Implementations.MSSQL.UsersRepository>();
break;
}


builder.Services.AddLogging();
builder.Logging.AddConsole();

builder.Services.AddSingleton<IZoneServerProcessesRepository, OWSData.Repositories.Implementations.InMemory.ZoneServerProcessesRepository>();
builder.Services.AddSingleton<IOWSInstanceLauncherDataRepository, OWSData.Repositories.Implementations.InMemory.OWSInstanceLauncherDataRepository>();
builder.Services.AddSingleton<ICustomCharacterDataSelector, DefaultCustomCharacterDataSelector>();
builder.Services.AddSingleton<IGetReadOnlyPublicCharacterData, DefaultGetReadOnlyPublicCharacterData>();

using IHost host = builder.Build();
await host.RunAsync();
9 changes: 9 additions & 0 deletions src/OWS.API.Silo/appsettings.Development.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"Logging": {
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information"
}
}
}
12 changes: 12 additions & 0 deletions src/OWS.API.Silo/appsettings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"OWSStorageConfig": {
"OWSDBBackend": "mssql",
"OWSDBConnectionString": "Server=host.docker.internal;Database=OpenWorldServer;User Id=SA;Password=yourStrong(!)Password;ConnectRetryCount=0;TrustServerCertificate=True"
},
"RabbitMQOptions": {
"RabbitMQHostName": "host.docker.internal",
"RabbitMQPort": 5672,
"RabbitMQUserName": "dev",
"RabbitMQPassword": "test"
}
}
17 changes: 17 additions & 0 deletions src/OWS.Grains/BaseGrain.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
using Orleans.Runtime;

namespace OWS.Grains
{
public class BaseGrain : Grain
{
internal static Guid GetCustomerId()
{
if (!Guid.TryParse(RequestContext.Get("CustomerId").ToString(), out var customerGuid))
{
throw new ArgumentException("Invalid Customer ID");
}

return customerGuid;
}
}
}
Loading