fix: 修复 WebRTC 控制稳定性与输入事件重复问题
- 修复安卓端 401 拦截器线程问题,确保 Toast 在主线程执行 - 修复 Web 端按键/触摸重复触发:增加按下状态跟踪,防止悬停触发动作和长按重复 - 修复 Web 端指针取消时未释放触摸状态导致被控端卡死 - 修复 TURN 未启用时返回 401 导致客户端异常登出,改为返回 enabled=false - 修复后台管理端 401 后路由守卫跳转失败 - 增加控制指令调试日志用于排查问题
This commit is contained in:
@@ -391,10 +391,11 @@ curl -X POST https://www.ttstd.com/api/client/pairing/redeem \
|
||||
|
||||
| 方法 | 路径 | 令牌 | 说明 |
|
||||
| --- | --- | --- | --- |
|
||||
| GET | `/api/client/turn-credentials` | 用户/设备 | 返回 `iceServers`(含 urls/username/credential)、`expiresAt`、`ttlSeconds` |
|
||||
| GET | `/api/client/turn-credentials` | 用户/设备 | 返回 `enabled`、`iceServers`(含 urls/username/credential)、`expiresAt`、`ttlSeconds` |
|
||||
|
||||
```json
|
||||
{
|
||||
"enabled": true,
|
||||
"iceServers": [
|
||||
{ "urls": "turn:turn.ttstd.com:3478?transport=udp",
|
||||
"username": "1730000000:ab12cd34ef56",
|
||||
@@ -406,6 +407,7 @@ curl -X POST https://www.ttstd.com/api/client/pairing/redeem \
|
||||
```
|
||||
|
||||
> 客户端应将 `iceServers` 直接传入 `RTCPeerConnection` 配置;凭证过期后重新 GET 本接口刷新。
|
||||
> 服务端未启用 TURN 时返回 200 + `{"enabled": false, "iceServers": []}`(不会返回 401),客户端据此降级为仅 STUN。
|
||||
|
||||
#### 骚扰举报(P2 风控)
|
||||
被控端遭遇骚扰时可举报某主控端账号,管理员在 `/api/admin/abuse-reports` 查看并处理。
|
||||
|
||||
@@ -210,11 +210,24 @@ public class ClientController {
|
||||
|
||||
/**
|
||||
* 获取 TURN 短期凭证(ICE servers)。主控端与被控端在建立 PeerConnection 前调用。
|
||||
*
|
||||
* <p>TURN 未启用时返回 200 + 空 iceServers(enabled=false),而不是 401:
|
||||
* 「服务未开启」并非认证失败,返回 401 会触发各客户端的令牌刷新/强制登出逻辑
|
||||
* (Web/Flutter 会无意义轮换 refreshToken,Android 端 401 拦截器会清理凭据)。
|
||||
*/
|
||||
@GetMapping("/turn-credentials")
|
||||
public Map<String, Object> turnCredentials(HttpServletRequest request) {
|
||||
AuthPrincipal principal = requirePrincipal(request);
|
||||
return turnCredentialService.issue(principal.principalType() + ":" + principal.principalId());
|
||||
if (!turnCredentialService.isEnabled()) {
|
||||
Map<String, Object> body = new LinkedHashMap<>();
|
||||
body.put("enabled", false);
|
||||
body.put("iceServers", List.of());
|
||||
return body;
|
||||
}
|
||||
Map<String, Object> body = new LinkedHashMap<>(
|
||||
turnCredentialService.issue(principal.principalType() + ":" + principal.principalId()));
|
||||
body.put("enabled", true);
|
||||
return body;
|
||||
}
|
||||
|
||||
// ==================== 骚扰举报(P2 风控) ====================
|
||||
|
||||
Reference in New Issue
Block a user