Skip to content

Commit f38cc02

Browse files
committed
Make time duration since last server data available
1 parent 0f10f88 commit f38cc02

File tree

3 files changed

+17
-0
lines changed

3 files changed

+17
-0
lines changed

src/amqp-base-client.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ export abstract class AMQPBaseClient {
2525
channelMax = 0
2626
frameMax: number
2727
heartbeat: number
28+
lastDataReceived: number | undefined = undefined
2829
onerror: (error: AMQPError) => void
2930
logger: Logger | null | undefined = console
3031
/** Used for string -> arraybuffer when publishing */
@@ -85,6 +86,7 @@ export abstract class AMQPBaseClient {
8586
close(reason = "", code = 200): Promise<void> {
8687
if (this.closed) return this.rejectClosed()
8788
this.closed = true
89+
this.lastDataReceived = undefined
8890
let j = 0
8991
const frame = new AMQPView(new ArrayBuffer(512))
9092
frame.setUint8(j, 1); j += 1 // type: method
@@ -606,5 +608,18 @@ export abstract class AMQPBaseClient {
606608
}
607609
i += 1 // frame end
608610
}
611+
this.lastDataReceived = performance.now()
612+
}
613+
614+
/**
615+
* Get the time since since connection or last data received
616+
* @returns milliseconds; Infinity if disconnected
617+
*/
618+
durationSinceLastData(): number {
619+
if (typeof this.lastDataReceived === 'number') {
620+
return performance.now() - this.lastDataReceived;
621+
} else {
622+
return Infinity
623+
}
609624
}
610625
}

src/amqp-socket-client.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ export class AMQPClient extends AMQPBaseClient {
5858
socket.setTimeout((this.heartbeat || 60) * 1000)
5959
// enable TCP keepalive if AMQP heartbeats are disabled
6060
if (this.heartbeat === 0) socket.setKeepAlive(true, 60)
61+
this.lastDataReceived = performance.now()
6162
return new Promise((resolve, reject) => {
6263
socket.on('timeout', () => reject(new AMQPError("timeout", this)))
6364
socket.on('error', (err) => reject(new AMQPError(err.message, this)))

src/amqp-websocket-client.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ export class AMQPWebSocketClient extends AMQPBaseClient {
5050
this.socket = socket
5151
socket.binaryType = "arraybuffer"
5252
socket.onmessage = this.handleMessage.bind(this)
53+
this.lastDataReceived = performance.now()
5354
return new Promise((resolve, reject) => {
5455
this.connectPromise = [resolve, reject]
5556
socket.addEventListener('close', reject)

0 commit comments

Comments
 (0)