Stormancer.Server.Plugins.GameSession 6.1.1.15

There is a newer prerelease version of this package available.
See the version list below for details.
dotnet add package Stormancer.Server.Plugins.GameSession --version 6.1.1.15                
NuGet\Install-Package Stormancer.Server.Plugins.GameSession -Version 6.1.1.15                
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.1.1.15" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Stormancer.Server.Plugins.GameSession --version 6.1.1.15                
#r "nuget: Stormancer.Server.Plugins.GameSession, 6.1.1.15"                
#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.
// Install Stormancer.Server.Plugins.GameSession as a Cake Addin
#addin nuget:?package=Stormancer.Server.Plugins.GameSession&version=6.1.1.15

// Install Stormancer.Server.Plugins.GameSession as a Cake Tool
#tool nuget:?package=Stormancer.Server.Plugins.GameSession&version=6.1.1.15                

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. 
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.1.85-pre 67 12/20/2024
6.2.1.84-pre 101 10/25/2024
6.2.1.83-pre 96 10/15/2024
6.2.1.82-pre 221 9/30/2024
6.2.1.81-pre 212 9/26/2024
6.2.1.80-pre 199 8/28/2024
6.2.1.76-pre 120 8/9/2024
6.2.1.75-pre 126 8/9/2024
6.2.1.74-pre 107 8/9/2024
6.2.1.73-pre 102 8/9/2024
6.2.1.72-pre 105 8/2/2024
6.2.1.71-pre 305 6/10/2024
6.2.1.70-pre 180 4/17/2024
6.2.1.69-pre 115 4/17/2024
6.2.1.65-pre 129 4/16/2024
6.2.1.63-pre 196 4/2/2024
6.2.1.61-pre 185 3/11/2024
6.2.1.59-pre 123 1/17/2024
6.2.1.58-pre 135 1/12/2024
6.2.1.57-pre 245 12/11/2023
6.2.1.56-pre 142 12/7/2023
6.2.1.55-pre 165 12/1/2023
6.2.1.53-pre 188 11/22/2023
6.2.1.52-pre 166 11/20/2023
6.2.1.51-pre 96 11/15/2023
6.2.1.50-pre 121 11/14/2023
6.2.1.49-pre 118 11/14/2023
6.2.1.48-pre 129 11/14/2023
6.2.1.47-pre 119 11/14/2023
6.2.1.46-pre 123 11/13/2023
6.2.1.45-pre 114 11/13/2023
6.2.1.44-pre 109 11/13/2023
6.2.1.43-pre 111 11/12/2023
6.2.1.42-pre 137 11/12/2023
6.2.1.41-pre 123 11/12/2023
6.2.1.40-pre 124 11/12/2023
6.2.1.39-pre 120 11/12/2023
6.2.1.38-pre 110 11/12/2023
6.2.1.37-pre 120 11/12/2023
6.2.1.36-pre 128 11/12/2023
6.2.1.35-pre 137 11/11/2023
6.2.1.33-pre 129 11/8/2023
6.2.1.31-pre 101 11/7/2023
6.2.1.30-pre 128 11/7/2023
6.2.1.28-pre 157 10/27/2023
6.2.1.27-pre 149 10/27/2023
6.2.1.26-pre 129 10/27/2023
6.2.1.25-pre 120 10/27/2023
6.2.1.24-pre 185 10/27/2023
6.2.1.23-pre 132 10/25/2023
6.2.1.22-pre 120 10/23/2023
6.2.1.21-pre 118 10/20/2023
6.2.1.20-pre 119 10/20/2023
6.2.1.19-pre 159 10/20/2023
6.2.1.18-pre 112 10/20/2023
6.2.1.17-pre 118 10/20/2023
6.2.1.15-pre 108 10/19/2023
6.2.1.14-pre 151 10/19/2023
6.2.1.13-pre 158 10/13/2023
6.2.1.12-pre 114 10/13/2023
6.2.1.10-pre 138 10/12/2023
6.2.1.9-pre 125 10/12/2023
6.2.1.7-pre 127 10/11/2023
6.2.1.6-pre 109 10/11/2023
6.2.1.4-pre 131 10/11/2023
6.2.1.3-pre 127 10/11/2023
6.2.1.2-pre 154 10/10/2023
6.2.1.1-pre 125 10/5/2023
6.2.1-pre 195 10/4/2023
6.2.0.14-pre 131 10/2/2023
6.2.0.13-pre 129 9/29/2023
6.2.0.12-pre 122 9/28/2023
6.2.0.11-pre 221 9/12/2023
6.2.0.10-pre 143 9/8/2023
6.2.0.9-pre 135 9/7/2023
6.2.0.8-pre 134 9/1/2023
6.2.0.7-pre 88 8/31/2023
6.2.0.6-pre 136 8/29/2023
6.2.0.5-pre 265 8/18/2023
6.2.0.4-pre 180 8/18/2023
6.2.0.3-pre 154 8/17/2023
6.2.0.2-pre 139 8/17/2023
6.2.0-pre 156 8/9/2023
6.1.2.35-pre 140 8/4/2023
6.1.2.34-pre 172 8/3/2023
6.1.2.33-pre 214 8/1/2023
6.1.2.32-pre 150 8/1/2023
6.1.2.31-pre 279 6/29/2023
6.1.2.30-pre 185 6/29/2023
6.1.2.29-pre 380 6/15/2023
6.1.2.28-pre 140 6/15/2023
6.1.2.27-pre 141 6/15/2023
6.1.2.26-pre 133 6/15/2023
6.1.2.25-pre 146 6/15/2023
6.1.2.24-pre 157 6/15/2023
6.1.2.23-pre 152 6/15/2023
6.1.2.22-pre 148 6/15/2023
6.1.2.21-pre 136 6/15/2023
6.1.2.20-pre 131 6/15/2023
6.1.2.19-pre 137 6/15/2023
6.1.2.18-pre 201 6/6/2023
6.1.2.17-pre 159 6/6/2023
6.1.2.15-pre 198 5/30/2023
6.1.2.14-pre 245 5/24/2023
6.1.2.13-pre 210 5/18/2023
6.1.2.12-pre 127 5/18/2023
6.1.2.11-pre 129 5/18/2023
6.1.2.10-pre 170 5/17/2023
6.1.2.8-pre 146 5/15/2023
6.1.2.7-pre 158 5/12/2023
6.1.2.6-pre 142 5/11/2023
6.1.2.5-pre 134 5/11/2023
6.1.2.4-pre 156 5/11/2023
6.1.2.3-pre 139 5/11/2023
6.1.2.2-pre 139 5/11/2023
6.1.2.1-pre 251 5/9/2023
6.1.2-pre 139 5/9/2023
6.1.1.15 357 5/9/2023
6.1.1.15-pre 140 5/5/2023
6.1.1.14-pre 119 5/5/2023
6.1.1.13-pre 125 4/30/2023
6.1.1.12-pre 162 4/30/2023
6.1.1.11-pre 129 4/27/2023
6.1.1.10-pre 163 4/24/2023
6.1.1.9-pre 173 4/21/2023
6.1.1.8-pre 132 4/21/2023
6.1.1.7-pre 174 4/21/2023
6.1.1.6-pre 147 4/21/2023
6.1.1.3-pre 167 4/13/2023
6.1.1.2-pre 140 4/13/2023
6.1.1.1-pre 148 4/13/2023
6.1.0.20-pre 179 4/11/2023
6.1.0.19-pre 140 4/7/2023
6.1.0.18-pre 156 4/6/2023
6.1.0.17 478 4/4/2023
6.1.0.17-pre 166 3/31/2023
6.1.0.16-pre 134 3/31/2023
6.1.0.15-pre 142 3/30/2023
6.1.0.13-pre 143 3/30/2023
6.1.0.12-pre 151 3/29/2023
6.1.0.11-pre 148 3/29/2023
6.1.0.10-pre 155 3/29/2023
6.1.0.9-pre 153 3/29/2023
6.1.0.8-pre 160 3/29/2023
6.1.0.7-pre 152 3/29/2023
6.1.0.6-pre 132 3/29/2023
6.1.0.5-pre 144 3/28/2023
6.1.0.4-pre 146 3/28/2023
6.1.0.3-pre 154 3/21/2023
6.1.0.2-pre 168 3/21/2023
6.1.0.1-pre 177 3/19/2023
6.1.0-pre 153 3/19/2023
6.0.3.6-pre 373 12/8/2022
6.0.3.5-pre 149 12/8/2022
6.0.3.4-pre 125 12/7/2022
6.0.3.3-pre 130 12/7/2022
6.0.3.2-pre 174 12/7/2022
6.0.3.1-pre 150 12/7/2022
6.0.3-pre 139 12/6/2022
6.0.2 430 10/28/2022
6.0.1.1 959 10/26/2022
6.0.1.1-pre 169 10/26/2022
6.0.0.3-pre 169 10/3/2022
6.0.0.2 1,450 9/28/2022
6.0.0.2-pre 358 9/12/2022
5.5.0.11-pre 428 8/2/2022
5.5.0.10-pre 178 7/27/2022
5.5.0.9-pre 386 7/1/2022
5.5.0.8-pre 252 6/9/2022
5.5.0.3-pre 169 5/24/2022
5.4.0.60-pre 469 4/12/2022
5.4.0.59-pre 212 4/12/2022
5.4.0.58-pre 226 3/31/2022
5.4.0.57-pre 188 3/31/2022
5.4.0.56-pre 184 3/24/2022
5.4.0.55-pre 191 3/23/2022
5.4.0.53-pre 198 3/22/2022
5.4.0.51-pre 308 3/15/2022
5.4.0.26-pre 184 3/14/2022
5.4.0.25-pre 192 3/14/2022
5.4.0.23-pre 204 3/8/2022
5.4.0.22-pre 186 3/1/2022
5.4.0.7-pre 286 2/28/2022
5.3.0.104-pre 186 3/17/2022
5.3.0.103-pre 186 3/17/2022
5.3.0 2,721 1/21/2022
5.3.0-pre 436 1/14/2022
5.2.0 1,469 12/15/2021
5.2.0-pre 329 10/26/2021
5.1.0.1 869 10/14/2021
5.0.1.2 1,265 5/23/2021
5.0.1.2-pre 725 5/12/2021
5.0.1-pre 309 5/3/2021
4.0.7 1,053 4/29/2021
4.0.6 477 4/19/2021
4.0.5 523 3/22/2021
4.0.4.1 764 3/20/2021
4.0.4 1,174 3/1/2021
4.0.3.2 496 12/18/2020
4.0.3.2-pre 378 12/17/2020
4.0.3.1-pre 326 12/17/2020
4.0.3-pre 350 12/17/2020
4.0.1.1 899 12/9/2020
4.0.0.1 1,161 12/4/2020
3.3.4 515 12/9/2020
3.3.3.2 519 12/8/2020
3.3.3.2-pre 351 12/8/2020
3.3.2.2 1,170 10/20/2020
3.3.2.2-pre 478 10/13/2020
3.3.2.1-pre 391 9/29/2020
3.3.2-pre 891 8/11/2020
3.3.1.1-pre 416 8/11/2020
3.3.1-pre 340 8/11/2020
3.3.0-pre 396 7/1/2020
3.2.3-pre 366 6/30/2020
3.2.2-pre 363 6/23/2020
3.2.1-pre 413 6/22/2020
3.2.0-pre 486 6/16/2020
3.1.3-pre 406 6/15/2020
3.1.2-pre 423 6/9/2020
3.0.2 565 6/15/2020
3.0.2-pre 445 6/5/2020
3.0.1 1,378 5/27/2020
3.0.1-pre 751 3/30/2020
3.0.0-pre 1,026 3/29/2020
2.0.0.3 619 2/20/2020
2.0.0.3-pre 843 2/22/2020
2.0.0.2 609 2/19/2020
2.0.0.1 1,172 2/19/2020
2.0.0 837 2/13/2020
1.2.1-alpha.2 331 2/19/2020
1.2.1-alpha.1 340 1/27/2020
1.1.1 966 1/21/2020
1.1.1-alpha.1 340 2/19/2020
1.0.0.3 1,140 1/4/2020
1.0.0.2 671 1/4/2020
1.0.0.1 1,123 1/4/2020

Changed
*******
- Add MaxPlayersInGameSession analytics
- Notify gameserver hosting agents when the app is not an active deployment.
- Make sure that calling IsHost never throws, but instead returns false.
- Don't send Teams infos to analytics
- Add gamefinder and Parameters to analytics
- Added the affected Players to the ReservationCancelledContext instead of only their user id.
- P2P is now the default mode if a gameserver couldn't be located.

Fixed
*****
- Don't wait 5s before returning PostResults response for the last player in the session.