53 lines
1.8 KiB
JavaScript
53 lines
1.8 KiB
JavaScript
import { RdDBaseActor } from "./actor/base-actor.js";
|
|
import { SYSTEM_SOCKET_ID } from "./constants.js";
|
|
import { Misc } from "./misc.js";
|
|
|
|
export class Remote {
|
|
|
|
static onSocketMessage(sockmsg) {
|
|
switch (sockmsg.msg) {
|
|
case "msg_remote_call":
|
|
return Remote.onRemoteCall(sockmsg.userId, sockmsg.data);
|
|
}
|
|
}
|
|
|
|
static remoteCall({ userId = undefined, documentName, documentId, tokenId = undefined, method, args }) {
|
|
const callData = { documentName, documentId, tokenId, method, args }
|
|
const sendToUserId = Misc.connectedUserOrGM(userId)
|
|
if (sendToUserId == undefined) {
|
|
ui.notifications.error(`Impossible d'envoyer un message à ${userId}`)
|
|
}
|
|
else if (sendToUserId == game.user.id) {
|
|
Remote.onRemoteCall(game.user.id, callData)
|
|
return false
|
|
}
|
|
else {
|
|
game.socket.emit(SYSTEM_SOCKET_ID, { msg: "msg_remote_call", userId: sendToUserId, data: callData })
|
|
return true
|
|
}
|
|
}
|
|
|
|
static onRemoteCall(userId, callData) {
|
|
if (userId == game.user.id) {
|
|
// Seul le joueur choisi effectue l'appel: le joueur courant si propriétaire de l'actor, ou le MJ sinon
|
|
const doc = Remote.getDoc(callData)
|
|
if (doc) {
|
|
const args = callData.args;
|
|
const method = callData.method;
|
|
console.info(`Remote.onRemoteCall: ${callData.documentName} ${callData.documentId}, appel de ${method}(`, ...args, ')')
|
|
doc[method](...args)
|
|
}
|
|
}
|
|
}
|
|
|
|
static getDoc(callData) {
|
|
switch (callData.documentName) {
|
|
case 'Actor': return RdDBaseActor.getRealActor(callData.documentId, callData.tokenId)
|
|
case 'Item': return game.items.get(callData.documentId)
|
|
case 'RollTable': return game.tables.get(callData.documentId)
|
|
case 'ChatMessage': return game.messages.get(callData.documentId)
|
|
}
|
|
return undefined
|
|
}
|
|
|
|
} |