RPC (Remote Procedure Call)

Для упрощения работы с RPC библиотека предоставляет свою обёртку механизма RPC игры. Обёртка состоит из двух компонентов: компонент вызова и обработчик.

Реализованная обёртка позволяет выполнять RPC, идентифицируемые сразу по 3 атрибутам: название модификации (пространство имён), название функции в модификации, типы аргументов функции. Таким образом, обёртка поддерживает перегрузку функций (т.е. создание двух функций с одинаковыми названиями, но разными аргументами).

Компонент вызова - это объект, который создаётся на вызывающей процедуру стороне, и используется для строго типизированного вызова процедуры. В библиотеке этот компонент представлен семейством классов MBSL_RPC. При использовании компонента на клиенте параметр recipient можно игнорировать. При использовании на сервере он указывает получателя RPC (NULL = все игроки).

//N - число аргументов (от 0 до 7)
class MBSL_RPCN<Class Arg1, ..., Class ArgN> : Managed
{
    //Конструктор. Требует передать название модификации (пространство имён)
    //А также название функции в этой модификации (пространстве имён).
    void MBSL_RPCN(string modname, string functionname);
    //Вызвать удалённую процедуру с указанными аргументами
    void Invoke(Arg1 arg1, ..., ArgN argN, PlayerIdentity recipient = NULL);
}

//Вариант без аргументов
class MBSL_RPC0 : Managed
{
    //Конструктор. Требует передать название модификации (пространство имён)
    //А также название функции в этой модификации (пространстве имён).
    void MBSL_RPC0(string modname, string functionname);
    //Вызвать удалённую процедуру с указанными аргументами
    void Invoke(PlayerIdentity recipient = NULL);
}

//Особый вариант. Позволяет передать любое число аргументов в виде массива
class MBSL_RPCRaw : Managed
{
    //Конструктор. Требует передать название модификации (пространство имён)
    //А также название функции в этой модификации (пространстве имён).
    void MBSL_RPCRaw (string modname, string functionname);
    //Вызвать удалённую процедуру с указанными аргументами
    void Invoke(array<ref Param> params, PlayerIdentity recipient = null)
}

Обработчик - это вызываемая строго типизированная функция на другой стороне, которая получает аргументы, а также информацию о вызвавшем функцию игроке (если обработчик на сервере). В библиотеке этот компонент представлен семейством классов MBSL_RPC_Handler.

Пример использования RPC:

Last updated