Fix handling of waitForMessages timeout

This commit is contained in:
Casper Warden
2018-10-12 09:41:35 +01:00
parent 35e705683d
commit 9242c474bd
10 changed files with 34 additions and 8 deletions

View File

@@ -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);

File diff suppressed because one or more lines are too long

4
dist/classes/TimeoutError.d.ts vendored Normal file
View File

@@ -0,0 +1,4 @@
export declare class TimeoutError extends Error {
timeout: true;
waitingForMessage: number;
}

6
dist/classes/TimeoutError.js vendored Normal file
View 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
View 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"}

View File

@@ -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 {

File diff suppressed because one or more lines are too long

View File

@@ -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);

View File

@@ -0,0 +1,5 @@
export class TimeoutError extends Error
{
timeout: true;
waitingForMessage: number;
}

View File

@@ -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);
}