C# で書かれた NAKAMA サーバー用の .NET クライアント。
nakama は、最新のゲームやアプリを強化するために設計されたオープンソース サーバーです。ユーザー アカウント、チャット、ソーシャル、マッチメーカー、リアルタイム マルチプレイヤーなどの機能が含まれます。
このクライアントは、サーバーの完全な API とソケット オプションを実装します。 Unity、Xamarin、Godot、XNA、その他のエンジンやフレームワークをサポートするために、依存関係を最小限に抑えた C# で書かれています。
完全なドキュメントはオンラインです - https://heroiclabs.com/docs
クライアントに接続する前に、サーバーとデータベースをセットアップする必要があります。最も簡単な方法は Docker を使用することですが、他のオプションについてはサーバーのドキュメントを参照してください。
サーバーをインストールして実行します。以下の指示に従ってください。
リリース ページからクライアントをダウンロードし、プロジェクトにインポートします。ソースからビルドすることもできます。
接続資格情報を使用してクライアント オブジェクトを構築します。
// using Nakama;
const string scheme = "http" ;
const string host = "127.0.0.1" ;
const int port = 7350 ;
const string serverKey = "defaultkey" ;
var client = new Client ( scheme , host , port , serverKey ) ;
クライアント オブジェクトには、サーバーでさまざまな機能を実行したり、サーバーとのリアルタイム ソケット接続を開くためのメソッドが多数あります。
サーバーで認証するにはさまざまな方法があります。これらの資格情報を持つユーザーがまだ存在していない場合、認証によってユーザーを作成できます。 Google Play ゲーム、Facebook、Game Center などのソーシャル プロファイルを使用して認証することも簡単です。
var email = "[email protected]" ;
var password = "batsignal" ;
var session = await client . AuthenticateEmailAsync ( email , password ) ;
System . Console . WriteLine ( session ) ;
認証されると、サーバーは有用なプロパティを含む認証トークン (JWT) で応答し、 Session
オブジェクトに逆シリアル化されます。
System . Console . WriteLine ( session . AuthToken ) ; // raw JWT token
System . Console . WriteLine ( session . RefreshToken ) ; // raw JWT token.
System . Console . WriteLine ( session . UserId ) ;
System . Console . WriteLine ( session . Username ) ;
System . Console . WriteLine ( "Session has expired: {0}" , session . IsExpired ) ;
System . Console . WriteLine ( "Session expires at: {0}" , session . ExpireTime ) ;
セッションから認証トークンを保存し、起動時に有効期限が切れているかどうかを確認することをお勧めします。トークンの有効期限が切れた場合は、再認証する必要があります。トークンの有効期限はサーバーの設定として変更できます。
var authToken = "restored from somewhere" ;
var refreshToken = "restored from somewhere" ;
var session = Session . Restore ( authToken , refreshToken ) ;
// Check whether a session is close to expiry.
if ( session . HasExpired ( DateTime . UtcNow . AddDays ( 1 ) ) )
{
try
{
session = await client . SessionRefreshAsync ( session ) ;
}
catch ( ApiResponseException e )
{
System . Console . WriteLine ( "Session can no longer be refreshed. Must reauthenticate!" ) ;
}
}
クライアントには、ゲーム サーバーのさまざまな機能用の組み込み API が多数含まれています。これらには、非同期メソッドを使用してアクセスできます。サーバー上の RPC 関数でカスタム ロジックを呼び出すこともできます。これらはソケット オブジェクトを使用して実行することもできます。
すべてのリクエストは、クライアントを許可するセッション オブジェクトとともに送信されます。
var account = await client . GetAccountAsync ( session ) ;
System . Console . WriteLine ( account . User . Id ) ;
System . Console . WriteLine ( account . User . Username ) ;
System . Console . WriteLine ( account . Wallet ) ;
一時的なネットワークまたはサーバーのエラーが発生した場合には、リクエストに再試行構成を指定できます。
単一の構成を使用して、すべてのリクエストの再試行動作を制御できます。
var retryConfiguration = new RetryConfiguration ( baseDelayMs : 1000 , maxRetries : 5 , delegate { System . Console . Writeline ( "about to retry." ) ; } ) ;
client . GlobalRetryConfiguration = retryConfiguration ;
var account = await client . GetAccountAsync ( session ) ;
または、構成はリクエストごとに提供できます。
var retryConfiguration = new RetryConfiguration ( baseDelayMs : 1000 , maxRetries : 5 , delegate { System . Console . Writeline ( "about to retry." ) ; } ) ;
var account = await client . GetAccountAsync ( session , retryConfiguration ) ;
リクエストごとの再試行構成は、グローバル再試行構成をオーバーライドします。
リクエストを途中でキャンセルする必要がある場合は、リクエストにキャンセル トークンを指定することもできます。
var canceller = new CancellationTokenSource ( ) ;
var account = await client . GetAccountAsync ( session , retryConfiguration : null , canceller ) ;
await Task . Delay ( 25 ) ;
canceller . Cancel ( ) ; // will raise a TaskCanceledException
クライアントはサーバーに対して 1 つ以上のソケットを作成できます。各ソケットには、サーバーから受信した応答用に登録された独自のイベント リスナーを持つことができます。
var socket = Socket . From ( client ) ;
socket . Connected += ( ) =>
{
System . Console . WriteLine ( "Socket connected." ) ;
} ;
socket . Closed += ( ) =>
{
System . Console . WriteLine ( "Socket closed." ) ;
} ;
socket . ReceivedError += e => System . Console . WriteLine ( e ) ;
await socket . ConnectAsync ( session ) ;
Satori は、実用的な分析、A/B テスト、リモート構成を強化するゲーム用の Liveops サーバーです。 .NET ゲーム内からSatori と通信するには、Satori .NET クライアントを使用します。
完全なドキュメントはオンラインです - https://heroiclabs.com/docs/satori/client-libraries/unity/index.html
Satori 顧客として提供された API を受け入れるクライアント オブジェクトを作成します。
using Satori ;
const string scheme = "https" ;
const string host = "127.0.0.1" ; // add your host here
const int port = 443 ;
const string apiKey = "apiKey" ; // add the api key that was given to you as a Satori customer.
var client = new Client ( scheme , host , port , apiKey ) ;
次に、サーバーで認証してセッションを取得します。
// Authenticate with the Satori server.
try
{
session = await client . AuthenticateAsync ( id ) ;
Debug . Log ( "Authenticated successfully." ) ;
}
catch ( ApiResponseException ex )
{
Debug . LogFormat ( "Error authenticating: {0}" , ex . Message ) ;
}
クライアントを使用すると、ユーザーが属する実験や機能フラグを取得できます。
var experiments = await client . GetExperimentsAsync ( session ) ;
var flag = await client . GetFlagAsync ( session , "FlagName" ) ;
任意のイベントをサーバーに送信することもできます。
await client . EventAsync ( session , new Event ( "gameLaunched" , DateTime . UtcNow ) ) ;
これはSatoriクライアントAPIのサブセットにすぎないため、完全なAPIについては前にリストしたドキュメントのリンクを参照してください。
開発ロードマップは GitHub Issue として管理されており、プル リクエストを歓迎します。コードの改善に興味がある場合は、問題を開いて変更について議論するか、コミュニティ フォーラムに参加して議論してください。
コードベースは Dotnet CLI を使用して構築できます。すべての依存関係は、Nuget のビルド時にダウンロードされます。
dotnet build Nakama/Nakama.csproj
dotnet build Satori/Satori.csproj
リリース ビルドについては、次の手順を参照してください。
テストを実行するには、サーバーとデータベースを実行する必要があります。ほとんどのテストは、サーバーに対して実行される統合テストとして作成されます。テスト ワークフローで使用する簡単なアプローチは、ドキュメントで説明されている Docker compose ファイルを使用することです。
docker-compose -f ./docker-compose-postgres.yml up
dotnet test Nakama.Tests/Nakama.Tests.csproj
特定のテストを実行するには、メソッドの完全修飾名をdotnet test --filter
に渡します。
dotnet test --filter " Nakama.Tests.Api.GroupTest.ShouldPromoteAndDemoteUsers "
Visual Studio デバッガーをテストに接続する場合は、シェル環境でVSTEST_HOST_DEBUG
true
に設定し、 dotnet test
を実行します。コンソールで識別されたプロセスにデバッガーを接続します。
Satori のテストに合格するには、Satori コンソールに GUI のボタンから利用できるサンプル データを入力する必要があります。その後、 dotnet test Satori.Tests/Satori.Tests.csproj
を使用して SDK をテストできます。
nakama-dotnet API ドキュメントは Doxygen で生成され、GitHub ページにデプロイされます。
API コメントを変更する場合は、Doxygen を再実行し、 docs/*
の変更をコミットします。
Doxygen を実行するには:
brew install doxygen
cd docs/
doxygen
このプロジェクトは、Apache-2 ライセンスに基づいてライセンスされています。
優れた JSON ライブラリについては Alex Parker (@zanders3)、Ninja.WebSockets については David Haig (@ninjasource) に感謝します。