MySQL: Online
Load: Medium
Sandbox: Running

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.

1

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>
2

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.

3

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.

YourPlugin-Release.zip
YourPlugin
YourPlugin.dll
Dapper.dll
MySqlConnector.dll
dependencies
Files already provided by CounterStrikeSharp
4

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);
        });
    });
}
5

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.

6

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.

N’utilisez pas un compte de base de données ayant plus de droits que nécessaire. Créez un utilisateur qui ne peut toucher que ses propres tables.
7

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 ?

Page générée en 0.010 secondes
CounterStrikeSharp Web Compiler V1.0 - Fait avec par RomaniaBarlap pour la communauté.