mirror of
https://github.com/Shik3i/KoalaSync.git
synced 2026-08-20 08:02:15 +00:00
feat: add server ping display with peer ping foundation
Adds application-level ping/pong between extension and relay server. Extension sends PING every 15s, server echoes PONG. Round-trip time displayed in Status tab (green/yellow/red color-coded). Server also forwards PING with target peerId and routes PONG back, enabling future peer-to-peer ping without server restart. Extension already responds to incoming peer PINGs. See CHANGELOG.md for details.
This commit is contained in:
@@ -657,6 +657,48 @@ io.on('connection', (socket) => {
|
||||
}
|
||||
});
|
||||
|
||||
socket.on(EVENTS.PING, (data) => {
|
||||
if (!checkEventRate(socket.id)) {
|
||||
socket.disconnect(true);
|
||||
return;
|
||||
}
|
||||
if (!data || typeof data.t !== 'number' || !Number.isFinite(data.t)) return;
|
||||
|
||||
if (typeof data.target === 'string' && data.target.length > 0) {
|
||||
const targetSocketId = peerToSocket.get(data.target);
|
||||
const senderMapping = socketToRoom.get(socket.id);
|
||||
if (targetSocketId && senderMapping && data.target !== senderMapping.peerId) {
|
||||
const targetMapping = socketToRoom.get(targetSocketId);
|
||||
if (targetMapping && targetMapping.roomId === senderMapping.roomId) {
|
||||
io.to(targetSocketId).emit(EVENTS.PING, { t: data.t, sender: senderMapping.peerId });
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
socket.emit(EVENTS.PONG, { t: data.t });
|
||||
});
|
||||
|
||||
socket.on(EVENTS.PONG, (data) => {
|
||||
if (!checkEventRate(socket.id)) {
|
||||
socket.disconnect(true);
|
||||
return;
|
||||
}
|
||||
if (!data || typeof data.target !== 'string' || data.target.length === 0) return;
|
||||
if (typeof data.t !== 'number' || !Number.isFinite(data.t)) return;
|
||||
|
||||
const senderMapping = socketToRoom.get(socket.id);
|
||||
if (!senderMapping || data.target === senderMapping.peerId) return;
|
||||
|
||||
const targetSocketId = peerToSocket.get(data.target);
|
||||
if (!targetSocketId) return;
|
||||
|
||||
const targetMapping = socketToRoom.get(targetSocketId);
|
||||
if (targetMapping && targetMapping.roomId === senderMapping.roomId) {
|
||||
io.to(targetSocketId).emit(EVENTS.PONG, { t: data.t });
|
||||
}
|
||||
});
|
||||
|
||||
socket.on('disconnect', () => {
|
||||
eventCounts.delete(socket.id);
|
||||
roomListCooldowns.delete(socket.id);
|
||||
|
||||
Reference in New Issue
Block a user