C# SDK
The C# SDK provides native integration for .NET game servers and Unity projects.
Installation
NuGet Package
dotnet add package Agones
Unity Package
For Unity projects, use the Unity SDK instead (see Unity SDK).
Quick Start
using Agones;
using System;
using System.Threading;
using System.Threading.Tasks;
class GameServer
{
static async Task Main(string[] args)
{
// Initialize SDK
var sdk = new AgonesSDK();
try
{
// Connect to sidecar
await sdk.ConnectAsync();
// Mark as ready
await sdk.ReadyAsync();
Console.WriteLine("Server marked as Ready");
// Start health checking
var cts = new CancellationTokenSource();
var healthTask = Task.Run(async () =>
{
while (!cts.Token.IsCancellationRequested)
{
await sdk.HealthAsync();
await Task.Delay(TimeSpan.FromSeconds(2));
}
});
// Get GameServer info
var gameServer = await sdk.GameServerAsync();
Console.WriteLine($"GameServer name: {gameServer.ObjectMeta.Name}");
// Run your game server logic
// ...
// Shutdown
cts.Cancel();
await healthTask;
await sdk.ShutDownAsync();
}
catch (Exception ex)
{
Console.WriteLine($"Error: {ex.Message}");
}
}
}
SDK Reference
Connection
Task<bool> ConnectAsync();
Lifecycle Methods
Task<Status> ReadyAsync();
Task<Status> ShutDownAsync();
Task<Status> AllocateAsync();
Task<Status> ReserveAsync(long seconds);
Health Checking
Task<Status> HealthAsync();
Task<Status> SetLabelAsync(string key, string value);
Task<Status> SetAnnotationAsync(string key, string value);
State Monitoring
Task<GameServer> GameServerAsync();
Task WatchGameServerAsync(Action<GameServer> callback);
Alpha Features
Player Tracking
Task<Status> PlayerConnectAsync(string playerID);
Task<Status> PlayerDisconnectAsync(string playerID);
Task<bool> IsPlayerConnectedAsync(string playerID);
Task<List<string>> GetConnectedPlayersAsync();
Task<long> GetPlayerCountAsync();
Task<long> GetPlayerCapacityAsync();
Task<Status> SetPlayerCapacityAsync(long capacity);
Beta Features
Counters
Task<Counter> GetCounterAsync(string key);
Task<Status> UpdateCounterAsync(string key, Counter counter);
Lists
Task<List> GetListAsync(string key);
Task<Status> UpdateListAsync(string key, List list);
Task<Status> AddListValueAsync(string key, string value);
Task<Status> RemoveListValueAsync(string key, string value);
Async/Await Pattern
All SDK methods are async and return Task or Task<T>:
try
{
await sdk.ReadyAsync();
Console.WriteLine("Ready!");
}
catch (Exception ex)
{
Console.WriteLine($"Error: {ex.Message}");
}
Best Practices
Don’t block on async calls with .Result or .Wait(). Always use await.
Use CancellationToken for graceful shutdown of health checking loops.
Ensure the SDK connection is properly closed when shutting down.
Wrap SDK calls in try-catch blocks to handle connection errors.
Next Steps
Unity SDK
Unity-specific integration guide
SDK Overview
Compare all available SDKs