diff --git a/app/modules/ws2p/lib/WS2PConnection.ts b/app/modules/ws2p/lib/WS2PConnection.ts index 5bef15d0ce786616c846d85fcfa885142a68f1a0..dad3bdbeebe643d18d3bbe02db234d483c126ccb 100644 --- a/app/modules/ws2p/lib/WS2PConnection.ts +++ b/app/modules/ws2p/lib/WS2PConnection.ts @@ -19,8 +19,8 @@ import {CertificationDTO} from "../../../lib/dto/CertificationDTO" import {MembershipDTO} from "../../../lib/dto/MembershipDTO" import {TransactionDTO} from "../../../lib/dto/TransactionDTO" import {PeerDTO} from "../../../lib/dto/PeerDTO" -import { WS2PConstants } from './constants'; -import { ProxiesConf } from '../../../lib/proxy'; +import {WS2PConstants} from './constants'; + const ws = require('ws') const SocksProxyAgent = require('socks-proxy-agent'); const nuuid = require('node-uuid'); @@ -253,6 +253,20 @@ export interface WS2PRequest { params?:any } +export class WS2PMessageExchange { + + promise: Promise<any> + extras: { + resolve: (data:any) => void + reject: (err:any) => void + } + + constructor(extras: { resolve: () => void; reject: () => void }, race: any) { + this.promise = race + this.extras = extras + } +} + /** * The handler of a WS2P connection. * @@ -270,14 +284,8 @@ export class WS2PConnection { private nbResponsesCount = 0 private nbPushsToRemoteCount = 0 private nbPushsByRemoteCount = 0 - private exchanges:{ - [uuid:string]: { - promise: Promise<any>, - extras: { - resolve: (data:any) => void - reject: (err:any) => void - } - } + private exchanges: { + [uuid: string]: WS2PMessageExchange } = {} constructor( @@ -575,9 +583,9 @@ export class WS2PConnection { resolve: () => { console.error('resolution not implemented') }, reject: () => { console.error('rejection not implemented') } } - this.exchanges[uuid] = { + this.exchanges[uuid] = new WS2PMessageExchange( extras, - promise: Promise.race([ + Promise.race([ // The answer new Promise((res, rej) => { extras.resolve = res @@ -593,11 +601,13 @@ export class WS2PConnection { }, this.options.requestTimeout) }) ]) - } + ) try { resolve(await this.exchanges[uuid].promise) } catch(e) { reject(e) + } finally { + delete this.exchanges[uuid] } } }) diff --git a/app/modules/ws2p/lib/interface/WS2PServerMessageHandler.ts b/app/modules/ws2p/lib/interface/WS2PServerMessageHandler.ts index 24c1bbe1a41c7773b6c45366b0253b80d03c2880..19a0a85deaa08d9af5cddff4335ebd3c739da7f5 100644 --- a/app/modules/ws2p/lib/interface/WS2PServerMessageHandler.ts +++ b/app/modules/ws2p/lib/interface/WS2PServerMessageHandler.ts @@ -115,6 +115,11 @@ export class WS2PServerMessageHandler implements WS2PMessageHandler { } this.server.logger.warn(message) } + setTimeout(() => { + if (this.errors[documentHash]) { + delete this.errors[documentHash] + } + }, 1000 * WS2PConstants.ERROR_RECALL_DURATION_IN_SECONDS) } else { // Remember the error for some time if (!this.errors[documentHash]) { @@ -125,7 +130,9 @@ export class WS2PServerMessageHandler implements WS2PMessageHandler { } this.errors[documentHash].pubkeys[c.pubkey] = [json.body] setTimeout(() => { - delete this.errors[documentHash] + if (this.errors[documentHash]) { + delete this.errors[documentHash] + } }, 1000 * WS2PConstants.ERROR_RECALL_DURATION_IN_SECONDS) } if (e !== "Block already known"