Stormancer.Server.Plugins.GameSession
6.1.2.34-pre
See the version list below for details.
dotnet add package Stormancer.Server.Plugins.GameSession --version 6.1.2.34-pre
NuGet\Install-Package Stormancer.Server.Plugins.GameSession -Version 6.1.2.34-pre
<PackageReference Include="Stormancer.Server.Plugins.GameSession" Version="6.1.2.34-pre" />
paket add Stormancer.Server.Plugins.GameSession --version 6.1.2.34-pre
#r "nuget: Stormancer.Server.Plugins.GameSession, 6.1.2.34-pre"
// Install Stormancer.Server.Plugins.GameSession as a Cake Addin #addin nuget:?package=Stormancer.Server.Plugins.GameSession&version=6.1.2.34-pre&prerelease // Install Stormancer.Server.Plugins.GameSession as a Cake Tool #tool nuget:?package=Stormancer.Server.Plugins.GameSession&version=6.1.2.34-pre&prerelease
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 | Versions 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. |
-
net6.0
- Docker.DotNet (>= 3.125.12)
- MsgPack.Cli (>= 1.0.1)
- Stormancer.Abstractions.Server (>= 9.3.0)
- Stormancer.Server.Plugins.Api (>= 3.0.0.2-pre)
- Stormancer.Server.Plugins.DataProtection (>= 2.0.1.4-pre)
- Stormancer.Server.Plugins.Management (>= 3.1.0-pre)
- Stormancer.Server.Plugins.Models (>= 3.0.3.9-pre)
- Stormancer.Server.Plugins.Users (>= 8.1.0.2-pre)
- System.Interactive.Async (>= 5.0.0)
- System.Linq.Async (>= 6.0.1)
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.84-pre | 78 | 10/25/2024 |
6.2.1.83-pre | 85 | 10/15/2024 |
6.2.1.82-pre | 213 | 9/30/2024 |
6.2.1.81-pre | 199 | 9/26/2024 |
6.2.1.80-pre | 191 | 8/28/2024 |
6.2.1.76-pre | 112 | 8/9/2024 |
6.2.1.75-pre | 117 | 8/9/2024 |
6.2.1.74-pre | 96 | 8/9/2024 |
6.2.1.73-pre | 92 | 8/9/2024 |
6.2.1.72-pre | 94 | 8/2/2024 |
6.2.1.71-pre | 295 | 6/10/2024 |
6.2.1.70-pre | 174 | 4/17/2024 |
6.2.1.69-pre | 106 | 4/17/2024 |
6.2.1.65-pre | 122 | 4/16/2024 |
6.2.1.63-pre | 190 | 4/2/2024 |
6.2.1.61-pre | 175 | 3/11/2024 |
6.2.1.59-pre | 116 | 1/17/2024 |
6.2.1.58-pre | 129 | 1/12/2024 |
6.2.1.57-pre | 237 | 12/11/2023 |
6.2.1.56-pre | 135 | 12/7/2023 |
6.2.1.55-pre | 156 | 12/1/2023 |
6.2.1.53-pre | 182 | 11/22/2023 |
6.2.1.52-pre | 160 | 11/20/2023 |
6.2.1.51-pre | 89 | 11/15/2023 |
6.2.1.50-pre | 114 | 11/14/2023 |
6.2.1.49-pre | 112 | 11/14/2023 |
6.2.1.48-pre | 118 | 11/14/2023 |
6.2.1.47-pre | 112 | 11/14/2023 |
6.2.1.46-pre | 114 | 11/13/2023 |
6.2.1.45-pre | 107 | 11/13/2023 |
6.2.1.44-pre | 102 | 11/13/2023 |
6.2.1.43-pre | 105 | 11/12/2023 |
6.2.1.42-pre | 130 | 11/12/2023 |
6.2.1.41-pre | 117 | 11/12/2023 |
6.2.1.40-pre | 118 | 11/12/2023 |
6.2.1.39-pre | 114 | 11/12/2023 |
6.2.1.38-pre | 102 | 11/12/2023 |
6.2.1.37-pre | 114 | 11/12/2023 |
6.2.1.36-pre | 122 | 11/12/2023 |
6.2.1.35-pre | 131 | 11/11/2023 |
6.2.1.33-pre | 119 | 11/8/2023 |
6.2.1.31-pre | 95 | 11/7/2023 |
6.2.1.30-pre | 122 | 11/7/2023 |
6.2.1.28-pre | 151 | 10/27/2023 |
6.2.1.27-pre | 143 | 10/27/2023 |
6.2.1.26-pre | 123 | 10/27/2023 |
6.2.1.25-pre | 114 | 10/27/2023 |
6.2.1.24-pre | 179 | 10/27/2023 |
6.2.1.23-pre | 126 | 10/25/2023 |
6.2.1.22-pre | 114 | 10/23/2023 |
6.2.1.21-pre | 110 | 10/20/2023 |
6.2.1.20-pre | 113 | 10/20/2023 |
6.2.1.19-pre | 153 | 10/20/2023 |
6.2.1.18-pre | 106 | 10/20/2023 |
6.2.1.17-pre | 112 | 10/20/2023 |
6.2.1.15-pre | 102 | 10/19/2023 |
6.2.1.14-pre | 145 | 10/19/2023 |
6.2.1.13-pre | 152 | 10/13/2023 |
6.2.1.12-pre | 108 | 10/13/2023 |
6.2.1.10-pre | 132 | 10/12/2023 |
6.2.1.9-pre | 119 | 10/12/2023 |
6.2.1.7-pre | 120 | 10/11/2023 |
6.2.1.6-pre | 101 | 10/11/2023 |
6.2.1.4-pre | 122 | 10/11/2023 |
6.2.1.3-pre | 119 | 10/11/2023 |
6.2.1.2-pre | 146 | 10/10/2023 |
6.2.1.1-pre | 119 | 10/5/2023 |
6.2.1-pre | 186 | 10/4/2023 |
6.2.0.14-pre | 123 | 10/2/2023 |
6.2.0.13-pre | 121 | 9/29/2023 |
6.2.0.12-pre | 116 | 9/28/2023 |
6.2.0.11-pre | 213 | 9/12/2023 |
6.2.0.10-pre | 135 | 9/8/2023 |
6.2.0.9-pre | 129 | 9/7/2023 |
6.2.0.8-pre | 126 | 9/1/2023 |
6.2.0.7-pre | 79 | 8/31/2023 |
6.2.0.6-pre | 128 | 8/29/2023 |
6.2.0.5-pre | 257 | 8/18/2023 |
6.2.0.4-pre | 174 | 8/18/2023 |
6.2.0.3-pre | 148 | 8/17/2023 |
6.2.0.2-pre | 131 | 8/17/2023 |
6.2.0-pre | 148 | 8/9/2023 |
6.1.2.35-pre | 132 | 8/4/2023 |
6.1.2.34-pre | 166 | 8/3/2023 |
6.1.2.33-pre | 208 | 8/1/2023 |
6.1.2.32-pre | 142 | 8/1/2023 |
6.1.2.31-pre | 271 | 6/29/2023 |
6.1.2.30-pre | 177 | 6/29/2023 |
6.1.2.29-pre | 372 | 6/15/2023 |
6.1.2.28-pre | 134 | 6/15/2023 |
6.1.2.27-pre | 133 | 6/15/2023 |
6.1.2.26-pre | 125 | 6/15/2023 |
6.1.2.25-pre | 138 | 6/15/2023 |
6.1.2.24-pre | 149 | 6/15/2023 |
6.1.2.23-pre | 144 | 6/15/2023 |
6.1.2.22-pre | 139 | 6/15/2023 |
6.1.2.21-pre | 128 | 6/15/2023 |
6.1.2.20-pre | 123 | 6/15/2023 |
6.1.2.19-pre | 129 | 6/15/2023 |
6.1.2.18-pre | 195 | 6/6/2023 |
6.1.2.17-pre | 151 | 6/6/2023 |
6.1.2.15-pre | 190 | 5/30/2023 |
6.1.2.14-pre | 239 | 5/24/2023 |
6.1.2.13-pre | 202 | 5/18/2023 |
6.1.2.12-pre | 119 | 5/18/2023 |
6.1.2.11-pre | 121 | 5/18/2023 |
6.1.2.10-pre | 162 | 5/17/2023 |
6.1.2.8-pre | 138 | 5/15/2023 |
6.1.2.7-pre | 150 | 5/12/2023 |
6.1.2.6-pre | 136 | 5/11/2023 |
6.1.2.5-pre | 126 | 5/11/2023 |
6.1.2.4-pre | 148 | 5/11/2023 |
6.1.2.3-pre | 133 | 5/11/2023 |
6.1.2.2-pre | 131 | 5/11/2023 |
6.1.2.1-pre | 245 | 5/9/2023 |
6.1.2-pre | 131 | 5/9/2023 |
6.1.1.15 | 344 | 5/9/2023 |
6.1.1.15-pre | 134 | 5/5/2023 |
6.1.1.14-pre | 111 | 5/5/2023 |
6.1.1.13-pre | 117 | 4/30/2023 |
6.1.1.12-pre | 156 | 4/30/2023 |
6.1.1.11-pre | 121 | 4/27/2023 |
6.1.1.10-pre | 155 | 4/24/2023 |
6.1.1.9-pre | 165 | 4/21/2023 |
6.1.1.8-pre | 126 | 4/21/2023 |
6.1.1.7-pre | 166 | 4/21/2023 |
6.1.1.6-pre | 139 | 4/21/2023 |
6.1.1.3-pre | 161 | 4/13/2023 |
6.1.1.2-pre | 134 | 4/13/2023 |
6.1.1.1-pre | 142 | 4/13/2023 |
6.1.0.20-pre | 171 | 4/11/2023 |
6.1.0.19-pre | 134 | 4/7/2023 |
6.1.0.18-pre | 148 | 4/6/2023 |
6.1.0.17 | 468 | 4/4/2023 |
6.1.0.17-pre | 160 | 3/31/2023 |
6.1.0.16-pre | 128 | 3/31/2023 |
6.1.0.15-pre | 134 | 3/30/2023 |
6.1.0.13-pre | 133 | 3/30/2023 |
6.1.0.12-pre | 143 | 3/29/2023 |
6.1.0.11-pre | 139 | 3/29/2023 |
6.1.0.10-pre | 149 | 3/29/2023 |
6.1.0.9-pre | 147 | 3/29/2023 |
6.1.0.8-pre | 152 | 3/29/2023 |
6.1.0.7-pre | 146 | 3/29/2023 |
6.1.0.6-pre | 126 | 3/29/2023 |
6.1.0.5-pre | 138 | 3/28/2023 |
6.1.0.4-pre | 138 | 3/28/2023 |
6.1.0.3-pre | 147 | 3/21/2023 |
6.1.0.2-pre | 160 | 3/21/2023 |
6.1.0.1-pre | 171 | 3/19/2023 |
6.1.0-pre | 145 | 3/19/2023 |
6.0.3.6-pre | 365 | 12/8/2022 |
6.0.3.5-pre | 141 | 12/8/2022 |
6.0.3.4-pre | 117 | 12/7/2022 |
6.0.3.3-pre | 124 | 12/7/2022 |
6.0.3.2-pre | 168 | 12/7/2022 |
6.0.3.1-pre | 142 | 12/7/2022 |
6.0.3-pre | 131 | 12/6/2022 |
6.0.2 | 417 | 10/28/2022 |
6.0.1.1 | 945 | 10/26/2022 |
6.0.1.1-pre | 160 | 10/26/2022 |
6.0.0.3-pre | 160 | 10/3/2022 |
6.0.0.2 | 1,437 | 9/28/2022 |
6.0.0.2-pre | 351 | 9/12/2022 |
5.5.0.11-pre | 419 | 8/2/2022 |
5.5.0.10-pre | 169 | 7/27/2022 |
5.5.0.9-pre | 379 | 7/1/2022 |
5.5.0.8-pre | 243 | 6/9/2022 |
5.5.0.3-pre | 162 | 5/24/2022 |
5.4.0.60-pre | 462 | 4/12/2022 |
5.4.0.59-pre | 205 | 4/12/2022 |
5.4.0.58-pre | 219 | 3/31/2022 |
5.4.0.57-pre | 181 | 3/31/2022 |
5.4.0.56-pre | 175 | 3/24/2022 |
5.4.0.55-pre | 184 | 3/23/2022 |
5.4.0.53-pre | 188 | 3/22/2022 |
5.4.0.51-pre | 299 | 3/15/2022 |
5.4.0.26-pre | 177 | 3/14/2022 |
5.4.0.25-pre | 183 | 3/14/2022 |
5.4.0.23-pre | 195 | 3/8/2022 |
5.4.0.22-pre | 179 | 3/1/2022 |
5.4.0.7-pre | 277 | 2/28/2022 |
5.3.0.104-pre | 177 | 3/17/2022 |
5.3.0.103-pre | 179 | 3/17/2022 |
5.3.0 | 2,708 | 1/21/2022 |
5.3.0-pre | 429 | 1/14/2022 |
5.2.0 | 1,456 | 12/15/2021 |
5.2.0-pre | 320 | 10/26/2021 |
5.1.0.1 | 857 | 10/14/2021 |
5.0.1.2 | 1,254 | 5/23/2021 |
5.0.1.2-pre | 717 | 5/12/2021 |
5.0.1-pre | 302 | 5/3/2021 |
4.0.7 | 1,042 | 4/29/2021 |
4.0.6 | 466 | 4/19/2021 |
4.0.5 | 512 | 3/22/2021 |
4.0.4.1 | 753 | 3/20/2021 |
4.0.4 | 1,162 | 3/1/2021 |
4.0.3.2 | 485 | 12/18/2020 |
4.0.3.2-pre | 371 | 12/17/2020 |
4.0.3.1-pre | 317 | 12/17/2020 |
4.0.3-pre | 341 | 12/17/2020 |
4.0.1.1 | 886 | 12/9/2020 |
4.0.0.1 | 1,147 | 12/4/2020 |
3.3.4 | 502 | 12/9/2020 |
3.3.3.2 | 506 | 12/8/2020 |
3.3.3.2-pre | 342 | 12/8/2020 |
3.3.2.2 | 1,157 | 10/20/2020 |
3.3.2.2-pre | 469 | 10/13/2020 |
3.3.2.1-pre | 382 | 9/29/2020 |
3.3.2-pre | 881 | 8/11/2020 |
3.3.1.1-pre | 407 | 8/11/2020 |
3.3.1-pre | 331 | 8/11/2020 |
3.3.0-pre | 387 | 7/1/2020 |
3.2.3-pre | 357 | 6/30/2020 |
3.2.2-pre | 354 | 6/23/2020 |
3.2.1-pre | 404 | 6/22/2020 |
3.2.0-pre | 477 | 6/16/2020 |
3.1.3-pre | 397 | 6/15/2020 |
3.1.2-pre | 414 | 6/9/2020 |
3.0.2 | 552 | 6/15/2020 |
3.0.2-pre | 436 | 6/5/2020 |
3.0.1 | 1,365 | 5/27/2020 |
3.0.1-pre | 742 | 3/30/2020 |
3.0.0-pre | 1,017 | 3/29/2020 |
2.0.0.3 | 606 | 2/20/2020 |
2.0.0.3-pre | 834 | 2/22/2020 |
2.0.0.2 | 596 | 2/19/2020 |
2.0.0.1 | 1,159 | 2/19/2020 |
2.0.0 | 824 | 2/13/2020 |
1.2.1-alpha.2 | 322 | 2/19/2020 |
1.2.1-alpha.1 | 331 | 1/27/2020 |
1.1.1 | 953 | 1/21/2020 |
1.1.1-alpha.1 | 331 | 2/19/2020 |
1.0.0.3 | 1,127 | 1/4/2020 |
1.0.0.2 | 658 | 1/4/2020 |
1.0.0.1 | 1,107 | 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 �GameSessionEventHandler.OnGameSessionReset` event fired when the gamesession is reset by the host.
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.