Klien .NET untuk server Nakama ditulis dalam C#.
Nakama adalah server sumber terbuka yang dirancang untuk mendukung game dan aplikasi modern. Fitur-fiturnya termasuk akun pengguna, obrolan, sosial, pencari jodoh, multipemain waktu nyata, dan banyak lagi.
Klien ini mengimplementasikan opsi API dan soket lengkap dengan server. Itu ditulis dalam C# dengan ketergantungan minimal untuk mendukung Unity, Xamarin, Godot, XNA, dan mesin serta kerangka kerja lainnya.
Dokumentasi lengkap tersedia online - https://heroiclabs.com/docs
Anda harus menyiapkan server dan database sebelum dapat terhubung dengan klien. Cara termudah adalah dengan menggunakan Docker tetapi lihat dokumentasi server untuk opsi lainnya.
Instal dan jalankan server. Ikuti petunjuk ini.
Unduh klien dari halaman rilis dan impor ke proyek Anda. Anda juga dapat membangun dari sumber.
Gunakan kredensial koneksi untuk membangun objek klien.
// 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 ) ;
Objek klien memiliki banyak metode untuk menjalankan berbagai fitur di server atau membuka koneksi soket realtime dengan server.
Ada berbagai cara untuk mengautentikasi dengan server. Otentikasi dapat membuat pengguna jika mereka belum ada dengan kredensial tersebut. Mengautentikasinya juga mudah dengan profil sosial dari Google Play Game, Facebook, Game Center, dll.
var email = "[email protected]" ;
var password = "batsignal" ;
var session = await client . AuthenticateEmailAsync ( email , password ) ;
System . Console . WriteLine ( session ) ;
Ketika diautentikasi, server merespons dengan token autentikasi (JWT) yang berisi properti berguna dan dideserialisasi menjadi objek 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 ) ;
Disarankan untuk menyimpan token autentikasi dari sesi dan memeriksa saat startup apakah sudah kedaluwarsa. Jika token telah kedaluwarsa, Anda harus mengautentikasi ulang. Waktu kedaluwarsa token dapat diubah sesuai pengaturan di server.
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!" ) ;
}
}
Klien menyertakan banyak API bawaan untuk berbagai fitur server game. Ini dapat diakses dengan metode async. Itu juga dapat memanggil logika khusus dalam fungsi RPC di server. Ini juga dapat dieksekusi dengan objek soket.
Semua permintaan dikirim dengan objek sesi yang memberi otorisasi kepada klien.
var account = await client . GetAccountAsync ( session ) ;
System . Console . WriteLine ( account . User . Id ) ;
System . Console . WriteLine ( account . User . Username ) ;
System . Console . WriteLine ( account . Wallet ) ;
Permintaan dapat diberikan dengan konfigurasi percobaan ulang jika terjadi kesalahan jaringan atau server sementara.
Konfigurasi tunggal dapat digunakan untuk mengontrol semua perilaku permintaan percobaan ulang:
var retryConfiguration = new RetryConfiguration ( baseDelayMs : 1000 , maxRetries : 5 , delegate { System . Console . Writeline ( "about to retry." ) ; } ) ;
client . GlobalRetryConfiguration = retryConfiguration ;
var account = await client . GetAccountAsync ( session ) ;
Atau, konfigurasi dapat diberikan berdasarkan permintaan:
var retryConfiguration = new RetryConfiguration ( baseDelayMs : 1000 , maxRetries : 5 , delegate { System . Console . Writeline ( "about to retry." ) ; } ) ;
var account = await client . GetAccountAsync ( session , retryConfiguration ) ;
Konfigurasi percobaan ulang per permintaan menggantikan konfigurasi percobaan ulang global.
Permintaan juga dapat diberikan dengan token pembatalan jika Anda perlu membatalkannya di tengah penerbangan:
var canceller = new CancellationTokenSource ( ) ;
var account = await client . GetAccountAsync ( session , retryConfiguration : null , canceller ) ;
await Task . Delay ( 25 ) ;
canceller . Cancel ( ) ; // will raise a TaskCanceledException
Klien dapat membuat satu atau lebih soket dengan server. Setiap soket dapat mendaftarkan pendengar acaranya sendiri untuk respons yang diterima dari server.
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 adalah server liveops untuk game yang mendukung analisis yang dapat ditindaklanjuti, pengujian A/B, dan konfigurasi jarak jauh. Gunakan Klien Satori .NET untuk berkomunikasi dengan Satori dari dalam game .NET Anda.
Dokumentasi lengkap tersedia online - https://heroiclabs.com/docs/satori/client-libraries/unity/index.html
Buat objek klien yang menerima API yang diberikan kepada Anda sebagai pelanggan Satori.
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 ) ;
Kemudian autentikasi dengan server untuk mendapatkan sesi Anda.
// 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 ) ;
}
Dengan menggunakan klien, Anda bisa mendapatkan eksperimen atau tanda fitur apa pun yang dimiliki pengguna.
var experiments = await client . GetExperimentsAsync ( session ) ;
var flag = await client . GetFlagAsync ( session , "FlagName" ) ;
Anda juga dapat mengirim kejadian sewenang-wenang ke server:
await client . EventAsync ( session , new Event ( "gameLaunched" , DateTime . UtcNow ) ) ;
Ini hanya sebagian dari API klien Satori, jadi silakan lihat tautan dokumentasi yang tercantum sebelumnya untuk API selengkapnya.
Peta jalan pengembangan dikelola saat masalah GitHub dan permintaan penarikan diterima. Jika Anda tertarik untuk memperbaiki kode ini, silakan buka masalah untuk mendiskusikan perubahan tersebut atau mampir dan diskusikan di forum komunitas.
Basis kode dapat dibangun dengan Dotnet CLI. Semua dependensi diunduh pada waktu pembuatan dengan Nuget.
dotnet build Nakama/Nakama.csproj
dotnet build Satori/Satori.csproj
Untuk versi rilis, lihat instruksi kami:
Untuk menjalankan tes, Anda perlu menjalankan server dan database. Kebanyakan tes ditulis sebagai tes integrasi yang dijalankan terhadap server. Pendekatan cepat yang kami gunakan dengan alur kerja pengujian kami adalah dengan menggunakan file penulisan Docker yang dijelaskan dalam dokumentasi.
docker-compose -f ./docker-compose-postgres.yml up
dotnet test Nakama.Tests/Nakama.Tests.csproj
Untuk menjalankan pengujian tertentu, berikan nama metode yang sepenuhnya memenuhi syarat ke dotnet test --filter
:
dotnet test --filter " Nakama.Tests.Api.GroupTest.ShouldPromoteAndDemoteUsers "
Jika Anda ingin melampirkan debugger Visual Studio ke pengujian, setel VSTEST_HOST_DEBUG
ke true
di lingkungan shell Anda dan jalankan dotnet test
. Lampirkan debugger ke proses yang diidentifikasi oleh konsol.
Agar dapat lulus pengujian Satori, konsol Satori harus diisi dengan data sampel yang tersedia melalui tombol di GUI-nya. Kemudian Anda dapat menguji SDK dengan dotnet test Satori.Tests/Satori.Tests.csproj
.
Dokumen API nakama-dotnet dibuat dengan Doxygen dan diterapkan ke halaman GitHub.
Saat mengubah komentar API, jalankan kembali Doxygen dan lakukan perubahan di docs/*
.
Untuk menjalankan Doksigen:
brew install doxygen
cd docs/
doxygen
Proyek ini dilisensikan di bawah Lisensi Apache-2.
Terima kasih kepada Alex Parker (@zanders3) untuk perpustakaan json yang luar biasa dan David Haig (@ninjasource) untuk Ninja.WebSockets.