feat: 完成v10.1.0版本大更新,新增密保系统、勋章、任务、排行榜等功能

### 变更详情
1. 新增密保问题系统,支持8种预置验证问题,多场景支持多验证方式
2. 新增勋章管理模块,包含勋章配置、用户勋章关联管理
3. 新增每日任务系统,支持任务配置和用户进度追踪
4. 新增赛季排行榜功能,支持周/月赛季排行与奖励结算
5. 新增信息流推荐权重配置管理
6. 重构服务路径分层,按设备/网络/数据分类管理服务
7. 优化Feed请求参数截断逻辑,避免URL过长
8. 新增等级工具类,统一处理等级颜色与称号展示
9. 新增屏幕共享共享信令Provider,复用传输服务实例
10. 新增Android/iOS分享适配与桌面小组件支持
11. 清理旧版测试脚本,新增部署维护脚本
12. 完善用户注销关联数据清理逻辑
This commit is contained in:
Developer
2026-05-15 07:02:56 +08:00
parent 228095f80a
commit fc6fd7be0e
264 changed files with 24783 additions and 6267 deletions

View File

@@ -63,6 +63,13 @@ class SnapdropServer {
peer.socket.on('error', console.error);
this._keepAlive(peer);
this._send(peer, {
type: 'registered',
id: peer.id,
fingerprint: peer.fingerprint || '',
userId: peer.userId || ''
});
this._send(peer, {
type: 'display-name',
message: {
@@ -118,6 +125,17 @@ class SnapdropServer {
break;
case 'heartbeat':
sender.lastBeat = Date.now();
this._send(sender, {
type: 'heartbeat_ack',
timestamp: Date.now()
});
break;
case 'discover':
this._handleDiscover(sender, message);
break;
case 'ping':
sender.lastBeat = Date.now();
this._send(sender, { type: 'pong', timestamp: Date.now() });
break;
case 'textMessage':
this._handleTextMessage(sender, message);
@@ -142,7 +160,7 @@ class SnapdropServer {
break;
}
const handledTypes = ['disconnect', 'pong', 'register', 'discoverMyDevices', 'transportNegotiate', 'wsRelay', 'pair-request', 'pairRequest', 'pair-accept', 'pairAccept', 'pair-reject', 'pairReject', 'heartbeat', 'textMessage', 'fileMeta', 'canvas-stroke', 'canvas-cursor', 'canvas-join', 'canvas-leave', 'canvas-snapshot'];
const handledTypes = ['disconnect', 'pong', 'register', 'discoverMyDevices', 'discover', 'transportNegotiate', 'wsRelay', 'pair-request', 'pairRequest', 'pair-accept', 'pairAccept', 'pair-reject', 'pairReject', 'heartbeat', 'ping', 'textMessage', 'fileMeta', 'canvas-stroke', 'canvas-cursor', 'canvas-join', 'canvas-leave', 'canvas-snapshot'];
if (message.to && !handledTypes.includes(message.type)) {
let recipientId = message.to;
let recipient = this._resolveTarget(sender, recipientId);
@@ -208,6 +226,22 @@ class SnapdropServer {
});
}
_handleDiscover(sender, message) {
const allPeers = [];
for (const roomId in this._rooms) {
for (const peerId in this._rooms[roomId]) {
const peer = this._rooms[roomId][peerId];
if (peer.id !== sender.id) {
allPeers.push(peer.getInfo());
}
}
}
this._send(sender, {
type: 'discover_response',
devices: allPeers
});
}
_handleDiscoverMyDevices(sender, message) {
const payload = message.payload || message.data || {};
const userId = payload.userId || message.userId || sender.userId;