mirror of
https://github.com/Xahau/xahau.js.git
synced 2025-11-25 06:35:48 +00:00
Avoid catching listener exceptions in Connection class
This commit is contained in:
@@ -24,14 +24,14 @@ class Connection extends EventEmitter {
|
|||||||
this._nextRequestID = 1;
|
this._nextRequestID = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
_onMessage(message) {
|
// return value is array of arguments to Connection.emit
|
||||||
try {
|
_parseMessage(message) {
|
||||||
const data = JSON.parse(message);
|
const data = JSON.parse(message);
|
||||||
if (data.type === 'response') {
|
if (data.type === 'response') {
|
||||||
if (!(Number.isInteger(data.id) && data.id >= 0)) {
|
if (!(Number.isInteger(data.id) && data.id >= 0)) {
|
||||||
throw new UnexpectedError('valid id not found in response');
|
throw new UnexpectedError('valid id not found in response');
|
||||||
}
|
}
|
||||||
this.emit(data.id.toString(), data);
|
return [data.id.toString(), data];
|
||||||
} else if (isStreamMessageType(data.type)) {
|
} else if (isStreamMessageType(data.type)) {
|
||||||
if (data.type === 'ledgerClosed') {
|
if (data.type === 'ledgerClosed') {
|
||||||
this._ledgerVersion = Number(data.ledger_index);
|
this._ledgerVersion = Number(data.ledger_index);
|
||||||
@@ -39,15 +39,24 @@ class Connection extends EventEmitter {
|
|||||||
this._availableLedgerVersions.parseAndAddRanges(
|
this._availableLedgerVersions.parseAndAddRanges(
|
||||||
data.validated_ledgers);
|
data.validated_ledgers);
|
||||||
}
|
}
|
||||||
this.emit(data.type, data);
|
return [data.type, data];
|
||||||
} else if (data.type === undefined && data.error) {
|
} else if (data.type === undefined && data.error) {
|
||||||
this.emit('error', data.error, data.error_message); // e.g. slowDown
|
return ['error', data.error, data.error_message]; // e.g. slowDown
|
||||||
} else {
|
}
|
||||||
throw new UnexpectedError('unrecognized message type: ' + data.type);
|
throw new UnexpectedError('unrecognized message type: ' + data.type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_onMessage(message) {
|
||||||
|
let parameters;
|
||||||
|
try {
|
||||||
|
parameters = this._parseMessage(message);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
this.emit('error', 'badMessage', message);
|
this.emit('error', 'badMessage', message);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
// we don't want this inside the try/catch or exceptions in listener
|
||||||
|
// will be caught
|
||||||
|
this.emit.apply(this, parameters);
|
||||||
}
|
}
|
||||||
|
|
||||||
get state() {
|
get state() {
|
||||||
|
|||||||
Reference in New Issue
Block a user