Как вы знаете мод ведет логи в отдельную базу данных serverlogs ради этого в коде создан отдельный поток с циклом while(true)
Мод автоматически выстраивает очередь из запросов в базу данных (сделано это для того, чтобы при большом потоке запросов они не терялись и выполнялись по очереди).
Код внутри конструкции Worker() дожидается пока в очереди запросов будет хотя бы 1 и выполняет его, в холостой нагрузке (без игроков и очереди) мод просто бесконечно выполняет while(true). Зачем?
Стандартная нагрузка любого мода на основе RedAge (NeptuneEvo):
Нагрузка мода после моих изменений:
Для того чтобы сделать также, находим у себя файл - dotnet\resources\client\Core\GameLog.cs
в начало файла ко всем переменным добавляем:
Что получилось:
Затем в конце файла заменяем конструкции кода Worker() и Stop():
В самое начало файла не забудьте добавить юзинг недостающие функции (чтобы не было ошибок из-за Any() ):
Теперь данный код будет разгребать очередь раз в 500 мс, а не как раньше.
На этом мануал закончен, если вы знаете как можно исправить это лучше - жду ваших предложений
Лайк обязателен.
Мод автоматически выстраивает очередь из запросов в базу данных (сделано это для того, чтобы при большом потоке запросов они не терялись и выполнялись по очереди).
Код внутри конструкции Worker() дожидается пока в очереди запросов будет хотя бы 1 и выполняет его, в холостой нагрузке (без игроков и очереди) мод просто бесконечно выполняет while(true). Зачем?
Стандартная нагрузка любого мода на основе RedAge (NeptuneEvo):
Нагрузка мода после моих изменений:
Для того чтобы сделать также, находим у себя файл - dotnet\resources\client\Core\GameLog.cs
в начало файла ко всем переменным добавляем:
C#:
private static string timer = null;
Что получилось:
C#:
private static Thread thread;
private static nLog Log = new nLog("GameLog");
private static Queue<string> queue = new Queue<string>();
private static Dictionary<int, DateTime> OnlineQueue = new Dictionary<int, DateTime>();
private static Config config = new Config("MySQL");
private static string DB = config.TryGet<string>("DataBase", "") + "logs";
private static string insert = "insert into " + DB + ".{0}({1}) values ({2})";
private static string timer = null; // Эту строчку я добавил
Затем в конце файла заменяем конструкции кода Worker() и Stop():
C#:
private static void Worker()
{
string CMD = "";
try
{
Log.Debug("Worker started");
timer = Timers.StartTask(500, () => TimerExec());
}
catch (Exception e)
{
Log.Write($"{e.ToString()}\n{CMD}", nLog.Type.Error);
}
}
private static void TimerExec()
{
var list = queue.ToList();
if (list.Any())
{
MySQL.Query(queue.Dequeue());
}
}
public static void Stop()
{
Timers.Stop(timer);
thread.Join();
}
В самое начало файла не забудьте добавить юзинг недостающие функции (чтобы не было ошибок из-за Any() ):
C#:
using System.Linq;
Теперь данный код будет разгребать очередь раз в 500 мс, а не как раньше.
На этом мануал закончен, если вы знаете как можно исправить это лучше - жду ваших предложений
Лайк обязателен.
Последнее редактирование: