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