房间号格式不正确
+房间号必须是 1000..9999 的四位数字
+From eb926f89b34562f35430d2a40dcd0205e67ee69d Mon Sep 17 00:00:00 2001
From: AAA <35992542+TNTcraftHIM@users.noreply.github.com>
Date: Mon, 24 Aug 2026 04:37:11 +0800
Subject: [PATCH] feat: implement v9 viewer entry and presentation
---
src/client/App.tsx | 32 +-
src/client/components/RoomCodeEntry.tsx | 7 +-
src/client/components/StageEntryActions.tsx | 48 ++
src/client/lib/diagnostic-export.ts | 75 ++-
src/client/lib/session.ts | 33 +-
src/client/lib/signaling.ts | 1 +
src/client/media/video-frame-proof.ts | 97 +++
src/client/media/viewer-presentation.ts | 626 ++++++++++++++++++
src/client/media/viewer-sfu-route.ts | 29 +-
src/client/pages/HostPage.tsx | 48 +-
src/client/pages/ViewerPage.tsx | 673 +++++++++++++++-----
src/client/styles.css | 32 +-
src/server/hybrid-media-router.ts | 12 +-
src/server/signaling.ts | 23 +-
src/shared/protocol.ts | 3 +-
tests/client-state.test.ts | 40 +-
tests/diagnostic-export.test.ts | 73 +++
tests/hybrid-media-router.test.ts | 181 +++++-
tests/protocol.test.ts | 83 ++-
tests/server-signal.test.ts | 121 +++-
tests/stage-entry-actions.test.ts | 56 ++
tests/video-frame-proof.test.ts | 86 +++
tests/viewer-presentation.test.ts | 204 ++++++
23 files changed, 2301 insertions(+), 282 deletions(-)
create mode 100644 src/client/components/StageEntryActions.tsx
create mode 100644 src/client/media/video-frame-proof.ts
create mode 100644 src/client/media/viewer-presentation.ts
create mode 100644 tests/stage-entry-actions.test.ts
create mode 100644 tests/video-frame-proof.test.ts
create mode 100644 tests/viewer-presentation.test.ts
diff --git a/src/client/App.tsx b/src/client/App.tsx
index cfb9252..755855a 100644
--- a/src/client/App.tsx
+++ b/src/client/App.tsx
@@ -6,14 +6,13 @@ import {
getSiteAccess,
type SiteAccessStatus,
} from "./lib/api";
-import { readViewerRoute } from "./lib/session";
+import { parseAppRoute, readViewerRoute } from "./lib/session";
import { HostPage } from "./pages/HostPage";
import { JoinPage } from "./pages/JoinPage";
import { ViewerPage } from "./pages/ViewerPage";
-const viewerRoute = readViewerRoute();
-const isJoinRoute = /^\/join\/?$/.test(window.location.pathname);
-const isHostRoute = /^\/?$/.test(window.location.pathname);
+const appRoute = parseAppRoute(window.location.pathname);
+const viewerRoute = appRoute.kind === "viewer" ? readViewerRoute() : null;
type AccessState =
| { kind: "checking" }
@@ -34,20 +33,24 @@ function readableError(error: unknown): string {
}
export function App() {
- if (viewerRoute) {
+ if (appRoute.kind === "viewer" && viewerRoute) {
return viewerRoute.viewerGrant ? (
房间号必须是 1000..9999 的四位数字
+