99 lines
2.2 KiB
Rust
99 lines
2.2 KiB
Rust
//! # Protocol - 通信协议定义
|
|
//!
|
|
//! 定义 Client 和 Server 之间的所有通信协议。
|
|
|
|
use crate::audio::config::AudioConfig;
|
|
use crate::net::command::{Command, CommandResult};
|
|
use crate::net::event::{ClientEvent, ServerEvent};
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
// ==================== 基础类型 ====================
|
|
|
|
/// 客户端信息
|
|
#[derive(Serialize, Deserialize, Debug, Clone)]
|
|
pub struct ClientInfo {
|
|
pub model: String,
|
|
pub serial_number: String,
|
|
}
|
|
|
|
/// 音频数据包 - UDP 通道传输
|
|
#[derive(Serialize, Deserialize, Debug, Clone)]
|
|
pub struct AudioPacket {
|
|
/// Opus 编码的音频数据
|
|
pub data: Vec<u8>,
|
|
}
|
|
|
|
// ==================== 控制包 ====================
|
|
|
|
/// 控制包 - TCP 通道传输的所有消息类型
|
|
#[derive(Serialize, Deserialize, Debug, Clone)]
|
|
pub enum ControlPacket {
|
|
// ========== 服务发现 ==========
|
|
/// 服务发现广播
|
|
Discovery {
|
|
protocol: String,
|
|
port: u16,
|
|
},
|
|
|
|
// ========== 握手 ==========
|
|
/// 服务端握手
|
|
ServerHello {
|
|
auth: String,
|
|
version: String,
|
|
udp_port: u16,
|
|
},
|
|
/// 客户端握手
|
|
ClientHello {
|
|
auth: String,
|
|
version: String,
|
|
udp_port: u16,
|
|
info: ClientInfo,
|
|
},
|
|
|
|
// ========== 心跳 ==========
|
|
Ping,
|
|
Pong,
|
|
|
|
// ========== RPC ==========
|
|
/// RPC 请求(新版,使用 Command 类型)
|
|
RpcRequest {
|
|
id: u32,
|
|
command: Command,
|
|
},
|
|
/// RPC 响应(新版,使用 CommandResult 类型)
|
|
RpcResponse {
|
|
id: u32,
|
|
result: CommandResult,
|
|
},
|
|
|
|
// ========== 事件 ==========
|
|
/// 服务端事件推送
|
|
ServerEvent(ServerEvent),
|
|
/// 客户端事件推送
|
|
ClientEvent(ClientEvent),
|
|
|
|
// ========== 订阅管理 ==========
|
|
/// 订阅事件类型
|
|
Subscribe {
|
|
event_types: Vec<String>,
|
|
},
|
|
/// 取消订阅
|
|
Unsubscribe {
|
|
event_types: Vec<String>,
|
|
},
|
|
|
|
// ========== 音频控制 ==========
|
|
/// 开始录音
|
|
StartRecording {
|
|
config: AudioConfig,
|
|
},
|
|
/// 停止录音
|
|
StopRecording,
|
|
/// 开始播放
|
|
StartPlayback {
|
|
config: AudioConfig,
|
|
},
|
|
/// 停止播放
|
|
StopPlayback,
|
|
}
|