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); setRpcHidProtocolVersion(message.version);
// clean up // clean up
handshakeCompleted = true;
if (handshakeInterval) {
clearInterval(handshakeInterval);
handshakeInterval = null;
}
const timeUsed = lastSendTime ? Date.now() - lastSendTime.getTime() : 0; const timeUsed = lastSendTime ? Date.now() - lastSendTime.getTime() : 0;
logger.info(`Handshake completed in ${timeUsed}ms after ${attempts} attempts (Version: ${message.version} / ${HID_RPC_VERSION})`); logger.info(`Handshake completed in ${timeUsed}ms after ${attempts} attempts (Version: ${message.version} / ${HID_RPC_VERSION})`);
resetHandshake({ completed: true });
rpcHidChannel.removeEventListener("message", onMessage); rpcHidChannel.removeEventListener("message", onMessage);
}; };
const resetHandshake = (newLastConnectedTime?: Date | undefined) => { const resetHandshake = ({ lastConnectedTime: newLastConnectedTime, completed }: { lastConnectedTime?: Date | undefined, completed?: boolean }) => {
lastConnectedTime = newLastConnectedTime; if (newLastConnectedTime) lastConnectedTime = newLastConnectedTime;
lastSendTime = undefined; lastSendTime = undefined;
attempts = 0; attempts = 0;
handshakeCompleted = false; if (completed !== undefined) handshakeCompleted = completed;
if (handshakeInterval) { if (handshakeInterval) {
clearInterval(handshakeInterval); clearInterval(handshakeInterval);
handshakeInterval = null; handshakeInterval = null;
@ -127,7 +123,7 @@ export function doRpcHidHandshake(rpcHidChannel: RTCDataChannel, setRpcHidProtoc
}; };
const onConnected = () => { const onConnected = () => {
resetHandshake(new Date()); resetHandshake({ lastConnectedTime: new Date() });
logger.info("Channel connected"); logger.info("Channel connected");
sendHandshake(true); sendHandshake(true);
@ -135,14 +131,21 @@ export function doRpcHidHandshake(rpcHidChannel: RTCDataChannel, setRpcHidProtoc
}; };
const onClose = () => { const onClose = () => {
resetHandshake(); resetHandshake({ lastConnectedTime: undefined, completed: false });
logger.info("Channel closed"); logger.info("Channel closed");
setRpcHidProtocolVersion(null); setRpcHidProtocolVersion(null);
rpcHidChannel.removeEventListener("message", onMessage);
}; };
rpcHidChannel.addEventListener("open", onConnected); rpcHidChannel.addEventListener("open", onConnected);
rpcHidChannel.addEventListener("close", onClose); 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) { 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 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); /* @__PURE__ */ logger.debug("Received message", message);
onHidRpcMessage?.(message); onHidRpcMessage?.(message);
}; };
const errorHandler = (e: Event) => { 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); rpcHidChannel.addEventListener("message", messageHandler);

View File

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