fix based on review feedback

This commit is contained in:
Siyuan 2025-11-18 15:24:08 +00:00
parent d3c1b7208c
commit f7b51fb05a
2 changed files with 17 additions and 12 deletions

View File

@ -104,22 +104,18 @@ export function doRpcHidHandshake(rpcHidChannel: RTCDataChannel, setRpcHidProtoc
setRpcHidProtocolVersion(message.version);
// clean up
handshakeCompleted = true;
if (handshakeInterval) {
clearInterval(handshakeInterval);
handshakeInterval = null;
}
const timeUsed = lastSendTime ? Date.now() - lastSendTime.getTime() : 0;
logger.info(`Handshake completed in ${timeUsed}ms after ${attempts} attempts (Version: ${message.version} / ${HID_RPC_VERSION})`);
resetHandshake({ completed: true });
rpcHidChannel.removeEventListener("message", onMessage);
};
const resetHandshake = (newLastConnectedTime?: Date | undefined) => {
lastConnectedTime = newLastConnectedTime;
const resetHandshake = ({ lastConnectedTime: newLastConnectedTime, completed }: { lastConnectedTime?: Date | undefined, completed?: boolean }) => {
if (newLastConnectedTime) lastConnectedTime = newLastConnectedTime;
lastSendTime = undefined;
attempts = 0;
handshakeCompleted = false;
if (completed !== undefined) handshakeCompleted = completed;
if (handshakeInterval) {
clearInterval(handshakeInterval);
handshakeInterval = null;
@ -127,7 +123,7 @@ export function doRpcHidHandshake(rpcHidChannel: RTCDataChannel, setRpcHidProtoc
};
const onConnected = () => {
resetHandshake(new Date());
resetHandshake({ lastConnectedTime: new Date() });
logger.info("Channel connected");
sendHandshake(true);
@ -135,14 +131,21 @@ export function doRpcHidHandshake(rpcHidChannel: RTCDataChannel, setRpcHidProtoc
};
const onClose = () => {
resetHandshake();
resetHandshake({ lastConnectedTime: undefined, completed: false });
logger.info("Channel closed");
setRpcHidProtocolVersion(null);
rpcHidChannel.removeEventListener("message", onMessage);
};
rpcHidChannel.addEventListener("open", onConnected);
rpcHidChannel.addEventListener("close", onClose);
// handle case where channel is already open when the hook is mounted
if (rpcHidChannel.readyState === "open") {
onConnected();
}
}
export function useHidRpc(onHidRpcMessage?: (payload: RpcMessage) => void) {
@ -289,13 +292,15 @@ export function useHidRpc(onHidRpcMessage?: (payload: RpcMessage) => void) {
if (message instanceof HandshakeMessage) return; // handshake message is handled by the doRpcHidHandshake function
// to remove it from the production build, we need to use the /* @__PURE__ */ comment here
// setting `esbuild.pure` doesn't work
/* @__PURE__ */ logger.debug("Received message", message);
onHidRpcMessage?.(message);
};
const errorHandler = (e: Event) => {
console.error(`[HIDRPC] Error on channel '${rpcHidChannel.label}': ${e}`)
logger.error(`Error on channel '${rpcHidChannel.label}'`, e);
};
rpcHidChannel.addEventListener("message", messageHandler);

View File

@ -39,7 +39,7 @@ export default defineConfig(({ mode, command }) => {
return {
plugins,
esbuild: {
pure: command === "build" ? ["console.debug", "logger.debug"] : ["console.debug"],
pure: command === "build" ? ["console.debug"]: [],
},
assetsInclude: ["**/*.woff2"],
build: {