Add CEF-->client RPC
This commit is contained in:
parent
71eaaf4da8
commit
5f26602327
60
src/index.js
60
src/index.js
@ -15,6 +15,15 @@ async function callProcedure(name, args, info){
|
|||||||
return listeners[name](args, info);
|
return listeners[name](args, info);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let passEventToBrowsers;
|
||||||
|
if(environment === "client"){
|
||||||
|
passEventToBrowsers = (raw) => {
|
||||||
|
mp.browsers.forEach(browser => {
|
||||||
|
browser.execute(`var process = window["${PROCESS_EVENT}"] || function(){}; process('${raw}');`);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
const processEvent = (...args) => {
|
const processEvent = (...args) => {
|
||||||
let rawData = args[0];
|
let rawData = args[0];
|
||||||
if(environment === "server") rawData = args[1];
|
if(environment === "server") rawData = args[1];
|
||||||
@ -24,9 +33,7 @@ const processEvent = (...args) => {
|
|||||||
if(data.req){ // a CEF request is trying to get to the server
|
if(data.req){ // a CEF request is trying to get to the server
|
||||||
mp.events.callRemote(PROCESS_EVENT, rawData);
|
mp.events.callRemote(PROCESS_EVENT, rawData);
|
||||||
}else if(data.ret){ // a server response is trying to get to a CEF instance
|
}else if(data.ret){ // a server response is trying to get to a CEF instance
|
||||||
mp.browsers.forEach(browser => {
|
passEventToBrowsers(rawData);
|
||||||
browser.execute(`var process = window["${PROCESS_EVENT}"] || function(){}; process('${rawData}');`); // send data to every instance
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -59,19 +66,35 @@ const processEvent = (...args) => {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case "client": {
|
case "client": {
|
||||||
|
const part = {
|
||||||
|
ret: 1,
|
||||||
|
id: data.id
|
||||||
|
};
|
||||||
|
if(data.env === "server"){
|
||||||
promise.then(res => {
|
promise.then(res => {
|
||||||
mp.events.callRemote(PROCESS_EVENT, util.stringifyData({
|
mp.events.callRemote(PROCESS_EVENT, util.stringifyData({
|
||||||
ret: 1,
|
...part,
|
||||||
id: data.id,
|
|
||||||
res
|
res
|
||||||
}));
|
}));
|
||||||
}).catch(err => {
|
}).catch(err => {
|
||||||
mp.events.callRemote(PROCESS_EVENT, util.stringifyData({
|
mp.events.callRemote(PROCESS_EVENT, util.stringifyData({
|
||||||
ret: 1,
|
...part,
|
||||||
id: data.id,
|
|
||||||
err
|
err
|
||||||
}));
|
}));
|
||||||
});
|
});
|
||||||
|
}else if(data.env === "cef"){
|
||||||
|
promise.then(res => {
|
||||||
|
passEventToBrowsers(util.stringifyData({
|
||||||
|
...part,
|
||||||
|
res
|
||||||
|
}));
|
||||||
|
}).catch(err => {
|
||||||
|
passEventToBrowsers(util.stringifyData({
|
||||||
|
...part,
|
||||||
|
err
|
||||||
|
}));
|
||||||
|
});
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -165,12 +188,17 @@ rpc.callServer = (name, args) => {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Calls a remote procedure registered on the client.
|
* Calls a remote procedure registered on the client.
|
||||||
* @param player - The player to call the procedure on.
|
* @param [player] - The player to call the procedure on.
|
||||||
* @param {string} name - The name of the registered procedure.
|
* @param {string} name - The name of the registered procedure.
|
||||||
* @param args - Any parameters for the procedure.
|
* @param args - Any parameters for the procedure.
|
||||||
* @returns {Promise} - The result from the procedure.
|
* @returns {Promise} - The result from the procedure.
|
||||||
*/
|
*/
|
||||||
rpc.callClient = (player, name, args) => {
|
rpc.callClient = (player, name, args) => {
|
||||||
|
if(typeof player === "string"){
|
||||||
|
if(environment === "server") return Promise.reject('This syntax can only be used in browser and client environments.');
|
||||||
|
args = name;
|
||||||
|
name = player;
|
||||||
|
}
|
||||||
switch(environment){
|
switch(environment){
|
||||||
case "client": {
|
case "client": {
|
||||||
if(player === mp.players.local) return rpc.call(name, args);
|
if(player === mp.players.local) return rpc.call(name, args);
|
||||||
@ -192,6 +220,22 @@ rpc.callClient = (player, name, args) => {
|
|||||||
})]);
|
})]);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
case "cef": {
|
||||||
|
const id = util.uid();
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
pending[id] = {
|
||||||
|
resolve,
|
||||||
|
reject
|
||||||
|
};
|
||||||
|
mp.trigger(PROCESS_EVENT, util.stringifyData({
|
||||||
|
req: 1,
|
||||||
|
id,
|
||||||
|
name,
|
||||||
|
env: environment,
|
||||||
|
args
|
||||||
|
}));
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user