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.
Installazione
Section titled “Installazione”Richiede .NET 10. Usa la versione del pacchetto disponibile nel feed NuGet configurato.
dotnet add package Moongate.Server.CoreFunzionalità
Section titled “Funzionalità”- 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.
Esempio
Section titled “Esempio”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.
Dipendenze e ambito
Section titled “Dipendenze e ambito”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.
Connessioni e coordinamento del gioco
Section titled “Connessioni e coordinamento del gioco”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.
Compatibilità
Section titled “Compatibilità”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.
Guide runtime
Section titled “Guide runtime”Vedi Pacchetti e gestori, Game loop e timer e Salvataggi del mondo per esempi di registrazione, threading, completamento e arresto.
Licenza e sorgente
Section titled “Licenza e sorgente”Distribuito con licenza AGPL-3.0-or-later. Vedi il repository sorgente e la licenza.
Creato con ❤️ da Tom
