





















@@ -201,7 +201,7 @@ export function attachGatewayWsMessageHandler(params: {
201201isClosed: () => boolean;
202202clearHandshakeTimer: () => void;
203203getClient: () => GatewayWsClient | null;
204-setClient: (next: GatewayWsClient) => void;
204+setClient: (next: GatewayWsClient) => boolean;
205205setHandshakeState: (state: "pending" | "connected" | "failed") => void;
206206setCloseCause: (cause: string, meta?: Record<string, unknown>) => void;
207207setLastFrameMeta: (meta: { type?: string; method?: string; id?: string }) => void;
@@ -1266,39 +1266,12 @@ export function attachGatewayWsMessageHandler(params: {
12661266const instanceId = connectParams.client.instanceId;
12671267const presenceKey = shouldTrackPresence ? (device?.id ?? instanceId ?? connId) : undefined;
126812681269-logWs("in", "connect", {
1270- connId,
1271-client: connectParams.client.id,
1272-clientDisplayName: connectParams.client.displayName,
1273-version: connectParams.client.version,
1274-mode: connectParams.client.mode,
1275- clientId,
1276-platform: connectParams.client.platform,
1277-auth: authMethod,
1278-});
1279-1280-if (isWebchatConnect(connectParams)) {
1281-logWsControl.info(
1282-`webchat connected conn=${connId} remote=${remoteAddr ?? "?"} client=${clientLabel} ${connectParams.client.mode} v${connectParams.client.version}`,
1283-);
1284-}
1285-1286-if (presenceKey) {
1287-upsertPresence(presenceKey, {
1288-host: connectParams.client.displayName ?? connectParams.client.id ?? os.hostname(),
1289-ip: isLocalClient ? undefined : reportedClientIp,
1290-version: connectParams.client.version,
1291-platform: connectParams.client.platform,
1292-deviceFamily: connectParams.client.deviceFamily,
1293-modelIdentifier: connectParams.client.modelIdentifier,
1294-mode: connectParams.client.mode,
1295-deviceId: device?.id,
1296-roles: [role],
1297- scopes,
1298-instanceId: device?.id ?? instanceId,
1299-reason: "connect",
1269+if (isClosed()) {
1270+setCloseCause("connect-aborted-before-register", {
1271+ ...clientMeta,
1272+auth: authMethod,
13001273});
1301-incrementPresenceVersion();
1274+return;
13021275}
1303127613041277const snapshot = buildGatewaySnapshot({
@@ -1367,8 +1340,48 @@ export function attachGatewayWsMessageHandler(params: {
13671340 canvasCapabilityExpiresAtMs,
13681341};
13691342setSocketMaxPayload(socket, MAX_PAYLOAD_BYTES);
1370-setClient(nextClient);
1343+if (!setClient(nextClient)) {
1344+setCloseCause("connect-aborted-before-register", {
1345+ ...clientMeta,
1346+auth: authMethod,
1347+});
1348+return;
1349+}
13711350setHandshakeState("connected");
1351+logWs("in", "connect", {
1352+ connId,
1353+client: connectParams.client.id,
1354+clientDisplayName: connectParams.client.displayName,
1355+version: connectParams.client.version,
1356+mode: connectParams.client.mode,
1357+ clientId,
1358+platform: connectParams.client.platform,
1359+auth: authMethod,
1360+});
1361+1362+if (isWebchatConnect(connectParams)) {
1363+logWsControl.info(
1364+`webchat connected conn=${connId} remote=${remoteAddr ?? "?"} client=${clientLabel} ${connectParams.client.mode} v${connectParams.client.version}`,
1365+);
1366+}
1367+1368+if (presenceKey) {
1369+upsertPresence(presenceKey, {
1370+host: connectParams.client.displayName ?? connectParams.client.id ?? os.hostname(),
1371+ip: isLocalClient ? undefined : reportedClientIp,
1372+version: connectParams.client.version,
1373+platform: connectParams.client.platform,
1374+deviceFamily: connectParams.client.deviceFamily,
1375+modelIdentifier: connectParams.client.modelIdentifier,
1376+mode: connectParams.client.mode,
1377+deviceId: device?.id,
1378+roles: [role],
1379+ scopes,
1380+instanceId: device?.id ?? instanceId,
1381+reason: "connect",
1382+});
1383+incrementPresenceVersion();
1384+}
13721385if (role === "node") {
13731386const context = buildRequestContext();
13741387const nodeSession = context.nodeRegistry.register(nextClient, {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。