Cliente .NET para el servidor Nakama escrito en C#.
Nakama es un servidor de código abierto diseñado para impulsar juegos y aplicaciones modernos. Las características incluyen cuentas de usuario, chat, redes sociales, emparejamiento, multijugador en tiempo real y mucho más.
Este cliente implementa la API completa y las opciones de socket con el servidor. Está escrito en C# con dependencias mínimas para admitir Unity, Xamarin, Godot, XNA y otros motores y marcos.
La documentación completa está en línea: https://heroiclabs.com/docs
Deberá configurar el servidor y la base de datos antes de poder conectarse con el cliente. La forma más sencilla es utilizar Docker, pero consulte la documentación del servidor para conocer otras opciones.
Instalar y ejecutar los servidores. Siga estas instrucciones.
Descargue el cliente desde la página de lanzamientos e impórtelo a su proyecto. También puedes construir desde la fuente.
Utilice las credenciales de conexión para crear un objeto de cliente.
// 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 ) ;
El objeto cliente tiene muchos métodos para ejecutar varias funciones en el servidor o abrir conexiones de socket en tiempo real con el servidor.
Hay una variedad de formas de autenticarse con el servidor. La autenticación puede crear un usuario si aún no existe con esas credenciales. También es fácil autenticarse con un perfil social de Google Play Games, Facebook, Game Center, etc.
var email = "[email protected]" ;
var password = "batsignal" ;
var session = await client . AuthenticateEmailAsync ( email , password ) ;
System . Console . WriteLine ( session ) ;
Cuando se autentica, el servidor responde con un token de autenticación (JWT) que contiene propiedades útiles y se deserializa en un objeto 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 ) ;
Se recomienda almacenar el token de autenticación de la sesión y comprobar al inicio si ha caducado. Si el token ha caducado, deberá volver a autenticarse. El tiempo de vencimiento del token se puede cambiar como configuración en el servidor.
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!" ) ;
}
}
El cliente incluye muchas API integradas para diversas funciones del servidor del juego. Se puede acceder a ellos con los métodos asíncronos. También puede llamar a lógica personalizada en funciones RPC en el servidor. Estos también se pueden ejecutar con un objeto socket.
Todas las solicitudes se envían con un objeto de sesión que autoriza al cliente.
var account = await client . GetAccountAsync ( session ) ;
System . Console . WriteLine ( account . User . Id ) ;
System . Console . WriteLine ( account . User . Username ) ;
System . Console . WriteLine ( account . Wallet ) ;
Las solicitudes se pueden proporcionar con configuraciones de reintento en casos de errores transitorios de red o del servidor.
Se puede utilizar una única configuración para controlar todo el comportamiento de reintento de solicitudes:
var retryConfiguration = new RetryConfiguration ( baseDelayMs : 1000 , maxRetries : 5 , delegate { System . Console . Writeline ( "about to retry." ) ; } ) ;
client . GlobalRetryConfiguration = retryConfiguration ;
var account = await client . GetAccountAsync ( session ) ;
O bien, la configuración se puede proporcionar por solicitud:
var retryConfiguration = new RetryConfiguration ( baseDelayMs : 1000 , maxRetries : 5 , delegate { System . Console . Writeline ( "about to retry." ) ; } ) ;
var account = await client . GetAccountAsync ( session , retryConfiguration ) ;
Las configuraciones de reintento por solicitud anulan la configuración de reintento global.
Las solicitudes también pueden recibir un token de cancelación si necesita cancelarlas en pleno vuelo:
var canceller = new CancellationTokenSource ( ) ;
var account = await client . GetAccountAsync ( session , retryConfiguration : null , canceller ) ;
await Task . Delay ( 25 ) ;
canceller . Cancel ( ) ; // will raise a TaskCanceledException
El cliente puede crear uno o más sockets con el servidor. Cada socket puede tener sus propios detectores de eventos registrados para las respuestas recibidas del servidor.
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 es un servidor de operaciones en vivo para juegos que impulsa análisis procesables, pruebas A/B y configuración remota. Utilice el cliente Satori .NET para comunicarse con Satori desde su juego .NET.
La documentación completa está en línea: https://heroiclabs.com/docs/satori/client-libraries/unity/index.html
Cree un objeto de cliente que acepte la API que le proporcionaron como cliente de 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 ) ;
Luego autentícate con el servidor para obtener tu sesión.
// 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 ) ;
}
Al utilizar el cliente, puede obtener cualquier experimento o indicador de función al que pertenezca el usuario.
var experiments = await client . GetExperimentsAsync ( session ) ;
var flag = await client . GetFlagAsync ( session , "FlagName" ) ;
También puedes enviar eventos arbitrarios al servidor:
await client . EventAsync ( session , new Event ( "gameLaunched" , DateTime . UtcNow ) ) ;
Este es solo un subconjunto de la API del cliente Satori, así que consulte el enlace de documentación mencionado anteriormente para obtener la API completa.
La hoja de ruta de desarrollo se gestiona ya que los problemas de GitHub y las solicitudes de extracción son bienvenidos. Si está interesado en mejorar el código, abra un problema para discutir los cambios o visite el foro de la comunidad y discútalo.
El código base se puede construir con Dotnet CLI. Todas las dependencias se descargan en el momento de la compilación con Nuget.
dotnet build Nakama/Nakama.csproj
dotnet build Satori/Satori.csproj
Para versiones de lanzamiento, consulte nuestras instrucciones:
Para ejecutar pruebas necesitará ejecutar el servidor y la base de datos. La mayoría de las pruebas están escritas como pruebas de integración que se ejecutan en el servidor. Un enfoque rápido que utilizamos con nuestro flujo de trabajo de prueba es utilizar el archivo de redacción de Docker que se describe en la documentación.
docker-compose -f ./docker-compose-postgres.yml up
dotnet test Nakama.Tests/Nakama.Tests.csproj
Para ejecutar una prueba específica, pase el nombre completo del método a dotnet test --filter
:
dotnet test --filter " Nakama.Tests.Api.GroupTest.ShouldPromoteAndDemoteUsers "
Si desea adjuntar un depurador de Visual Studio a una prueba, configure VSTEST_HOST_DEBUG
en true
en su entorno de shell y ejecute dotnet test
. Adjunte el depurador al proceso identificado por la consola.
Para pasar las pruebas de Satori, la consola Satori debe estar llena de datos de muestra disponibles a través de un botón en su GUI. Luego puede probar el SDK con dotnet test Satori.Tests/Satori.Tests.csproj
.
Los documentos API de nakama-dotnet se generan con Doxygen y se implementan en páginas de GitHub.
Al cambiar los comentarios de la API, vuelva a ejecutar Doxygen y confirme los cambios en docs/*
.
Para ejecutar Doxygen:
brew install doxygen
cd docs/
doxygen
Este proyecto está bajo la licencia Apache-2.
Gracias a Alex Parker (@zanders3) por la excelente biblioteca json y a David Haig (@ninjasource) por Ninja.WebSockets.