Stormancer.Server.Plugins.GameSession 6.2.1.24-pre

This is a prerelease version of Stormancer.Server.Plugins.GameSession.
There is a newer version of this package available.
See the version list below for details.
dotnet add package Stormancer.Server.Plugins.GameSession --version 6.2.1.24-pre
                    
NuGet\Install-Package Stormancer.Server.Plugins.GameSession -Version 6.2.1.24-pre
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Stormancer.Server.Plugins.GameSession" Version="6.2.1.24-pre" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Stormancer.Server.Plugins.GameSession" Version="6.2.1.24-pre" />
                    
Directory.Packages.props
<PackageReference Include="Stormancer.Server.Plugins.GameSession" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Stormancer.Server.Plugins.GameSession --version 6.2.1.24-pre
                    
#r "nuget: Stormancer.Server.Plugins.GameSession, 6.2.1.24-pre"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Stormancer.Server.Plugins.GameSession@6.2.1.24-pre
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Stormancer.Server.Plugins.GameSession&version=6.2.1.24-pre&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=Stormancer.Server.Plugins.GameSession&version=6.2.1.24-pre&prerelease
                    
Install as a Cake Tool

This plugin adds support for P2P & client-server game sessions to a Stormancer application. It supports:

  • P2P and Client/Server game sessions
  • Electing an host in P2P game sessions
  • Managing game servers (requires adding ServerPools.hpp to the game server)
  • Game session startup/shutdown events
  • Game session results aggregation and processing in P2P (allows comparing game results from all peers) and Client/server (only the server sends game results)
  • Public or access restricted game sessions.

Setting up game servers

The gamesession system supports starting game servers to run the game session.

Development game servers

The development game server pool enables gamesessions to wait for the connection of a non authenticated gameserver to host the game session. This enables starting the game server manually from a developer computer, in the debugger or on the cmd prompt.The clients and game server uses the normal P2P connectivity system, supporting NAT traversal. This avoids the need of any configuration on the developer network.

ctx.HostStarting += (IHost host) =>
{
    [...]

    //Declares a development server pool named dev.
    host.ConfigureServerPools(c => c.DevPool("dev"));

    //Declares a gamesession type using the pool configured above.
    host.ConfigureGameSession("gamesession-server", c => c
        .UseGameServer(c => c
            .PoolId("dev")
            )
        .CustomizeScene(scene=>scene.AddSocket())
    );

    [...]
}

Hosting game servers on local docker

The docker server pool enables game servers to be run as docker container on Stormancer cluster. Containers are automatically started on the node running the less game instances. Other policies could be put in place if necessary.

ctx.HostStarting += (IHost host) =>
{
    [...]

    //Declares a docker server pool named docker, that uses the image 'game-server-image:latest'
    host.ConfigureServerPools(c => c.DockerPool("docker", b => b.Image("game-server-image:latest")));

    //Declares a gamesession type using the pool configured above.
    host.ConfigureGameSession("gamesession-server", c => c
        .UseGameServer(c => c
            .PoolId("docker")
            )
        .CustomizeScene(scene=>scene.AddSocket())
    );

    [...]
}

Other tasks are required to host game servers on docker:

Grid configuration

For the game servers to connect to the Stormancer cluster from inside docker containers, the grid nodes must not be bound to localhost. They must publish public, or at least LAN IP addresses. To do that, in the node configuration file, set both publicIp and loadbalancedIp to an interface accessible by docker containers, for instance:

{
    "constants": {
        "host-ip" : "xxx.xxx.xxx.xxx"
        "publicIp": "{host-ip}",
        "loadBalancedIp": "{host-ip}",
        [...]

Stormancer needs to associate local ports to the game server. To specify the range of ports to use, a delegated transport entry must be added to the grid nodes configuration:

[...]

"endpoints": {
    //udp transport
    "udp1": {
        "type": "raknet",
        "port": "{udpPort}",
        "maxConnections": 100,
        "publicEndpoint": "{publicIp}:{udpPort}"
    },
    
    [...]
    
    //delegated transport, allows specifying a pool of ports.
    "public1": {
        "type": "delegated",
        "publicEndpoint": "{publicIp}",
        "ports": {
        "min": 42000,
        "max": 44000

        }

    }
},
[...]

The node firewall must be opened for UDP in the range specified (42000-44000 in the example).

Secrets

Docker servers authentify with the grid using an encrypted token using the aes-gcm algorithm. The encryption key is stored in a cluster secret store that must be created manually. The path to the key is specified in the application' configuration in the gameServer dataProtection policy:

{
    [...]

    "dataProtection":{
	    "gameServer":{
		    "provider":"aes-gcm",
		    "key":"my-account/my-secret-store/gameServer",
		    "createKeyIfNotExists":true
	    }
        [...]
    }
}

The secrets store must be created prior to application start. If the CLI plugin Stormancer.Management.CLI is installed, it can be created using the following command:

> dotnet tool run stormancer manage secrets-store create --cluster test --account my-account --id my-secret-store

Analytics

The plugin produces the following analytics:

Product Compatible and additional computed target framework versions.
.NET net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (9)

Showing the top 5 NuGet packages that depend on Stormancer.Server.Plugins.GameSession:

Package Downloads
Stormancer.Server.Plugins.GameFinder

Provides Gamefinder features to a Stormancer server application.

Stormancer.Server.Plugins.Party

Provides Party related features to a Stormancer server application.

Stormancer.Server.Plugins.GameHistory

Game history system for Stormancer server applications.

Stormancer.Server.Plugins.Spectate

Provides game data streaming APIs for replay or realtime spectate.

Stormancer.Server.Plugins.Replication

Provides server services required for object replication.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
6.2.2.5-pre 144 10/10/2025
6.2.2.2-pre 216 8/27/2025
6.2.2.1-pre 345 5/9/2025
6.2.2-pre 143 4/25/2025
6.2.1.93-pre 124 7/30/2025
6.2.1.92-pre 174 6/4/2025
6.2.1.91-pre 174 6/4/2025
6.2.1.90-pre 174 6/3/2025
6.2.1.89-pre 166 6/3/2025
6.2.1.88-pre 166 6/3/2025
6.2.1.87-pre 166 6/3/2025
6.2.1.86 276 3/3/2025
6.2.1.86-pre 305 3/3/2025
6.2.1.85 312 2/28/2025
6.2.1.85-pre 191 12/20/2024
6.2.1.84-pre 193 10/25/2024
6.2.1.83-pre 135 10/15/2024
6.2.1.82-pre 373 9/30/2024
6.2.1.81-pre 389 9/26/2024
6.2.1.80-pre 336 8/28/2024
6.2.1.76-pre 165 8/9/2024
6.2.1.75-pre 169 8/9/2024
6.2.1.74-pre 153 8/9/2024
6.2.1.73-pre 153 8/9/2024
6.2.1.72-pre 187 8/2/2024
6.2.1.71-pre 556 6/10/2024
6.2.1.70-pre 321 4/17/2024
6.2.1.69-pre 170 4/17/2024
6.2.1.65-pre 212 4/16/2024
6.2.1.63-pre 328 4/2/2024
6.2.1.61-pre 357 3/11/2024
6.2.1.59-pre 175 1/17/2024
6.2.1.58-pre 184 1/12/2024
6.2.1.57-pre 360 12/11/2023
6.2.1.56-pre 181 12/7/2023
6.2.1.55-pre 282 12/1/2023
6.2.1.53-pre 286 11/22/2023
6.2.1.52-pre 359 11/20/2023
6.2.1.51-pre 137 11/15/2023
6.2.1.50-pre 164 11/14/2023
6.2.1.49-pre 165 11/14/2023
6.2.1.48-pre 169 11/14/2023
6.2.1.47-pre 148 11/14/2023
6.2.1.46-pre 166 11/13/2023
6.2.1.45-pre 152 11/13/2023
6.2.1.44-pre 152 11/13/2023
6.2.1.43-pre 156 11/12/2023
6.2.1.42-pre 179 11/12/2023
6.2.1.41-pre 161 11/12/2023
6.2.1.40-pre 172 11/12/2023
6.2.1.39-pre 163 11/12/2023
6.2.1.38-pre 151 11/12/2023
6.2.1.37-pre 158 11/12/2023
6.2.1.36-pre 206 11/12/2023
6.2.1.35-pre 219 11/11/2023
6.2.1.33-pre 197 11/8/2023
6.2.1.31-pre 142 11/7/2023
6.2.1.30-pre 168 11/7/2023
6.2.1.28-pre 240 10/27/2023
6.2.1.27-pre 207 10/27/2023
6.2.1.26-pre 173 10/27/2023
6.2.1.25-pre 164 10/27/2023
6.2.1.24-pre 286 10/27/2023
6.2.1.23-pre 268 10/25/2023
6.2.1.22-pre 165 10/23/2023
6.2.1.21-pre 166 10/20/2023
6.2.1.20-pre 165 10/20/2023
6.2.1.19-pre 273 10/20/2023
6.2.1.18-pre 165 10/20/2023
6.2.1.17-pre 169 10/20/2023
6.2.1.15-pre 158 10/19/2023
6.2.1.14-pre 248 10/19/2023
6.2.1.13-pre 248 10/13/2023
6.2.1.12-pre 162 10/13/2023
6.2.1.10-pre 218 10/12/2023
6.2.1.9-pre 177 10/12/2023
6.2.1.7-pre 181 10/11/2023
6.2.1.6-pre 156 10/11/2023
6.2.1.4-pre 178 10/11/2023
6.2.1.3-pre 172 10/11/2023
6.2.1.2-pre 232 10/10/2023
6.2.1.1-pre 220 10/5/2023
6.2.1-pre 348 10/4/2023
6.2.0.14-pre 167 10/2/2023
6.2.0.13-pre 205 9/29/2023
6.2.0.12-pre 174 9/28/2023
6.2.0.11-pre 340 9/12/2023
6.2.0.10-pre 215 9/8/2023
6.2.0.9-pre 199 9/7/2023
6.2.0.8-pre 197 9/1/2023
6.2.0.7-pre 155 8/31/2023
6.2.0.6-pre 223 8/29/2023
6.2.0.5-pre 423 8/18/2023
6.2.0.4-pre 270 8/18/2023
6.2.0.3-pre 244 8/17/2023
6.2.0.2-pre 206 8/17/2023
6.2.0-pre 224 8/9/2023
6.1.2.35-pre 211 8/4/2023
6.1.2.34-pre 267 8/3/2023
6.1.2.33-pre 313 8/1/2023
6.1.2.32-pre 217 8/1/2023
6.1.2.31-pre 421 6/29/2023
6.1.2.30-pre 258 6/29/2023
6.1.2.29-pre 593 6/15/2023
6.1.2.28-pre 226 6/15/2023
6.1.2.27-pre 214 6/15/2023
6.1.2.26-pre 228 6/15/2023
6.1.2.25-pre 216 6/15/2023
6.1.2.24-pre 242 6/15/2023
6.1.2.23-pre 228 6/15/2023
6.1.2.22-pre 218 6/15/2023
6.1.2.21-pre 229 6/15/2023
6.1.2.20-pre 205 6/15/2023
6.1.2.19-pre 248 6/15/2023
6.1.2.18-pre 414 6/6/2023
6.1.2.17-pre 264 6/6/2023
6.1.2.15-pre 292 5/30/2023
6.1.2.14-pre 436 5/24/2023
6.1.2.13-pre 328 5/18/2023
6.1.2.12-pre 208 5/18/2023
6.1.2.11-pre 221 5/18/2023
6.1.2.10-pre 273 5/17/2023
6.1.2.8-pre 261 5/15/2023
6.1.2.7-pre 294 5/12/2023
6.1.2.6-pre 249 5/11/2023
6.1.2.5-pre 225 5/11/2023
6.1.2.4-pre 248 5/11/2023
6.1.2.3-pre 229 5/11/2023
6.1.2.2-pre 258 5/11/2023
6.1.2.1-pre 420 5/9/2023
6.1.2-pre 235 5/9/2023
6.1.1.15 483 5/9/2023
6.1.1.15-pre 236 5/5/2023
6.1.1.14-pre 211 5/5/2023
6.1.1.13-pre 204 4/30/2023
6.1.1.12-pre 261 4/30/2023
6.1.1.11-pre 211 4/27/2023
6.1.1.10-pre 267 4/24/2023
6.1.1.9-pre 269 4/21/2023
6.1.1.8-pre 216 4/21/2023
6.1.1.7-pre 255 4/21/2023
6.1.1.6-pre 253 4/21/2023
6.1.1.3-pre 275 4/13/2023
6.1.1.2-pre 230 4/13/2023
6.1.1.1-pre 240 4/13/2023
6.1.0.20-pre 282 4/11/2023
6.1.0.19-pre 231 4/7/2023
6.1.0.18-pre 241 4/6/2023
6.1.0.17 619 4/4/2023
6.1.0.17-pre 272 3/31/2023
6.1.0.16-pre 222 3/31/2023
6.1.0.15-pre 236 3/30/2023
6.1.0.13-pre 228 3/30/2023
6.1.0.12-pre 258 3/29/2023
6.1.0.11-pre 242 3/29/2023
6.1.0.10-pre 262 3/29/2023
6.1.0.9-pre 246 3/29/2023
6.1.0.8-pre 256 3/29/2023
6.1.0.7-pre 247 3/29/2023
6.1.0.6-pre 230 3/29/2023
6.1.0.5-pre 238 3/28/2023
6.1.0.4-pre 236 3/28/2023
6.1.0.3-pre 235 3/21/2023
6.1.0.2-pre 262 3/21/2023
6.1.0.1-pre 280 3/19/2023
6.1.0-pre 252 3/19/2023
6.0.3.6-pre 649 12/8/2022
6.0.3.5-pre 235 12/8/2022
6.0.3.4-pre 222 12/7/2022
6.0.3.3-pre 218 12/7/2022
6.0.3.2-pre 282 12/7/2022
6.0.3.1-pre 267 12/7/2022
6.0.3-pre 249 12/6/2022
6.0.2 527 10/28/2022
6.0.1.1 1,124 10/26/2022
6.0.1.1-pre 268 10/26/2022
6.0.0.3-pre 270 10/3/2022
6.0.0.2 1,655 9/28/2022
6.0.0.2-pre 574 9/12/2022
5.5.0.11-pre 660 8/2/2022
5.5.0.10-pre 288 7/27/2022
5.5.0.9-pre 621 7/1/2022
5.5.0.8-pre 398 6/9/2022
5.5.0.3-pre 286 5/24/2022
5.4.0.60-pre 735 4/12/2022
5.4.0.59-pre 331 4/12/2022
5.4.0.58-pre 356 3/31/2022
5.4.0.57-pre 302 3/31/2022
5.4.0.56-pre 308 3/24/2022
5.4.0.55-pre 321 3/23/2022
5.4.0.53-pre 329 3/22/2022
5.4.0.51-pre 487 3/15/2022
5.4.0.26-pre 301 3/14/2022
5.4.0.25-pre 299 3/14/2022
5.4.0.23-pre 323 3/8/2022
5.4.0.22-pre 308 3/1/2022
5.4.0.7-pre 466 2/28/2022
5.3.0.104-pre 289 3/17/2022
5.3.0.103-pre 305 3/17/2022
5.3.0 3,001 1/21/2022
5.3.0-pre 738 1/14/2022
5.2.0 1,727 12/15/2021
5.2.0-pre 512 10/26/2021
5.1.0.1 1,105 10/14/2021
5.0.1.2 1,501 5/23/2021
5.0.1.2-pre 1,066 5/12/2021
5.0.1-pre 472 5/3/2021
4.0.7 1,247 4/29/2021
4.0.6 617 4/19/2021
4.0.5 647 3/22/2021
4.0.4.1 956 3/20/2021
4.0.4 1,466 3/1/2021
4.0.3.2 639 12/18/2020
4.0.3.2-pre 532 12/17/2020
4.0.3.1-pre 473 12/17/2020
4.0.3-pre 509 12/17/2020
4.0.1.1 1,146 12/9/2020
4.0.0.1 1,389 12/4/2020
3.3.4 660 12/9/2020
3.3.3.2 674 12/8/2020
3.3.3.2-pre 492 12/8/2020
3.3.2.2 1,376 10/20/2020
3.3.2.2-pre 675 10/13/2020
3.3.2.1-pre 578 9/29/2020
3.3.2-pre 1,253 8/11/2020
3.3.1.1-pre 560 8/11/2020
3.3.1-pre 484 8/11/2020
3.3.0-pre 539 7/1/2020
3.2.3-pre 512 6/30/2020
3.2.2-pre 511 6/23/2020
3.2.1-pre 557 6/22/2020
3.2.0-pre 662 6/16/2020
3.1.3-pre 551 6/15/2020
3.1.2-pre 583 6/9/2020
3.0.2 703 6/15/2020
3.0.2-pre 591 6/5/2020
3.0.1 1,590 5/27/2020
3.0.1-pre 1,017 3/30/2020
3.0.0-pre 1,374 3/29/2020
2.0.0.3 772 2/20/2020
2.0.0.3-pre 1,121 2/22/2020
2.0.0.2 763 2/19/2020
2.0.0.1 1,369 2/19/2020
2.0.0 1,028 2/13/2020
1.2.1-alpha.2 460 2/19/2020
1.2.1-alpha.1 469 1/27/2020
1.1.1 1,154 1/21/2020
1.1.1-alpha.1 464 2/19/2020
1.0.0.3 1,342 1/4/2020
1.0.0.2 826 1/4/2020
1.0.0.1 1,318 1/4/2020

Added
*****
- Added support for crash reports in game server agent.
- Exclude agents for 30s when they failed to create a server
- Kill agents if they fail twice in succession, indicating they are faulty.
- Added `IGameSessionEventHandler.OnGameSessionShutdown` event fired during scene shutdown.
- Added `IGameSessionEventHandler.OnGameSessionReset` event fired when the gamesession is reset by the host.
- Added `IGameSessionEventHandler.ShouldCompleteGame` event fired to decide if the gamesession should evaluate the results posted with PostResult and complete the game.
- Added property `CreatedOn` on `IGamesessionService` to get the UTC date the gamesession was created.
- Added Session to context of `IGameSessionEventHandler.OnGameSessionCompleted`.
- Added support for regions.
- Added PostingGameResults event fired whenever a client sends results to the game session.
- Added Admin API to get events and live state about a gamesession.
- Added Admin API to retrive the server logs of a gamesession.

Changed
*******
- Removed a retry when creating a game session.
- Declared game servers as service clients to disable client related features, for instance version checking.
- Compatibility with Player models 4.0.0

Fixed
*****
- Fixed infinite loop in the analytics worker loop.
- Fixed an wrong null check on closing servers that could lead to a NullRef exception when updating the game server auditing record.
- When trying to start a game server, timeout if it takes more than 5s to do a docker start on an agent.
- Fixed false positives error logs.
- Resetting a game session force the gamesession to be completed if it wasn't already, exactly as if all players add left it. This guarantees that if only the host sent results, they would be processed on reset, triggering (for instance) a PSN Activity completion.
- Made the plugin compatible with Users 9.0.0
- Do not try getting the client in PostResults if it is not in the list of clients.
- Fixed host couldn't be found in gamesessions if specified in the game session config because SessionId was compared with the user id.
- Don't shutdown the game session if there is no player but pending reservations.