# Chat-Room 客户端文档
## 📋 概述
Chat-Room客户端提供了现代化的TUI界面和简单的命令行界面,支持实时聊天、文件传输、AI对话等功能。客户端采用模块化设计,界面与业务逻辑分离,易于扩展和维护。
## 🏗️ 客户端架构
### 架构组件图
```mermaid
graph TB
subgraph "用户界面层"
TUI[TUI应用
Textual界面]
SIMPLE[简单客户端
命令行界面]
end
subgraph "命令处理层"
PARSER[命令解析器
CommandParser]
HANDLER[命令处理器
CommandHandler]
end
subgraph "网络通信层"
CLIENT[聊天客户端
ChatClient]
PROTOCOL[协议处理器
ProtocolHandler]
end
subgraph "配置管理层"
CONFIG[配置管理器
ClientConfig]
THEME[主题管理器
ThemeManager]
end
TUI --> PARSER
SIMPLE --> PARSER
PARSER --> HANDLER
HANDLER --> CLIENT
CLIENT --> PROTOCOL
TUI --> CONFIG
TUI --> THEME
CLIENT --> CONFIG
```
### 客户端启动流程
```mermaid
flowchart TD
START([客户端启动]) --> PARSE_ARGS[解析命令行参数]
PARSE_ARGS --> LOAD_CONFIG[加载客户端配置]
LOAD_CONFIG --> INIT_CLIENT[初始化聊天客户端]
INIT_CLIENT --> CHOOSE_MODE{选择界面模式}
CHOOSE_MODE -->|TUI模式| INIT_TUI[初始化TUI界面]
CHOOSE_MODE -->|简单模式| INIT_SIMPLE[初始化简单界面]
INIT_TUI --> LOAD_THEME[加载界面主题]
LOAD_THEME --> START_TUI[启动TUI应用]
START_TUI --> TUI_LOOP[TUI事件循环]
INIT_SIMPLE --> SIMPLE_LOOP[简单界面循环]
TUI_LOOP --> HANDLE_INPUT[处理用户输入]
SIMPLE_LOOP --> HANDLE_INPUT
HANDLE_INPUT --> PARSE_CMD[解析命令]
PARSE_CMD --> EXECUTE_CMD[执行命令]
EXECUTE_CMD --> UPDATE_UI[更新界面]
UPDATE_UI --> TUI_LOOP
UPDATE_UI --> SIMPLE_LOOP
```
## 🖥️ TUI界面模块
### 主应用类 (client/ui/app.py)
```python
class ChatApp(App):
"""Chat-Room TUI主应用"""
CSS_PATH = "themes/default.css"
TITLE = "Chat-Room 聊天室"
def compose(self) -> ComposeResult:
"""构建界面布局"""
yield Header()
with Horizontal():
yield ChatLog(id="chat_log")
yield StatusPanel(id="status_panel")
yield InputBox(id="input_box")
yield Footer()
```
### 界面组件
#### 1. 聊天日志组件 (client/ui/components/chat_log.py)
```mermaid
classDiagram
class ChatLog {
+messages: List[Message]
+max_messages: int
+auto_scroll: bool
+add_message(message)
+clear_messages()
+scroll_to_bottom()
+format_message(message)
}
class Message {
+user: str
+content: str
+timestamp: datetime
+message_type: str
+group: str
}
ChatLog --> Message : contains
```
**主要功能**:
- 显示聊天消息历史
- 自动滚动到最新消息
- 支持消息格式化和高亮
- 支持不同消息类型显示
#### 2. 状态面板组件 (client/ui/components/status_panel.py)
```python
class StatusPanel(Widget):
"""状态面板组件"""
def __init__(self):
super().__init__()
self.current_user = None
self.current_group = None
self.online_users = []
self.connection_status = "未连接"
def update_user_info(self, user_info: dict):
"""更新用户信息"""
def update_group_info(self, group_info: dict):
"""更新聊天组信息"""
def update_online_users(self, users: List[dict]):
"""更新在线用户列表"""
```
#### 3. 输入框组件 (client/ui/components/input_box.py)
```python
class InputBox(Widget):
"""输入框组件"""
def __init__(self):
super().__init__()
self.command_history = []
self.history_index = 0
self.auto_complete = True
def on_key(self, event: events.Key) -> None:
"""处理按键事件"""
def handle_enter(self):
"""处理回车键"""
def handle_tab(self):
"""处理Tab键自动补全"""
```
### 主题系统
#### 主题配置 (client/ui/themes/)
```mermaid
graph LR
subgraph "主题文件"
DEFAULT[default.css
默认主题]
DARK[dark.css
深色主题]
TERMINAL[terminal.css
终端主题]
end
subgraph "主题管理器"
MANAGER[ThemeManager
主题管理器]
end
DEFAULT --> MANAGER
DARK --> MANAGER
TERMINAL --> MANAGER
MANAGER --> APP[ChatApp
应用界面]
```
**主题特性**:
- 支持多种预设主题
- 动态切换主题
- 自定义颜色方案
- 响应式布局
## 🔧 命令处理模块
### 命令解析器 (client/commands/parser.py)
```python
class CommandParser:
"""命令解析器"""
def __init__(self):
self.commands = self._load_commands()
self.aliases = self._load_aliases()
def parse(self, input_text: str) -> Command:
"""解析用户输入"""
def get_suggestions(self, partial_input: str) -> List[str]:
"""获取命令建议"""
def validate_command(self, command: Command) -> Tuple[bool, str]:
"""验证命令参数"""
```
### 支持的命令
```mermaid
mindmap
root((聊天室命令))
基础命令
/?
/help
/login
/signin
/info
/exit
信息查询
/list -u
/list -s
/list -c
/list -g
/list -f
聊天组管理
/create_chat
/join_chat
/enter_chat
文件传输
/send_files
/recv_files
AI功能
@AI
AI关键词
```
### 命令执行流程
```mermaid
sequenceDiagram
participant UI as 用户界面
participant P as 命令解析器
participant H as 命令处理器
participant C as 聊天客户端
participant S as 服务器
UI->>P: 用户输入命令
P->>P: 解析命令和参数
P->>H: 传递解析结果
H->>H: 验证命令权限
H->>C: 调用客户端方法
C->>S: 发送网络请求
S-->>C: 返回响应
C-->>H: 返回执行结果
H-->>UI: 更新界面显示
```
## 🌐 网络通信模块
### 聊天客户端 (client/core/client.py)
```python
class ChatClient:
"""聊天客户端核心类"""
def __init__(self, host: str, port: int):
self.host = host
self.port = port
self.socket = None
self.connected = False
self.user_info = None
self.message_handlers = {}
def connect(self) -> bool:
"""连接到服务器"""
def disconnect(self) -> None:
"""断开服务器连接"""
def send_message(self, message_type: str, data: dict) -> bool:
"""发送消息到服务器"""
def receive_messages(self) -> None:
"""接收服务器消息(后台线程)"""
```
### 消息处理机制
```mermaid
graph TD
RECV[接收消息线程] --> PARSE[解析消息格式]
PARSE --> ROUTE[消息路由]
ROUTE --> CHAT[聊天消息]
ROUTE --> SYSTEM[系统消息]
ROUTE --> FILE[文件消息]
ROUTE --> AI[AI消息]
ROUTE --> ERROR[错误消息]
CHAT --> UPDATE_CHAT[更新聊天界面]
SYSTEM --> UPDATE_STATUS[更新状态面板]
FILE --> UPDATE_FILES[更新文件列表]
AI --> UPDATE_CHAT
ERROR --> SHOW_ERROR[显示错误信息]
```
### 协议处理器 (client/core/protocol.py)
```python
class ProtocolHandler:
"""协议处理器"""
def encode_message(self, message_type: str, data: dict) -> bytes:
"""编码消息为网络传输格式"""
def decode_message(self, raw_data: bytes) -> dict:
"""解码网络消息"""
def validate_message(self, message: dict) -> bool:
"""验证消息格式"""
```
## ⚙️ 配置管理
### 客户端配置 (config/client_config.yaml)
```yaml
# 客户端基础配置
client:
default_host: "localhost"
default_port: 8888
auto_connect: false
reconnect_attempts: 3
reconnect_delay: 5
# 界面配置
ui:
mode: "tui" # tui 或 simple
theme: "default" # default, dark, terminal
auto_scroll: true
max_chat_history: 1000
show_timestamps: true
show_user_status: true
# 文件传输配置
file_transfer:
download_dir: "client/Downloads"
auto_create_dirs: true
confirm_downloads: true
max_concurrent_downloads: 3
# 快捷键配置
keybindings:
send_message: "enter"
new_line: "shift+enter"
command_history_up: "up"
command_history_down: "down"
auto_complete: "tab"
quit: "ctrl+c"
# 日志配置
logging:
level: "INFO"
file: "logs/client/client.log"
max_size: 5242880 # 5MB
backup_count: 3
```
### 配置管理器 (client/config/client_config.py)
```python
class ClientConfig:
"""客户端配置管理器"""
def __init__(self, config_path: str = "config/client_config.yaml"):
self.config_path = config_path
self.config = self._load_config()
def get(self, key: str, default=None):
"""获取配置值"""
def set(self, key: str, value):
"""设置配置值"""
def save(self):
"""保存配置到文件"""
```
## 🚀 启动和使用
### 启动客户端
```bash
# TUI模式(默认)
python -m client.main
# 简单命令行模式
python -m client.main --mode simple
# 连接到指定服务器
python -m client.main --host 192.168.1.100 --port 9999
# 使用指定配置文件
python -m client.main --config config/my_client.yaml
```
### 命令行参数
- `--host`: 服务器地址(默认: localhost)
- `--port`: 服务器端口(默认: 8888)
- `--mode`: 界面模式(tui/simple,默认: tui)
- `--theme`: 界面主题(default/dark/terminal)
- `--config`: 配置文件路径
### 使用示例
#### 基本聊天流程
```
1. 启动客户端: python -m client.main
2. 注册用户: /signin
3. 登录系统: /login
4. 查看帮助: /?
5. 开始聊天: 直接输入消息
6. 退出系统: /exit
```
#### 文件传输
```
# 发送文件
/send_files document.pdf image.jpg
# 查看文件列表
/recv_files -l
# 下载文件
/recv_files -n document.pdf
```
#### AI对话
```
# 群聊中@AI
@AI 你好,请介绍一下Python
# 使用AI关键词
AI能帮我写个函数吗?
# 私聊AI
/enter_chat private_with_ai
你好,这是私聊消息
```
这个客户端文档提供了完整的客户端架构、界面组件、命令系统和使用指南,帮助用户理解和使用Chat-Room客户端。