The communications platform that puts data protection first.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
Rocket.Chat/app/livechat/server/lib/stream/agentStatus.ts

75 lines
1.6 KiB

import { Meteor } from 'meteor/meteor';
import { Livechat } from '../Livechat';
import { settings } from '../../../../settings/server';
export let monitorAgents = false;
let actionTimeout = 60000;
let action = 'none';
let comment = '';
settings.get('Livechat_agent_leave_action_timeout', (_key, value) => {
if (typeof value !== 'number') {
return;
}
actionTimeout = value * 1000;
});
settings.get('Livechat_agent_leave_action', (_key, value) => {
monitorAgents = value !== 'none';
action = value as string;
});
settings.get('Livechat_agent_leave_comment', (_key, value) => {
if (typeof value !== 'string') {
return;
}
comment = value;
});
export const onlineAgents = {
users: new Set(),
queue: new Map(),
add(userId: string): void {
if (this.exists(userId)) {
return;
}
if (this.queue.has(userId)) {
clearTimeout(this.queue.get(userId));
this.queue.delete(userId);
}
this.users.add(userId);
},
remove(userId: string): void {
if (!this.exists(userId)) {
return;
}
this.users.delete(userId);
if (this.queue.has(userId)) {
clearTimeout(this.queue.get(userId));
}
this.queue.set(userId, setTimeout(this.runAgentLeaveAction, actionTimeout, userId));
},
exists(userId: string): boolean {
return this.users.has(userId);
},
runAgentLeaveAction: Meteor.bindEnvironment((userId: string) => {
onlineAgents.users.delete(userId);
onlineAgents.queue.delete(userId);
if (action === 'close') {
return Livechat.closeOpenChats(userId, comment);
}
if (action === 'forward') {
return Livechat.forwardOpenChats(userId);
}
}),
};