Paquets NuGet et base de données dans un plugin CounterStrikeSharp
Beaucoup de plugins utiles enregistrent des données : bannissements, statistiques, rangs. Pour cela, vous ajoutez un paquet NuGet au projet, et la règle la plus importante est de ne jamais bloquer le jeu pendant que vous attendez la base de données. Ce guide traite des deux, avec Dapper et MySqlConnector comme exemple.
Ajoutez les paquets
Les paquets NuGet se déclarent dans le fichier de projet. Dapper raccourcit les requêtes et MySqlConnector dialogue avec MariaDB et MySQL. Notre compilateur les télécharge pour vous pendant la construction.
<ItemGroup>
<PackageReference Include="CounterStrikeSharp.API" Version="1.0.*" />
<PackageReference Include="Dapper" Version="2.*" />
<PackageReference Include="MySqlConnector" Version="2.*" />
</ItemGroup>
Ce qui se passe à la compilation
La construction produit la DLL de votre plugin et, à côté, les DLL des paquets dont il a besoin. Les fichiers que CounterStrikeSharp contient déjà sont rangés à part dans un autre dossier, pour que vous ne les copiiez pas deux fois.
Ce qu’il faut copier sur le serveur
Copiez le dossier du plugin, avec les DLL des paquets à l’intérieur, dans le dossier plugins de votre serveur. Ne copiez pas le dossier dependencies : le serveur possède déjà ces fichiers et une seconde copie peut provoquer des conflits.
Exécuter une requête sans geler le jeu
Le jeu tourne sur un seul thread principal. Si vous y attendez une base de données, tout le serveur saccade. Exécutez la requête dans Task.Run et, quand vous devez retoucher au jeu, revenez sur le thread principal avec Server.NextFrame.
using CounterStrikeSharp.API;
using Dapper;
using Microsoft.Extensions.Logging;
using MySqlConnector;
public void CountPlayers()
{
Task.Run(async () =>
{
await using var connection = new MySqlConnection(Config.ConnectionString); var count = await connection.ExecuteScalarAsync<int>("SELECT COUNT(*) FROM players");
Server.NextFrame(() => {
Logger.LogInformation("Players in the database: {Count}", count);
});
});
}
Gardez la chaîne de connexion dans la configuration
N’écrivez pas l’adresse, l’utilisateur et le mot de passe dans le code. Placez la chaîne de connexion dans la configuration du plugin, comme dans notre guide de configuration, pour que chaque propriétaire de serveur utilise sa propre base.
Des paquets qui n’ont rien à faire dans un plugin
Certains paquets sont trop gros ou ne sont pas faits pour vivre dans un serveur de jeu, par exemple les frameworks web comme ASP.NET. Préférez de petites bibliothèques et, si un paquet ne se charge pas, vérifiez s’il a besoin de fichiers natifs absents.
Testez avant la mise en production
Essayez d’abord le plugin sur un serveur de test avec une base de test. Vérifiez que les tables se créent, qu’une connexion échouée ne fait pas planter le plugin et que le journal donne un message clair quand la base est indisponible.
Ce tutoriel vous a-t-il été utile ?
Barlap pour la communauté.