Files
pixel-streaming-session-server/src/modules/session_observer.js
T

61 lines
1.8 KiB
JavaScript

const run_process = require('../modules/run_process')
const database = require('../database/database')
const {is_proc_running, kill_proc} = require('./run_process')
const coordinator = require('./coordinator')
const wait_list = require('./wait_list')
const observer_timeout = 100
var pending_list = new wait_list([])
const start_observer = () => {
check()
setTimeout(() => start_observer(), observer_timeout)
}
// check sessions in parallel
const check_sessions = async (sessions) => {
await Promise.all(sessions.map(async (session) => {
var webrtc_running = is_proc_running(session.webrtc_pid)
var app_running = is_proc_running(session.app_pid)
if (webrtc_running && app_running) {
return
}
// if something running kill process and skip remove from database
if (!webrtc_running || !app_running) {
// if session already in peding list skip
if (pending_list.is_waiting(session.session_id)) {
return
}
pending_list.add(session.session_id)
// kill process if running
kill_proc(session.webrtc_pid)
kill_proc(session.app_pid)
var close_session_result = await coordinator.close_session(session.session_id)
if (close_session_result) {
await database.remove_running_session(session.session_id)
} else {
console.log('can not connect to coordinator')
}
pending_list.remove(session.session_id)
}
}))
}
const check = async () => {
var sessions = await database.get_running_sessions()
if (!sessions) {
return
}
check_sessions(sessions)
}
module.exports = {
start_observer
}