Salta ai contenuti

Moongate.Server.Core

Contratti server rivolti ai plugin, eventi, registri ed estensioni di dependency injection per Moongate. Il livello host generico (servizi di avvio, bus degli eventi, registro dei plugin, sezioni di configurazione e contratti di loop, timer, diagnostica e arresto) sta in Moongate.Hosting, a cui questo pacchetto fa riferimento.

Richiede .NET 10. Usa la versione del pacchetto disponibile nel feed NuGet configurato.

Terminal window
dotnet add package Moongate.Server.Core

  • Contratti, metadati e API di registrazione dei plugin, tramite Moongate.Hosting.
  • Eventi del ciclo di vita del server e bus degli eventi integrato con DryIoc, tramite Moongate.Hosting.
  • Registrazioni per servizi del server, gestori dei pacchetti e comandi.
  • Contratti e tipi di dati per connessioni di trasporto, sessioni, salvataggi del mondo e il resto del server di gioco.

Registra il bus degli eventi e iscriviti a un evento del ciclo di vita. Il bus e l’evento vengono da Moongate.Hosting, che questo pacchetto porta con sé. Questo esempio pubblica l’evento manualmente per mostrare il bus; non avvia un server Moongate.

using DryIoc;
using Moongate.Server.Core.Data.Events;
using Moongate.Server.Core.Extensions;
using Moongate.Server.Core.Interfaces.Events;
using var container = new Container();
container.RegisterMoongateEventBus();
var bus = container.Resolve<IMoongateEventBus>();
using var subscription = bus.Subscribe<MoongateStartedEvent>((_, cancellationToken) =>
{
Console.WriteLine("Started");
return Task.CompletedTask;
});
await bus.PublishAsync(new MoongateStartedEvent());

SubscribeAll registra un gestore invocato per ogni evento pubblicato, indipendentemente dal tipo — eseguito dopo gli iscritti tipizzati dell’evento, nell’ordine di iscrizione. Ogni iscrizione generale è indipendente e restituisce un proprio token rilasciabile, esattamente come Subscribe<TEvent>; rilasciarne una non influisce mai su un’altra.

Questo pacchetto dipende da Moongate.Core, Moongate.Hosting, Moongate.Network e Moongate.Network.Packets. DryIoc è disponibile tramite il grafo delle dipendenze.

L’host eseguibile e le implementazioni dei servizi runtime del server sono forniti da Moongate.Server, che non è distribuito come parte di questo pacchetto libreria. Referenziare questo pacchetto non avvia host, listener, timer o game loop.

IConnectionService tiene traccia delle connessioni di trasporto indipendentemente dalle sessioni di gioco. Il suo TryGet restituisce solo connessioni vive la cui ammissione è ancora aperta. DisconnectAsync chiude immediatamente l’ammissione e attende sia la richiesta di chiusura sia il completamento effettivo del trasporto. Le connessioni in chiusura restano in Count e negli snapshot di appartenenza fino alla fine della pulizia. L’arresto è terminale e riporta gli errori di pulizia. L’overload TryGet a tre argomenti cattura anche un segnale di disconnessione richiesto dal proprietario in modo atomico con la connessione; il mittente usa quel segnale stabile per classificare le scritture interrotte intenzionalmente. La chiusura remota o un errore di invio che chiude il proprio trasporto non lo completa.

INetworkService gestisce i listener e genera gli eventi sincroni ConnectionAccepted, DataReceived e ConnectionClosed. La memoria ricevuta è presa in prestito fino al ritorno del callback: decodificala o copiala prima di accodare lavoro altrove. Una notifica di chiusura precede la pulizia completa del trasporto; non attendere mai sincronicamente quella pulizia nel callback. NetworkListenerOptions fornisce endpoint e una factory facoltativa di pipeline per connessione.

IGameServerService coordina sessioni di gioco e dispatch dei pacchetti sopra quel confine. IPacketSendService invia tramite il registro delle connessioni senza richiedere una sessione di gioco. L’host eseguibile fornisce queste implementazioni e il relativo ordine di avvio.

Dalla versione 0.2.0, le sessioni contengono un INetworkConnection anziché un MoongateTcpClient; consumer e plugin compilati per 0.1.x devono essere ricompilati. Vedi Proprietà di trasporto e gioco per l’esempio di composizione, la sequenza di arresto e le note di aggiornamento.

Vedi Pacchetti e gestori, Game loop e timer e Salvataggi del mondo per esempi di registrazione, threading, completamento e arresto.

Distribuito con licenza AGPL-3.0-or-later. Vedi il repository sorgente e la licenza.

Creato con ❤️ da Tom

Offrimi un caffè