fix duplicate tab issue
This commit is contained in:
parent
ab4e05be34
commit
b11328160a
@ -300,10 +300,7 @@ export const applyEvent = async (event, socket) => {
|
|||||||
|
|
||||||
// Send the event to the server.
|
// Send the event to the server.
|
||||||
if (socket) {
|
if (socket) {
|
||||||
socket.emit(
|
socket.emit("event", event);
|
||||||
"event",
|
|
||||||
event,
|
|
||||||
);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -408,9 +405,10 @@ export const connect = async (
|
|||||||
path: endpoint["pathname"],
|
path: endpoint["pathname"],
|
||||||
transports: transports,
|
transports: transports,
|
||||||
autoUnref: false,
|
autoUnref: false,
|
||||||
|
query: { token: getToken() },
|
||||||
});
|
});
|
||||||
// Ensure undefined fields in events are sent as null instead of removed
|
// Ensure undefined fields in events are sent as null instead of removed
|
||||||
socket.current.io.encoder.replacer = (k, v) => (v === undefined ? null : v)
|
socket.current.io.encoder.replacer = (k, v) => (v === undefined ? null : v);
|
||||||
|
|
||||||
function checkVisibility() {
|
function checkVisibility() {
|
||||||
if (document.visibilityState === "visible") {
|
if (document.visibilityState === "visible") {
|
||||||
@ -461,6 +459,10 @@ export const connect = async (
|
|||||||
event_processing = false;
|
event_processing = false;
|
||||||
queueEvents([...initialEvents(), event], socket);
|
queueEvents([...initialEvents(), event], socket);
|
||||||
});
|
});
|
||||||
|
socket.current.on("new_token", async (new_token) => {
|
||||||
|
token = new_token;
|
||||||
|
window.sessionStorage.setItem(TOKEN_KEY, new_token);
|
||||||
|
});
|
||||||
|
|
||||||
document.addEventListener("visibilitychange", checkVisibility);
|
document.addEventListener("visibilitychange", checkVisibility);
|
||||||
};
|
};
|
||||||
@ -488,7 +490,7 @@ export const uploadFiles = async (
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
const upload_ref_name = `__upload_controllers_${upload_id}`
|
const upload_ref_name = `__upload_controllers_${upload_id}`;
|
||||||
|
|
||||||
if (refs[upload_ref_name]) {
|
if (refs[upload_ref_name]) {
|
||||||
console.log("Upload already in progress for ", upload_id);
|
console.log("Upload already in progress for ", upload_id);
|
||||||
|
@ -15,6 +15,7 @@ import multiprocessing
|
|||||||
import platform
|
import platform
|
||||||
import sys
|
import sys
|
||||||
import traceback
|
import traceback
|
||||||
|
import uuid
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from types import SimpleNamespace
|
from types import SimpleNamespace
|
||||||
@ -1528,14 +1529,18 @@ class EventNamespace(AsyncNamespace):
|
|||||||
self.sid_to_token = {}
|
self.sid_to_token = {}
|
||||||
self.app = app
|
self.app = app
|
||||||
|
|
||||||
def on_connect(self, sid, environ):
|
async def on_connect(self, sid, environ):
|
||||||
"""Event for when the websocket is connected.
|
"""Event for when the websocket is connected.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
sid: The Socket.IO session id.
|
sid: The Socket.IO session id.
|
||||||
environ: The request information, including HTTP headers.
|
environ: The request information, including HTTP headers.
|
||||||
"""
|
"""
|
||||||
pass
|
query_string = environ.get("QUERY_STRING")
|
||||||
|
query_params = dict(
|
||||||
|
qc.split("=") for qc in query_string.split("&") if "=" in qc
|
||||||
|
)
|
||||||
|
await self.link_token_to_sid(sid, query_params.get("token"))
|
||||||
|
|
||||||
def on_disconnect(self, sid):
|
def on_disconnect(self, sid):
|
||||||
"""Event for when the websocket disconnects.
|
"""Event for when the websocket disconnects.
|
||||||
@ -1575,9 +1580,6 @@ class EventNamespace(AsyncNamespace):
|
|||||||
**{k: v for k, v in fields.items() if k not in ("handler", "event_actions")}
|
**{k: v for k, v in fields.items() if k not in ("handler", "event_actions")}
|
||||||
)
|
)
|
||||||
|
|
||||||
self.token_to_sid[event.token] = sid
|
|
||||||
self.sid_to_token[sid] = event.token
|
|
||||||
|
|
||||||
# Get the event environment.
|
# Get the event environment.
|
||||||
if self.app.sio is None:
|
if self.app.sio is None:
|
||||||
raise RuntimeError("Socket.IO is not initialized.")
|
raise RuntimeError("Socket.IO is not initialized.")
|
||||||
@ -1610,3 +1612,17 @@ class EventNamespace(AsyncNamespace):
|
|||||||
"""
|
"""
|
||||||
# Emit the test event.
|
# Emit the test event.
|
||||||
await self.emit(str(constants.SocketEvent.PING), "pong", to=sid)
|
await self.emit(str(constants.SocketEvent.PING), "pong", to=sid)
|
||||||
|
|
||||||
|
async def link_token_to_sid(self, sid, token):
|
||||||
|
"""Link a token to a session id.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
sid: The Socket.IO session id.
|
||||||
|
token: The client token.
|
||||||
|
"""
|
||||||
|
if token in self.sid_to_token.values() and sid != self.token_to_sid.get(token):
|
||||||
|
token = uuid.uuid4().hex
|
||||||
|
await self.emit("new_token", token, to=sid)
|
||||||
|
|
||||||
|
self.token_to_sid[token] = sid
|
||||||
|
self.sid_to_token[sid] = token
|
||||||
|
Loading…
Reference in New Issue
Block a user