Fix handling of waitForMessages timeout
This commit is contained in:
8
dist/classes/Circuit.js
vendored
8
dist/classes/Circuit.js
vendored
@@ -9,6 +9,7 @@ const operators_1 = require("rxjs/operators");
|
||||
const FilterResponse_1 = require("../enums/FilterResponse");
|
||||
const Subject_1 = require("rxjs/internal/Subject");
|
||||
const __1 = require("..");
|
||||
const TimeoutError_1 = require("./TimeoutError");
|
||||
class Circuit {
|
||||
constructor(clientEvents) {
|
||||
this.client = null;
|
||||
@@ -121,7 +122,10 @@ class Circuit {
|
||||
const timeoutFunc = () => {
|
||||
if (handleObj.subscription !== null) {
|
||||
handleObj.subscription.unsubscribe();
|
||||
reject(new Error('Timeout waiting for message of type ' + id));
|
||||
const err = new TimeoutError_1.TimeoutError('Timeout waiting for message of type ' + id);
|
||||
err.timeout = true;
|
||||
err.waitingForMessage = id;
|
||||
reject(err);
|
||||
}
|
||||
};
|
||||
handleObj.timeout = setTimeout(timeoutFunc, timeout);
|
||||
@@ -223,7 +227,7 @@ class Circuit {
|
||||
if (this.receivedPackets[packet.sequenceNumber]) {
|
||||
clearTimeout(this.receivedPackets[packet.sequenceNumber]);
|
||||
this.receivedPackets[packet.sequenceNumber] = setTimeout(this.expireReceivedPacket.bind(this, packet.sequenceNumber), 10000);
|
||||
console.log('Ignoring duplicate packet: ' + packet.message.name);
|
||||
console.log('Ignoring duplicate packet: ' + packet.message.name + ' sequenceID: ' + packet.sequenceNumber);
|
||||
return;
|
||||
}
|
||||
this.receivedPackets[packet.sequenceNumber] = setTimeout(this.expireReceivedPacket.bind(this, packet.sequenceNumber), 10000);
|
||||
|
||||
2
dist/classes/Circuit.js.map
vendored
2
dist/classes/Circuit.js.map
vendored
File diff suppressed because one or more lines are too long
4
dist/classes/TimeoutError.d.ts
vendored
Normal file
4
dist/classes/TimeoutError.d.ts
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
export declare class TimeoutError extends Error {
|
||||
timeout: true;
|
||||
waitingForMessage: number;
|
||||
}
|
||||
6
dist/classes/TimeoutError.js
vendored
Normal file
6
dist/classes/TimeoutError.js
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
class TimeoutError extends Error {
|
||||
}
|
||||
exports.TimeoutError = TimeoutError;
|
||||
//# sourceMappingURL=TimeoutError.js.map
|
||||
1
dist/classes/TimeoutError.js.map
vendored
Normal file
1
dist/classes/TimeoutError.js.map
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"TimeoutError.js","sourceRoot":"","sources":["../../lib/classes/TimeoutError.ts"],"names":[],"mappings":";;AAAA,MAAa,YAAa,SAAQ,KAAK;CAItC;AAJD,oCAIC"}
|
||||
3
dist/classes/commands/GridCommands.js
vendored
3
dist/classes/commands/GridCommands.js
vendored
@@ -13,6 +13,7 @@ const MapNameRequest_1 = require("../messages/MapNameRequest");
|
||||
const GridLayerType_1 = require("../../enums/GridLayerType");
|
||||
const MapBlock_1 = require("../MapBlock");
|
||||
const __1 = require("../..");
|
||||
const TimeoutError_1 = require("../TimeoutError");
|
||||
class GridCommands extends CommandsBase_1.CommandsBase {
|
||||
getRegionByName(regionName) {
|
||||
return new Promise((resolve, reject) => {
|
||||
@@ -191,7 +192,7 @@ class GridCommands extends CommandsBase_1.CommandsBase {
|
||||
return FilterResponse_1.FilterResponse.NoMatch;
|
||||
}).then((ignore) => {
|
||||
}).catch((err) => {
|
||||
if (err.message === 'Timeout') {
|
||||
if (err instanceof TimeoutError_1.TimeoutError && err.timeout === true) {
|
||||
resolve(response);
|
||||
}
|
||||
else {
|
||||
|
||||
2
dist/classes/commands/GridCommands.js.map
vendored
2
dist/classes/commands/GridCommands.js.map
vendored
File diff suppressed because one or more lines are too long
@@ -14,6 +14,7 @@ import {ClientEvents} from './ClientEvents';
|
||||
import {FilterResponse} from '../enums/FilterResponse';
|
||||
import {Subject} from 'rxjs/internal/Subject';
|
||||
import {PacketFlags} from '..';
|
||||
import {TimeoutError} from './TimeoutError';
|
||||
|
||||
export class Circuit
|
||||
{
|
||||
@@ -200,7 +201,10 @@ export class Circuit
|
||||
if (handleObj.subscription !== null)
|
||||
{
|
||||
handleObj.subscription.unsubscribe();
|
||||
reject(new Error('Timeout waiting for message of type ' + id));
|
||||
const err = new TimeoutError('Timeout waiting for message of type ' + id);
|
||||
err.timeout = true;
|
||||
err.waitingForMessage = id;
|
||||
reject(err);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -350,7 +354,7 @@ export class Circuit
|
||||
{
|
||||
clearTimeout(this.receivedPackets[packet.sequenceNumber]);
|
||||
this.receivedPackets[packet.sequenceNumber] = setTimeout(this.expireReceivedPacket.bind(this, packet.sequenceNumber), 10000);
|
||||
console.log('Ignoring duplicate packet: ' + packet.message.name);
|
||||
console.log('Ignoring duplicate packet: ' + packet.message.name + ' sequenceID: ' + packet.sequenceNumber);
|
||||
return;
|
||||
}
|
||||
this.receivedPackets[packet.sequenceNumber] = setTimeout(this.expireReceivedPacket.bind(this, packet.sequenceNumber), 10000);
|
||||
|
||||
5
lib/classes/TimeoutError.ts
Normal file
5
lib/classes/TimeoutError.ts
Normal file
@@ -0,0 +1,5 @@
|
||||
export class TimeoutError extends Error
|
||||
{
|
||||
timeout: true;
|
||||
waitingForMessage: number;
|
||||
}
|
||||
@@ -16,6 +16,7 @@ import {MapNameRequestMessage} from '../messages/MapNameRequest';
|
||||
import {GridLayerType} from '../../enums/GridLayerType';
|
||||
import {MapBlock} from '../MapBlock';
|
||||
import {MapInfoRangeReplyEvent, MapInfoReplyEvent, PacketFlags, RegionInfoReplyEvent} from '../..';
|
||||
import {TimeoutError} from '../TimeoutError';
|
||||
export class GridCommands extends CommandsBase
|
||||
{
|
||||
getRegionByName(regionName: string)
|
||||
@@ -236,7 +237,7 @@ export class GridCommands extends CommandsBase
|
||||
|
||||
}).catch((err) =>
|
||||
{
|
||||
if (err.message === 'Timeout')
|
||||
if (err instanceof TimeoutError && err.timeout === true)
|
||||
{
|
||||
resolve(response);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user