# Flash Send

跨平台局域网文件传输与聊天应用，基于 Tauri 2 + Vue 3 + Rust 构建。

## 功能特性

- 🔍 **局域网设备发现** - UDP 广播自动发现同一网络内的设备
- 💬 **实时聊天** - WebSocket 实现的低延迟文本消息
- 📁 **文件传输** - HTTPS 加密传输，支持大文件
- 🔒 **安全通信** - TLS 加密所有通信，自签名证书
- 💾 **历史记录** - SQLite 本地存储聊天和传输记录
- 🎨 **现代 UI** - 扁平化设计，参考微信/LocalSend 风格

## 技术栈

### 后端 (Rust)
- **Tauri 2** - 跨平台桌面应用框架
- **Tokio** - 异步运行时
- **Rustls** - TLS 加密
- **Axum** - HTTP 服务
- **tokio-tungstenite** - WebSocket
- **rusqlite** - SQLite 数据库

### 前端 (TypeScript)
- **Vue 3** - 响应式 UI 框架
- **Pinia** - 状态管理
- **Vue Router** - 路由管理
- **TailwindCSS** - 样式框架
- **Lucide Icons** - 图标库

## 项目结构

```
flash-send/
├── src/                    # Vue 前端源码
│   ├── pages/             # 页面组件
│   ├── components/        # UI 组件
│   ├── stores/            # Pinia 状态管理
│   ├── api/               # Tauri API 封装
│   ├── hooks/             # Vue Hooks
│   ├── types/             # TypeScript 类型
│   └── router/            # 路由配置
├── src-tauri/             # Rust 后端源码
│   └── src/
│       ├── discovery/     # UDP 设备发现
│       ├── websocket/     # WebSocket 聊天
│       ├── http/          # HTTP 文件传输
│       ├── tls/           # TLS 加密
│       ├── database/      # SQLite 数据库
│       ├── models/        # 数据模型
│       ├── commands/      # Tauri 命令
│       └── utils/         # 工具函数
└── public/                # 静态资源
```

## 开发环境

### 前置要求
- Node.js 18+
- Rust 1.70+
- pnpm 或 npm

### 安装依赖

```bash
# 安装前端依赖
npm install

# Rust 依赖会在首次构建时自动安装
```

### 开发模式

```bash
npm run tauri dev
```

### 构建发布

```bash
npm run tauri build
```

## 通信协议

### UDP 设备发现 (端口 53317)
```json
{
  "version": 1,
  "device": {
    "deviceId": "uuid",
    "deviceName": "设备名",
    "ip": "192.168.1.100",
    "wsPort": 53318,
    "httpPort": 53319,
    "capabilities": ["text", "image", "file"]
  },
  "packetType": "announce|query|response|goodbye"
}
```

### WebSocket 消息 (端口 53318)
```json
{
  "id": "uuid",
  "type": "text|image|event|ack|ping|pong",
  "content": "消息内容",
  "from": "发送者设备ID",
  "to": "接收者设备ID",
  "timestamp": 1700000000,
  "status": "pending|sent|delivered|read|failed"
}
```

### HTTP 文件传输 (端口 53319)
- `POST /upload` - 上传文件
- `GET /file/:id` - 下载文件
- `GET /file/:id/info` - 获取文件信息
- `GET /health` - 健康检查

## 许可证

MIT License
