Page MenuHomePhorge

D9632.1768400683.diff
No OneTemporary

Size
2 KB
Referenced Files
None
Subscribers
None

D9632.1768400683.diff

diff --git a/lib/tunnelbroker/tunnelbroker-context.js b/lib/tunnelbroker/tunnelbroker-context.js
--- a/lib/tunnelbroker/tunnelbroker-context.js
+++ b/lib/tunnelbroker/tunnelbroker-context.js
@@ -5,6 +5,8 @@
import uuid from 'uuid';
import { tunnnelbrokerURL } from '../facts/tunnelbroker.js';
+import { tunnelbrokerHeartbeatTimeout } from '../shared/timeouts.js';
+import type { Heartbeat } from '../types/tunnelbroker/heartbeat-types.js';
import type { MessageReceiveConfirmation } from '../types/tunnelbroker/message-receive-confirmation-types.js';
import type { MessageSentStatus } from '../types/tunnelbroker/message-to-device-request-status-types.js';
import type { MessageToDeviceRequest } from '../types/tunnelbroker/message-to-device-request-types.js';
@@ -51,6 +53,22 @@
const listeners = React.useRef<Set<TunnelbrokerSocketListener>>(new Set());
const socket = React.useRef<?WebSocket>(null);
const promises = React.useRef<Promises>({});
+ const heartbeatTimeoutID = React.useRef();
+
+ const stopHeartbeatTimeout = React.useCallback(() => {
+ if (heartbeatTimeoutID.current) {
+ clearTimeout(heartbeatTimeoutID.current);
+ heartbeatTimeoutID.current = null;
+ }
+ }, []);
+
+ const resetHeartbeatTimeout = React.useCallback(() => {
+ stopHeartbeatTimeout();
+ heartbeatTimeoutID.current = setTimeout(() => {
+ socket.current?.close();
+ setConnected(false);
+ }, tunnelbrokerHeartbeatTimeout);
+ }, [stopHeartbeatTimeout]);
React.useEffect(() => {
if (connected || !initMessage) {
@@ -89,6 +107,8 @@
}
const message: TunnelbrokerMessage = rawMessage;
+ resetHeartbeatTimeout();
+
for (const listener of listeners.current) {
listener(message);
}
@@ -134,11 +154,16 @@
console.log('Tunnelbroker recorded InvalidRequest');
}
}
+ } else if (message.type === tunnelbrokerMessageTypes.HEARTBEAT) {
+ const heartbeat: Heartbeat = {
+ type: tunnelbrokerMessageTypes.HEARTBEAT,
+ };
+ socket.current?.send(JSON.stringify(heartbeat));
}
};
socket.current = tunnelbrokerSocket;
- }, [connected, initMessage]);
+ }, [connected, initMessage, resetHeartbeatTimeout, stopHeartbeatTimeout]);
const sendMessage: (message: ClientMessageToDevice) => Promise<void> =
React.useCallback(

File Metadata

Mime Type
text/plain
Expires
Wed, Jan 14, 2:24 PM (8 h, 41 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5932430
Default Alt Text
D9632.1768400683.diff (2 KB)

Event Timeline