Здравствуйте, пишу первый раз на этом форуме, так что не бейте)
P.S. Эта статья предназначена для скриптеров, которые пишут или хотят начать писать на JS (клиент и сервер).
Для начала, RPC (Remote Procedure Calls) упрощает двустороннюю связь между сервером, клиентом и cef. Фактически эта библиотека строится на стандартом RAGE API отправки пакетов с сервера на клиент и обратно, но с значительными преимуществами в виде удобства и оптимизации вашего кода.
Приведу небольшой практический пример: Допустиму нас есть CEF - меню фракции, в нём есть какая-то кнопка, действие которой нужно обработать на сервере.
Как эту задачу мы бы реализовали с помощью RAGE API:
CEF:
Клиент:
Сервер:
Как эту задачу мы бы реализовали с помощью rage-rpc:
CEF:
Сервер:
Rage-rpc работает и в обратную сторону, с сервера в cef.
Мы пропустили посредника, а именно клиент. Может показаться, что не сильно сложно написать пару строк на клиенте, но вы только представьте, что происходит если вам надо создать кучу обработчиков действий из cef.
Проблему захламлённости кода клиента ненужными ивентами (посредниками) между CEF - Сервером и решает rage-rpc. Но это только начало. Функционал rage-rpc достаточно обилен.
Представим ситуацию: Мы хотим узнать на сервере поднимается ли по лестнице игрок в данный момент. Говорить о реализации через RAGE API, тут даже не стоит.
Реализация, через rage-rpc:
Сервер:
Клиент:
Абсолютно ничего лишнего, всё просто и удобно.
Если вас заинтересовал rage-rpc, вот соурс: https://github.com/micaww/rage-rpc
Там же более подробно рассказано о всех функциях данной библиотеки, о установке и т.п.
Так же если будут какие-то вопросы, задавайте в комментарии, работаю с этой библиотекой уже 3 месяца.
P.S. Эта статья предназначена для скриптеров, которые пишут или хотят начать писать на JS (клиент и сервер).
Для начала, RPC (Remote Procedure Calls) упрощает двустороннюю связь между сервером, клиентом и cef. Фактически эта библиотека строится на стандартом RAGE API отправки пакетов с сервера на клиент и обратно, но с значительными преимуществами в виде удобства и оптимизации вашего кода.
Приведу небольшой практический пример: Допустиму нас есть CEF - меню фракции, в нём есть какая-то кнопка, действие которой нужно обработать на сервере.
Как эту задачу мы бы реализовали с помощью RAGE API:
CEF:
JavaScript:
$("#quit-fraction").click(function() {
// тело
mp.trigger("playerQuitFraction");
});
Клиент:
JavaScript:
mp.events.add("playerQuitFraction", () => {
mp.events.callRemote("remotePlayerQuitFraction");
});
Сервер:
JavaScript:
mp.events.add("remotePlayerQuitFraction", (player) => {
// и уже тут что-то делаем с player'ом
});
Как эту задачу мы бы реализовали с помощью rage-rpc:
CEF:
JavaScript:
$("#quit-fraction").click(function() {
// тело
rpc.callServer("playerQuitFraction");
});
Сервер:
JavaScript:
rpc.register("playerQuitFraction", (data, info) => {
let player = info.player;
// и уже тут что-то делаем с player'ом
});
Rage-rpc работает и в обратную сторону, с сервера в cef.
Мы пропустили посредника, а именно клиент. Может показаться, что не сильно сложно написать пару строк на клиенте, но вы только представьте, что происходит если вам надо создать кучу обработчиков действий из cef.
Проблему захламлённости кода клиента ненужными ивентами (посредниками) между CEF - Сервером и решает rage-rpc. Но это только начало. Функционал rage-rpc достаточно обилен.
Представим ситуацию: Мы хотим узнать на сервере поднимается ли по лестнице игрок в данный момент. Говорить о реализации через RAGE API, тут даже не стоит.
Реализация, через rage-rpc:
Сервер:
JavaScript:
const isClimbing = await rpc.callClient(player, 'getIsClimbing');
if (isClimbing) {
console.log(player.name + " поднимается.");
} else {
console.log(player.name + " не поднимается.");
}
Клиент:
JavaScript:
rpc.register('getIsClimbing', () => mp.players.local.isClimbing());
Абсолютно ничего лишнего, всё просто и удобно.
Если вас заинтересовал rage-rpc, вот соурс: https://github.com/micaww/rage-rpc
Там же более подробно рассказано о всех функциях данной библиотеки, о установке и т.п.
Так же если будут какие-то вопросы, задавайте в комментарии, работаю с этой библиотекой уже 3 месяца.