From f4ab50b73e12077846ca15ba57cdd10aeaec7495 Mon Sep 17 00:00:00 2001
From: stary <834207172@qq.COM>
Date: Sat, 11 Apr 2026 16:16:11 +0800
Subject: [PATCH] md
---
.../client/public/onebyone/knowledge-graph.md | 376 ++++++++++++++++++
1 file changed, 376 insertions(+)
create mode 100644 WebApp/client/public/onebyone/knowledge-graph.md
diff --git a/WebApp/client/public/onebyone/knowledge-graph.md b/WebApp/client/public/onebyone/knowledge-graph.md
new file mode 100644
index 0000000..119abd5
--- /dev/null
+++ b/WebApp/client/public/onebyone/knowledge-graph.md
@@ -0,0 +1,376 @@
+# OneByOne 知识图谱
+
+## 1. 模块依赖关系图
+
+```mermaid
+graph TB
+ subgraph Page["📄 页面层"]
+ INDEX[index.html
主通话页面]
+ CONN[connect/connect.html
连接页面]
+ END[endcall/endcall.html
结束页面]
+ end
+
+ subgraph Core["⚙️ 核心模块"]
+ MAIN[main.js
应用入口]
+ STORE[store.js
状态管理]
+ RENDER[renderer.js
UI渲染器]
+ CHAT[chatmessage.js
消息模块]
+ end
+
+ subgraph Base["📦 数据与工具"]
+ MODELS[models.js
数据模型]
+ API[api.js
API客户端]
+ UTILS[utils.js
工具函数]
+ end
+
+ subgraph External["🔗 外部依赖"]
+ SIGNALING[signaling.js
信令管理]
+ RENDERSTR[renderstreaming.js
WebRTC管理]
+ CONFIG[config.js
配置管理]
+ end
+
+ INDEX --> MAIN
+ CONN --> CONN_JS[connect.js]
+ END --> END_JS[endcall.js]
+
+ MAIN --> STORE
+ MAIN --> RENDER
+ MAIN --> API
+ MAIN --> UTILS
+ MAIN --> CHAT
+
+ STORE --> MODELS
+ STORE --> SIGNALING
+ STORE --> RENDERSTR
+ STORE --> CONFIG
+ STORE --> UTILS
+ STORE --> CHAT
+
+ RENDER --> UTILS
+ RENDER --> MODELS
+ RENDER --> CHAT
+
+ CHAT --> UTILS
+ CHAT --> STORE
+ CHAT --> MODELS
+
+ CONN_JS --> STORE
+
+ style STORE fill:#f9f,stroke:#333,stroke-width:2px
+ style RENDER fill:#bbf,stroke:#333,stroke-width:2px
+ style CHAT fill:#bfb,stroke:#333,stroke-width:2px
+```
+
+## 2. 数据模型关系图
+
+```mermaid
+graph TB
+ subgraph Models["数据模型结构"]
+ SESSION[CallSession
通话会话]
+ LOCAL[LocalUser
本地用户]
+ REMOTE[RemoteUser
远端用户]
+ MEDIA[MediaState
媒体状态]
+ MSG[ChatMessage
聊天消息]
+ end
+
+ SESSION --> LOCAL
+ SESSION --> REMOTE
+ LOCAL --> MEDIA
+ REMOTE --> MEDIA
+
+ style SESSION fill:#f96,stroke:#333,stroke-width:2px
+ style MEDIA fill:#9f6,stroke:#333,stroke-width:2px
+```
+
+### 模型属性说明
+
+| 模型 | 属性 |
+|-----|------|
+| **CallSession** | id, type, status, startTime, duration, isEncrypted |
+| **LocalUser** | id, name, avatar, isHost, mediaState |
+| **RemoteUser** | id, name, avatar, status, networkQuality, mediaState |
+| **MediaState** | audio, video, screenShare, recording, isSpeaking |
+| **ChatMessage** | id, senderId, senderName, content, type, timestamp, isSelf |
+
+## 3. 状态更新时序图
+
+```mermaid
+sequenceDiagram
+ autonumber
+ participant USER as 👤 用户
+ participant DOM as 🖱️ DOM事件
+ participant MAIN as ⚙️ main.js
+ participant STORE as 📦 store.js
+ participant RENDER as 🎨 renderer.js
+ participant UI as 🖥️ UI界面
+
+ USER->>DOM: 点击麦克风按钮
+ DOM->>MAIN: toggleMute()
+ MAIN->>STORE: updateLocalMedia('audio', false)
+ STORE->>STORE: 更新 mediaState.audio
+ STORE->>STORE: notify({type: 'LOCAL_MEDIA_CHANGE'})
+ STORE->>RENDER: 回调 render(state, changes)
+ RENDER->>RENDER: renderControlButtons(mediaState)
+ RENDER->>RENDER: renderLocalUserStatus(localUser)
+ RENDER->>UI: 更新DOM
+ UI->>USER: 显示更新后的界面
+```
+
+## 4. WebRTC 连接建立时序图
+
+```mermaid
+sequenceDiagram
+ autonumber
+ participant USER as 👤 用户
+ participant MAIN as ⚙️ main.js
+ participant STORE as 📦 store.js
+ participant SIGNAL as 📡 signaling.js
+ participant RTC as 🔗 renderstreaming.js
+ participant PEER as 👤 远端对等端
+
+ USER->>MAIN: 访问页面
+ MAIN->>STORE: joinCall(connectionId)
+ STORE->>STORE: init()
+ STORE->>STORE: getLocalStream()
获取本地摄像头
+ MAIN->>STORE: setUp(connectionId)
+ STORE->>SIGNAL: 创建信令实例
+ STORE->>RTC: new RenderStreaming
(signaling, config)
+ RTC->>SIGNAL: start()
+ RTC->>SIGNAL: createConnection(connectionId)
+
+ loop WebSocket信令交换
+ PEER->>SIGNAL: 交换SDP/ICE
+ SIGNAL->>RTC: 信令数据
+ end
+
+ RTC->>STORE: onConnect 回调
+ STORE->>STORE: 状态更新为 ongoing
+ PEER->>RTC: 接收媒体流
+ RTC->>STORE: onTrackEvent 回调
+ STORE->>STORE: notify(REMOTE_STREAM_OBTAINED)
+ STORE->>RENDER: 触发渲染更新
+ RENDER->>UI: 显示远端视频
+```
+
+## 5. 消息发送流程
+
+```mermaid
+sequenceDiagram
+ autonumber
+ participant USER as 👤 用户
+ participant DOM as 🖱️ DOM
+ participant CHAT as 💬 chatmessage.js
+ participant STORE as 📦 store.js
+ participant RTC as 🔗 renderstreaming.js
+ participant PEER as 👤 远端用户
+
+ USER->>DOM: 输入消息并回车
+ DOM->>CHAT: handleChatSubmit(event)
+ CHAT->>CHAT: sendMessage()
+ CHAT->>CHAT: addMessage(message)
添加到本地列表
+ CHAT->>STORE: getRenderStreaming()
+ STORE-->>CHAT: 返回实例
+ CHAT->>RTC: sendMessage()
发送chat-message
+ RTC->>PEER: 通过WebRTC数据通道发送
+
+ PEER->>RTC: 收到消息
+ RTC->>STORE: onMessage 回调
+ STORE->>CHAT: handleChatMessage(data)
+ CHAT->>CHAT: addMessage()
添加到消息列表
+ CHAT->>RENDER: 更新聊天UI
+```
+
+## 6. 页面流转状态图
+
+```mermaid
+stateDiagram-v2
+ [*] --> 连接页面: 首次访问/无connectionId
+
+ 连接页面: connect.html
+ 连接页面: - 输入连接ID
+ 连接页面: - 创建新通话
+ 连接页面: - 用户设置
+
+ 通话页面: index.html
+ 通话页面: - 视频通话
+ 通话页面: - 聊天功能
+ 通话页面: - 媒体控制
+
+ 结束页面: endcall.html
+ 结束页面: - 显示断开原因
+ 结束页面: - 重新连接选项
+
+ 连接页面 --> 通话页面: 加入/创建通话
+ 通话页面 --> 结束页面: 通话结束/断开
+ 通话页面 --> 连接页面: 无有效connectionId
+ 结束页面 --> 通话页面: 重新连接
+ 结束页面 --> 连接页面: 返回
+```
+
+## 7. 通话状态机
+
+```mermaid
+stateDiagram-v2
+ [*] --> idle: 初始化
+
+ idle: 空闲状态
+ idle --> connecting: joinCall()
加入通话
+ idle --> connecting: createCall()
创建通话
+
+ connecting: 连接中
+ connecting --> ongoing: onConnect
连接成功
+ connecting --> failed: 连接失败
+
+ ongoing: 通话中
+ ongoing --> ended: hangUp()
挂断
+ ongoing --> ended: endCall()
结束通话
+
+ failed: 连接失败
+ failed --> connecting: 重试连接
+ failed --> ended: 放弃连接
+
+ ended: 已结束
+ ended --> [*]: 清理资源
+```
+
+## 8. 组件层次结构
+
+```mermaid
+graph TD
+ subgraph index["index.html 组件结构"]
+ HEADER["🧭 Header 顶部栏"]
+ MAIN["📺 Main 主内容区"]
+ FOOTER["🎛️ Footer 底部控制栏"]
+ end
+
+ subgraph header["Header 内容"]
+ TITLE["标题: 与xxx的通话"]
+ NETWORK["网络质量指示"]
+ DURATION["通话时长"]
+ ENCRYPT["端到端加密标识"]
+ end
+
+ subgraph main["Main 内容"]
+ VIDEO_AREA["VideoArea 视频区"]
+ SIDEBAR["Sidebar 侧边栏"]
+ end
+
+ subgraph video["VideoArea"]
+ REMOTE["RemoteVideo 远端视频"]
+ LOCAL["LocalVideo 本地视频画中画"]
+ end
+
+ subgraph sidebar["Sidebar"]
+ USER_LIST["UserList 用户列表"]
+ CHAT_MSG["ChatMessages 聊天消息"]
+ CHAT_INPUT["ChatInput 消息输入"]
+ end
+
+ subgraph footer["Footer 控制栏"]
+ CTRL_MIC["🎤 麦克风"]
+ CTRL_VIDEO["📹 视频"]
+ CTRL_RECORD["🔴 录制"]
+ CTRL_END["📞 结束通话"]
+ CTRL_CHAT["💬 聊天"]
+ end
+
+ HEADER --> TITLE
+ HEADER --> NETWORK
+ HEADER --> DURATION
+ HEADER --> ENCRYPT
+
+ MAIN --> VIDEO_AREA
+ MAIN --> SIDEBAR
+
+ VIDEO_AREA --> REMOTE
+ VIDEO_AREA --> LOCAL
+
+ SIDEBAR --> USER_LIST
+ SIDEBAR --> CHAT_MSG
+ SIDEBAR --> CHAT_INPUT
+
+ FOOTER --> CTRL_MIC
+ FOOTER --> CTRL_VIDEO
+ FOOTER --> CTRL_RECORD
+ FOOTER --> CTRL_END
+ FOOTER --> CTRL_CHAT
+
+ style CTRL_END fill:#f66,stroke:#333,stroke-width:2px
+ style ENCRYPT fill:#9f6,stroke:#333,stroke-width:2px
+```
+
+## 9. 文件引用汇总
+
+```mermaid
+graph LR
+ subgraph Import["导入关系"]
+ direction TB
+ M[main.js]
+ S[store.js]
+ R[renderer.js]
+ C[chatmessage.js]
+ CONN[connect.js]
+
+ M --> S
+ M --> R
+ M --> C
+ S --> C
+ R --> C
+ CONN --> S
+ end
+
+ subgraph Export["导出内容"]
+ direction TB
+ ST[store.js
export default store]
+ RE[renderer.js
export default UIRenderer]
+ AP[api.js
export default apiClient]
+ UT[utils.js
export { formatTime, showNotification, ... }]
+ MO[models.js
export { mockCallSession, mockMessages }]
+ CH[chatmessage.js
export { sendMessage, toggleSidebar, ... }]
+ end
+```
+
+## 10. API 接口调用图
+
+```mermaid
+graph LR
+ subgraph Client["客户端"]
+ API_CLIENT[api.js
ApiClient类]
+ CONN_JS[connect.js]
+ end
+
+ subgraph Server["服务器"]
+ API_CALL[/api/call/:callId]
+ API_JOIN[/api/call/:callId/join]
+ API_LEAVE[/api/call/:callId/leave]
+ API_MEDIA[/api/call/:callId/media]
+ API_MSG[/api/call/:callId/messages]
+ API_SEND[/api/call/:callId/message]
+ API_CONN[/signaling/connection-ids]
+ API_UPLOAD[/api/upload/avatar]
+ end
+
+ API_CLIENT -.-> API_CALL
+ API_CLIENT -.-> API_JOIN
+ API_CLIENT -.-> API_LEAVE
+ API_CLIENT -.-> API_MEDIA
+ API_CLIENT -.-> API_MSG
+ API_CLIENT -.-> API_SEND
+
+ CONN_JS -.-> API_CONN
+ CONN_JS -.-> API_UPLOAD
+
+ style API_CALL fill:#bbf,stroke:#333
+ style API_JOIN fill:#bbf,stroke:#333
+ style API_LEAVE fill:#bbf,stroke:#333
+ style API_MEDIA fill:#bbf,stroke:#333
+ style API_MSG fill:#bbf,stroke:#333
+ style API_SEND fill:#bbf,stroke:#333
+ style API_CONN fill:#fbf,stroke:#333
+ style API_UPLOAD fill:#fbf,stroke:#333
+```
+
+---
+
+*文档生成时间: 2026-04-11*
+*适用于 OneByOne 视频通话应用*