Skip to content

Commit

Permalink
Catch all exceptions raised in commands that are invoked locally
Browse files Browse the repository at this point in the history
  • Loading branch information
manuelVo committed Apr 20, 2021
1 parent 5fa28a9 commit 4852da9
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 8 deletions.
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
## In development
### Bugfixes
- `executeFor` functions will no longer fail with an exception if a function scheduled to be called by the local user throws.


## 1.0.2
### New API endpoints
- Added `executeForOthers` and `executeForOtherGMs` that execute for all users/all GMs except the local client.
Expand Down
29 changes: 21 additions & 8 deletions src/socketlib.js
Original file line number Diff line number Diff line change
Expand Up @@ -109,9 +109,14 @@ class SocketlibSocket {
async executeForAllGMs(handler, ...args) {
const [name, func] = this._resolveFunction(handler);
this._sendCommand(name, args, RECIPIENT_TYPES.ALL_GMS);
if (game.user.isGM)
// TODO Make this function call run async, even if the function isn't delcared as async to prevent exceptions to propagate through executeForUsers
func(...args);
if (game.user.isGM) {
try {
func(...args);
}
catch (e) {
console.error(e);
}
}
}

async executeForOtherGMs(handler, ...args) {
Expand All @@ -122,8 +127,11 @@ class SocketlibSocket {
async executeForEveryone(handler, ...args) {
const [name, func] = this._resolveFunction(handler);
this._sendCommand(name, args, RECIPIENT_TYPES.EVERYONE);
// TODO Make this function call run async, even if the function isn't delcared as async to prevent exceptions to propagate through executeForUsers
func(...args);
try {
func(...args);
} catch (e) {
console.error(e);
}
}

async executeForOthers(handler, ...args) {
Expand All @@ -139,9 +147,14 @@ class SocketlibSocket {
if (currentUserIndex >= 0)
recipients.splice(currentUserIndex, 1);
this._sendCommand(name, args, recipients);
if (currentUserIndex >= 0)
// TODO Make this function call run async, even if the function isn't delcared as async to prevent exceptions to propagate through executeForUsers
func(...args);
if (currentUserIndex >= 0) {
try {
func(...args);
}
catch (e) {
console.error(e);
}
}
}

_sendRequest(handlerName, args, recipient) {
Expand Down

0 comments on commit 4852da9

Please sign in to comment.