Salta ai contenuti

Moongate.Core

Primitive condivise, geometria, collezioni, helper di configurazione e utilità per le applicazioni Moongate.

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

Terminal window
dotnet add package Moongate.Core

  • Identità delle entità con Serial e il contratto IMoongateEntity.
  • Punti bidimensionali e tridimensionali, rettangoli e interfacce geometriche.
  • Collezioni, buffer e helper di uso generale.
  • Helper di configurazione TOML con nomi snake_case, informazioni sulla versione e utilità per gli indirizzi di rete.

Crea una posizione e un identificatore persistente di entità:

using Moongate.Core.Geometry;
using Moongate.Core.Primitives;
var position = new Point3D(100, 200, 5);
var id = new Serial(1);
Console.WriteLine($"{id}: {position.X}, {position.Y}, {position.Z}");

Ricette per configurazione, versione e indirizzi

Section titled “Ricette per configurazione, versione e indirizzi”

Inserisci questo modello in ShardOptions.cs:

public sealed class ShardOptions
{
public string ShardName { get; set; } = "Moongate";
public int GamePort { get; set; } = 2593;
}

Esegui questo Program.cs per scrivere e rileggere un file TOML e ispezionare l’assembly chiamante:

using System.Net;
using System.Net.Sockets;
using System.Reflection;
using Moongate.Core.Utils;
var path = Path.Combine(Path.GetTempPath(), $"moongate-options-{Guid.NewGuid():N}.toml");
try
{
await TomlUtils.SerializeToFileAsync(new ShardOptions(), path);
var restored = await TomlUtils.DeserializeFromFileAsync<ShardOptions>(path)
?? throw new InvalidOperationException("Configuration was empty");
Console.WriteLine(await File.ReadAllTextAsync(path)); // shard_name, game_port
if (restored.ShardName != "Moongate" || restored.GamePort != 2593)
{
throw new InvalidOperationException("TOML round trip failed");
}
}
finally
{
File.Delete(path);
}
var assembly = Assembly.GetExecutingAssembly();
Console.WriteLine($"Application version: {VersionUtils.GetVersion(assembly)}");
Console.WriteLine($"Application codename: {VersionUtils.GetCodename(assembly)}");
var addresses = NetworkUtils.GetLocalIpAddresses()
.Where(address => address.AddressFamily == AddressFamily.InterNetwork &&
!IPAddress.IsLoopback(address))
.Distinct();
foreach (var address in addresses)
{
Console.WriteLine(address);
}

TomlUtils.Serialize/Deserialize<T> lavorano con stringhe; le varianti per file e file asincroni creano le directory superiori durante la scrittura. Le opzioni predefinite usano nomi snake_case più gli eventuali convertitori aggiunti con il metodo thread-safe TomlUtils.AddTomlConverter. Opzioni TomlSerializerOptions esplicite sostituiscono questi valori predefiniti per quella chiamata. Le scritture sovrascrivono la destinazione e non sono atomiche; gli errori di parsing, serializzazione e I/O si propagano al chiamante. Il comportamento del server che crea i valori predefiniti se mancanti appartiene al suo ConfigHelper, non a ogni scrittura TomlUtils.

VersionUtils.GetVersion() senza un assembly legge la versione di Moongate.Core. Passa l’assembly della tua applicazione per leggerne la versione, rimuovendo i metadati di compilazione successivi a +. Il nome in codice legge il valore AssemblyMetadata("Codename", "...") e restituisce una stringa vuota quando assente. Il server incorpora la propria proprietà MSBuild Codename in questi metadati tramite la configurazione del progetto; dichiarare semplicemente una proprietà MSBuild arbitraria in un altro progetto non la incorpora automaticamente.

VersionUtils.GetBuildTime e GetBuildConfiguration leggono le voci AssemblyMetadata BuildTime (ISO 8601, UTC) e BuildConfiguration (Debug o Release) che un’applicazione scrive alla compilazione; restituiscono null e una stringa vuota quando l’assembly non le contiene. VersionUtils.FormatHeader sostituisce {Version}, {Codename}, {Configuration} e {BuildTime} nel testo di un’intestazione, scrivendo unknown per ciò che l’assembly non contiene.

NetworkUtils.GetLocalIpAddresses() elenca gli indirizzi unicast locali senza filtrare loopback, interfacce inattive, duplicati o famiglia di indirizzi. Applica i filtri adatti alla tua applicazione, come sopra. Sono indirizzi di interfacce locali, non il tuo indirizzo NAT pubblico. GetListeningAddresses(endpoint) formatta gli indirizzi locali della famiglia dell’endpoint con la sua porta; non ispeziona la tabella dei socket del sistema operativo per individuare i listener effettivi.

Questo pacchetto non dipende da altri pacchetti Moongate. Le sue dipendenze esterne comprendono DryIoc, Humanizer, Serilog, ShaiRandom, Tomlyn e ZLinq; NuGet le risolve automaticamente.

Fornisce elementi costitutivi condivisi. L’archiviazione asincrona delle entità in PostgreSQL è fornita da Moongate.Persistence; il trasporto TCP è fornito da Moongate.Network.

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

Creato con ❤️ da Tom

Offrimi un caffè