Api v1.15.0 (#1602)

* refactor(assist): optimized assist
* refactor(assist): defined a server-update event
This commit is contained in:
Kraiem Taha Yassine 2023-11-01 22:31:33 +01:00 committed by GitHub
parent c95a5f4254
commit 52d1d1baeb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 52 additions and 25 deletions

View file

@ -11,6 +11,10 @@ const EVENTS_DEFINITION = {
CONNECT_ERROR: "connect_error",
CONNECT_FAILED: "connect_failed",
ERROR: "error"
},
//The following list of events will be only emitted by the server
server: {
UPDATE_SESSION: "SERVER_UPDATE_SESSION"
}
};
EVENTS_DEFINITION.emit = {

View file

@ -38,10 +38,10 @@ const findSessionSocketId = async (io, roomId, tabId) => {
async function sessions_agents_count(io, socket) {
let c_sessions = 0, c_agents = 0;
const rooms = await getAvailableRooms(io);
if (rooms.get(socket.roomId)) {
// const rooms = await getAvailableRooms(io);
// if (rooms.get(socket.roomId)) {
const connected_sockets = await io.in(socket.roomId).fetchSockets();
if (connected_sockets.length > 0) {
for (let item of connected_sockets) {
if (item.handshake.query.identity === IDENTITIES.session) {
c_sessions++;
@ -58,15 +58,15 @@ async function sessions_agents_count(io, socket) {
async function get_all_agents_ids(io, socket) {
let agents = [];
const rooms = await getAvailableRooms(io);
if (rooms.get(socket.roomId)) {
// const rooms = await getAvailableRooms(io);
// if (rooms.get(socket.roomId)) {
const connected_sockets = await io.in(socket.roomId).fetchSockets();
for (let item of connected_sockets) {
if (item.handshake.query.identity === IDENTITIES.agent) {
agents.push(item.id);
}
}
}
// }
return agents;
}
@ -121,11 +121,16 @@ async function onConnect(socket) {
io.to(socket.id).emit(EVENTS_DEFINITION.emit.NO_SESSIONS);
}
await socket.join(socket.roomId);
const rooms = await getAvailableRooms(io);
if (rooms.has(socket.roomId)) {
// const rooms = await getAvailableRooms(io);
// if (rooms.has(socket.roomId)) {
// let connectedSockets = await io.in(socket.roomId).fetchSockets();
// debug_log && console.log(`${socket.id} joined room:${socket.roomId}, as:${socket.identity}, members:${connectedSockets.length}`);
// }
let connectedSockets = await io.in(socket.roomId).fetchSockets();
if (connectedSockets.length > 0) {
debug_log && console.log(`${socket.id} joined room:${socket.roomId}, as:${socket.identity}, members:${connectedSockets.length}`);
}
if (socket.identity === IDENTITIES.agent) {
if (socket.handshake.query.agentInfo !== undefined) {
socket.handshake.query.agentInfo = JSON.parse(socket.handshake.query.agentInfo);
@ -142,6 +147,9 @@ async function onConnect(socket) {
// Handle update event
socket.on(EVENTS_DEFINITION.listen.UPDATE_EVENT, (...args) => onUpdateEvent(socket, ...args));
// Handle server update event
socket.on(EVENTS_DEFINITION.server.UPDATE_SESSION, (...args) => onUpdateServerEvent(socket, ...args));
// Handle errors
socket.on(EVENTS_DEFINITION.listen.ERROR, err => errorHandler(EVENTS_DEFINITION.listen.ERROR, err));
socket.on(EVENTS_DEFINITION.listen.CONNECT_ERROR, err => errorHandler(EVENTS_DEFINITION.listen.CONNECT_ERROR, err));
@ -186,19 +194,34 @@ async function onUpdateEvent(socket, ...args) {
args[0] = {meta: {tabId: socket.tabId, version: 1}, data: args[0]};
}
Object.assign(socket.handshake.query.sessionInfo, args[0].data, {tabId: args[0]?.meta?.tabId});
socket.to(socket.roomId).emit(EVENTS_DEFINITION.emit.UPDATE_EVENT, args[0]);
// socket.to(socket.roomId).emit(EVENTS_DEFINITION.emit.UPDATE_EVENT, args[0]);
socket.to(socket.roomId).emit(EVENTS_DEFINITION.server.UPDATE_SESSION, args[0]);
// Update sessionInfo for all sessions in room
const rooms = await getAvailableRooms(io);
for (let roomId of rooms.keys()) {
if (roomId === socket.roomId) {
const connected_sockets = await io.in(roomId).fetchSockets();
// const rooms = await getAvailableRooms(io);
// for (let roomId of rooms.keys()) {
// if (roomId === socket.roomId) {
// const connected_sockets = await io.in(roomId).fetchSockets();
const connected_sockets = await io.in(socket.roomId).fetchSockets();
for (let item of connected_sockets) {
if (item.handshake.query.identity === IDENTITIES.session && item.handshake.query.sessionInfo) {
Object.assign(item.handshake.query.sessionInfo, args[0]?.data, {tabId: args[0]?.meta?.tabId});
}
}
// }
// }
}
async function onUpdateServerEvent(socket, ...args) {
debug_log && console.log(`Server sent update event through ${socket.id}.`);
if (socket.identity !== IDENTITIES.session) {
debug_log && console.log('Ignoring server update event.');
return
}
// Back compatibility (add top layer with meta information)
if (args[0]?.meta === undefined && socket.identity === IDENTITIES.session) {
args[0] = {meta: {tabId: socket.tabId, version: 1}, data: args[0]};
}
Object.assign(socket.handshake.query.sessionInfo, args[0].data, {tabId: args[0]?.meta?.tabId});
}
async function onAny(socket, eventName, ...args) {