update:修复日志和防抖
This commit is contained in:
+41
-14
@@ -159,7 +159,6 @@ function emitBusinessMessage(message) {
|
||||
scheduleReadyRouteFallback(message);
|
||||
}
|
||||
|
||||
console.log("[match-ws] emit socket-inbox", message.matchWsTypeName, message);
|
||||
uni.$emit("socket-inbox", message);
|
||||
}
|
||||
|
||||
@@ -223,6 +222,13 @@ function getAckAudioKeys(message, businessMessage) {
|
||||
}
|
||||
}
|
||||
|
||||
function shouldCloseAfterAck(message) {
|
||||
return (
|
||||
message.type === ServerMessageType.SERVER_MSG_MATCH_END ||
|
||||
message.type === ServerMessageType.SERVER_MSG_TIMEOUT
|
||||
);
|
||||
}
|
||||
|
||||
// 追加 token 查询参数;如果后端地址已经带 token,则保持原样。
|
||||
function appendQuery(url, key, value) {
|
||||
if (!value || new RegExp(`[?&]${key}=`).test(url)) return url;
|
||||
@@ -251,32 +257,47 @@ function normalizeServerUrl(serverAddr, token) {
|
||||
}
|
||||
|
||||
// 统一发送二进制 protobuf 消息,并在日志里保留发送类型。
|
||||
function sendBuffer(buffer, label) {
|
||||
function sendBuffer(buffer, label, clientMessage) {
|
||||
if (!socket || !buffer) return;
|
||||
|
||||
const currentSocket = socket;
|
||||
currentSocket.send({
|
||||
data: buffer,
|
||||
success: () => {
|
||||
if (label === "heartbeat ack") return;
|
||||
console.log(`[match-ws] ${label} sent`, new Date());
|
||||
console.log("发送比赛服 WebSocket 消息", label, clientMessage);
|
||||
},
|
||||
fail: (err) => {
|
||||
if (socket !== currentSocket) return;
|
||||
console.log(`[match-ws] ${label} send failed`, err);
|
||||
console.log("比赛服 WebSocket 消息发送失败", label, clientMessage, err);
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
function sendHeartbeatAck() {
|
||||
// 心跳 ACK 不进入 pendingAcks,收到后立即回复。
|
||||
sendBuffer(createHeartbeatAckMessage(), "heartbeat ack");
|
||||
const clientMessage = {
|
||||
type: ClientMessageType.CLIENT_MSG_HEARTBEAT_ACK,
|
||||
};
|
||||
sendBuffer(
|
||||
createHeartbeatAckMessage(),
|
||||
"CLIENT_MSG_HEARTBEAT_ACK",
|
||||
clientMessage
|
||||
);
|
||||
}
|
||||
|
||||
function sendAck({ matchId, sequence }) {
|
||||
// sequence 由后端处理,前端只原样带回,不做重排和断线补发。
|
||||
if (sequence === undefined || sequence === null || sequence === "") return;
|
||||
sendBuffer(createAckMessage({ matchId, sequence }), `ack ${sequence}`);
|
||||
const clientMessage = {
|
||||
type: ClientMessageType.CLIENT_MSG_ACK,
|
||||
match_id: matchId,
|
||||
sequence,
|
||||
};
|
||||
sendBuffer(
|
||||
createAckMessage({ matchId, sequence }),
|
||||
"CLIENT_MSG_ACK",
|
||||
clientMessage
|
||||
);
|
||||
}
|
||||
|
||||
function completeAckTask(task) {
|
||||
@@ -348,7 +369,7 @@ function queueAckAfterAudio(message, businessMessage) {
|
||||
pickField(message, "matchId", "match_id") || currentContext?.matchId
|
||||
),
|
||||
sequence: message.sequence,
|
||||
leaveAfterAck: message.type === ServerMessageType.SERVER_MSG_MATCH_END,
|
||||
leaveAfterAck: shouldCloseAfterAck(message),
|
||||
};
|
||||
|
||||
const audioKeys = getAckAudioKeys(message, businessMessage).filter(Boolean);
|
||||
@@ -394,9 +415,6 @@ function handleMessage(data) {
|
||||
return;
|
||||
}
|
||||
|
||||
const typeName = getServerMessageTypeName(message.type);
|
||||
console.log("[match-ws] message decoded", typeName, message);
|
||||
|
||||
const decodedMatchId = normalizeId(pickField(message, "matchId", "match_id"));
|
||||
if (decodedMatchId && currentContext) {
|
||||
currentContext.matchId = decodedMatchId;
|
||||
@@ -407,6 +425,9 @@ function handleMessage(data) {
|
||||
return;
|
||||
}
|
||||
|
||||
const typeName = getServerMessageTypeName(message.type);
|
||||
console.log("收到比赛服 WebSocket 消息", typeName, message);
|
||||
|
||||
const businessMessage = buildBusinessMessage(message);
|
||||
if (businessMessage?.matchId && currentContext) {
|
||||
currentContext.matchId = businessMessage.matchId;
|
||||
@@ -418,12 +439,18 @@ function handleMessage(data) {
|
||||
function sendLeave() {
|
||||
// 主动关闭、比赛结束、页面离开时发 CLIENT_MSG_LEAVE。
|
||||
if (!socket || !currentContext?.matchId) return;
|
||||
const clientMessage = {
|
||||
type: ClientMessageType.CLIENT_MSG_LEAVE,
|
||||
match_id: currentContext.matchId,
|
||||
user_id: currentContext.userId,
|
||||
};
|
||||
sendBuffer(
|
||||
createLeaveMessage({
|
||||
matchId: currentContext.matchId,
|
||||
userId: currentContext.userId,
|
||||
matchId: clientMessage.match_id,
|
||||
userId: clientMessage.user_id,
|
||||
}),
|
||||
"leave"
|
||||
"CLIENT_MSG_LEAVE",
|
||||
clientMessage
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user