NuGet пакети и база данни в плъгин за CounterStrikeSharp
Много полезни плъгини съхраняват данни: банове, статистики, рангове. За целта добавяте NuGet пакет към проекта, а най-важното правило е да не блокирате играта, докато чакате базата данни. Ръководството разглежда и двете с примера на Dapper и MySqlConnector.
Добавете пакетите
NuGet пакетите се изброяват в проектния файл. Dapper скъсява заявките, а MySqlConnector общува с MariaDB и MySQL. Нашият компилатор ги изтегля вместо вас при компилацията.
<ItemGroup>
<PackageReference Include="CounterStrikeSharp.API" Version="1.0.*" />
<PackageReference Include="Dapper" Version="2.*" />
<PackageReference Include="MySqlConnector" Version="2.*" />
</ItemGroup>
Какво се случва при компилация
Компилацията създава DLL файла на плъгина и до него DLL файловете на пакетите, от които се нуждае. Файловете, които CounterStrikeSharp вече съдържа, са отделени в друга папка, за да не ги копирате два пъти.
Какво да копирате на сървъра
Копирайте папката на плъгина с DLL файловете на пакетите вътре в папката plugins на сървъра. Не копирайте папката dependencies, защото сървърът вече има тези файлове, а второ копие може да причини конфликти.
Изпълнявайте заявка, без да замразявате играта
Играта работи в една основна нишка. Ако там чакате база данни, целият сървър започва да лагва. Изпълнете заявката в Task.Run, а когато трябва отново да пипнете играта, върнете се в основната нишка със 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);
});
});
}
Пазете низа за връзка в конфигурацията
Не пишете адреса, потребителя и паролата в кода. Сложете низа за връзка в конфигурацията на плъгина, както в нашето ръководство за конфигурация, за да ползва всеки собственик на сървър своя база.
Пакети, които не са за плъгин
Някои пакети са твърде големи или не са направени да живеят в игрови сървър, например уеб framework-ове като ASP.NET. Предпочитайте малки библиотеки, а ако пакет не се зарежда, проверете дали не му трябват липсващи нативни файлове.
Тествайте преди пускане в реална работа
Първо изпробвайте плъгина на тестов сървър с тестова база. Проверете дали таблиците се създават, дали неуспешна връзка не срива плъгина и дали логът дава ясно съобщение, когато базата е недостъпна.
Беше ли полезно това ръководство?
Barlap за общността.