Управление выделенным сервером Crysis

Материал из CryWiki Russia

Перейти к: навигация, поиск
О статье
СложностьСредняя
СовместимостьЛюбая


В этом руководстве мы узнаем, как управлять выделенным сервером (ВС) Crysis с использованием языка C#. Вы узнаете, как удаленно выполнять команды сервера используя HTTP-сервер встроенный в ВС. Как только вы научитесь управлять ВС, вы сможете написать свой собственный инструмент для бана, кика, чата и т. д.; все, что возможно в RCon, можно и здесь. Почитайте «API пакета программ для сервера Crysis» для получение полной справки по функциям сервера.

Содержание

Понадобится

Visual Studio (2005/2008)
Мы будем использовать компонент Visual Studio C#, который представляет собой интегрированную среду разработки (IDE), что позволит нам эффективно кодить. Бесплатную версия Visual Studio, названную Visual C# Express Edition можно скачать здесь.
Базовые знания программирования
Пакет программ для выделенного сервера Crysis для C#
Вы можете скачать его отсюда. Мы будем использовать его для управления сервером.
Правильно сконфигурированный установленный выделенный сервер
Узнать, как настроить выделенный сервер можно здесь.

Конфигурирование выделенного сервера

Во-первых, мы должны настроить ВС, так, чтобы он принимал входящие соединения. Откройте файл autoexec.cfg в папке вашего ВС и добавить следующие строки (пропустите этот шаг, если у вас уже есть):

http_password (HTTP-пароль)
http_startserver_port:(HTTP-порт)

Замените (HTTP-пароль) и (HTTP-порт) на желаемые значения. Запишите куда-нибудь HTTP-порт и 'HTTP-пароль, поскольку нам они ещё пригодятся.

Настройка Visual Studio

В окне Visual Studio, нажмите «File→Create Project…» (Файл→Создать проект…) и выберите проект «Console Application» (Консольное приложение). Дайте ему название и щелкните кнопку «OK».

Примечание:
Не волнуйтесь, если окна вашего Visual Studio не похожи; Visual Studio может значительно меняться от версии к версии.

Управление сервером — новый проект.png

Теперь вы должны увидеть вкладку-страницу названную Program.cs. В ней-то мы будем писать весь наш код.

Управление сервером — первый взгляд.png

Наконец, добавьте CDSToolkit.cs файл из пакета программ для выделенного сервера Crysis в ваш проект. Щелкните правой кнопкой мыши по проекту, выберите Add→Existing Item… (Добавить→Существующий элемент...) и добавьте файл.

Управление сервером — добавление файла.png

Создание CDSSession

В основной функции, введите следующие и замените (ip) — IP-адресом вашего сервера (если сервер на вашем компьютере, используйте 127.0.0.1), (порт)HTTP-портом ВС, и (пароль)HTTP-паролем ВС.

CrysisServer serverSession = new CrysisServer((ip), (порт), (пароль));

Это создаст новый объект — «CDSession». Весь инструментарий вращается вокруг этого объекта.

Примечание:
Только одно соединение к серверу Crysis возможно в одно время. Другие попытки соединения будут возвращать исключения.

Выполнение произвольных команд

Чтобы выполнить команду, мы будем вызывать метод «CDSession» — «ExecuteCommand». Добавьте следующий код и замените (команда) тем, что вы хотите выполнить на сервере.

serverSession.ExecuteCommand("(команда)");

Примечание:
ExecuteCommand возвратит всё, что возможно возвратить сервером. Всё совершенно без форматирования.

Тестирование

Чтобы проверить этот код, мы сделаем так, что сервер сменит карту на «Shore». Сначала, запустите ваш сервер. Затем, добавьте следующий текст в ваш код:

serverSession.ExecuteCommand("map shore");

Теперь щелкните иконку Run (Запустить — зелёная стрелка) на панели инструментов. Если команда будет успешно выполнена, то на сервере должна сменится карта.

Общие проблемы

Убедитесь, что ваш IP, порт и пароль правильные.

Примечание:
Добавьте больше материала, по мере необходимости.

Использование API

Инструментарий также содержит ряд функций для часто используемых команд. Вы можете посмотреть их на странице «Пакет программ для серверного API Crysis». Например, чтобы получить статус сервера, просто вызовите метод «Status()»:

string status = serverSession.Status();

Выполнение команд асинхронно

Вы можете также выполнять команды, используя асинхронную (async) модель. Эта модель ничего не блокирует, и позволит вам обновить пользовательский интерфейс во время обработки команды. Большинство функций в инструментарий имеют альтернативный асинхронный вариант. Например, функция status, которую мы использовали ранее, имеет асинхронную версию названную StatusAsync. Ниже представлен пример асинхронного вызова Status.

Result r = serverSession.KickAsync(player); //кикаем игроков с помощью асинхронности
while (r.Status == AsyncCallStatus.Running) //подождем, пока завершится кик
{
     Thread.Sleep(1);
     Application.DoEvents();                //обновляем пользовательский интерфейс
}
if (r.Status == AsyncCallStatus.Error)      //если есть ошибки, выдаем исключение
{
     throw r.Value as Exception;            //при ошибках, значение результата станет исключением
}
string status = r.Value as string;          //возвращаем значение результата в строку

См. также