REST API upgrade
This commit is contained in:
@@ -10,6 +10,9 @@
|
||||
"ip":"192.168.1.115",
|
||||
"port":3001
|
||||
},
|
||||
"cors":[
|
||||
"http://192.168.1.115:3001"
|
||||
],
|
||||
"webrtc_args_static":{
|
||||
"cirrus_path":"D:/shared/Builds/Ivaz_Optimized_2/Samples/PixelStreaming/WebServers/SignallingWebServer/cirrus.js"
|
||||
},
|
||||
|
||||
@@ -0,0 +1,138 @@
|
||||
// two bad headers
|
||||
// const http_client = require('../../lib/http_client.js')
|
||||
// const crypto = require('crypto')
|
||||
|
||||
|
||||
// // filesystem
|
||||
// const fs = require('fs')
|
||||
|
||||
// // node date time
|
||||
// const node_time = require('node-datetime')
|
||||
// // titles for process creation
|
||||
// const titles = require('./titles.json')
|
||||
|
||||
const port_alloc = require('../../lib/port_alloc.js')
|
||||
const titles = require('../titles.json')
|
||||
const configg = require('../config.json')
|
||||
const { spawn } = require('node:child_process')
|
||||
const child_process = require('child_process')
|
||||
const http_client = require('../../lib/http_client.js')
|
||||
|
||||
const app_port_begin = configg.session_ports.app_begin
|
||||
const http_port_begin = configg.session_ports.http_begin
|
||||
const ports_count = configg.session_ports.count
|
||||
|
||||
const app_args_static = configg.app_args_static
|
||||
const app_args_ip = configg.app_args_runtime.ip
|
||||
const server_ip = configg.ip
|
||||
const app_args_port = configg.app_args_runtime.port
|
||||
|
||||
const webrtc_cirrus_path = configg.webrtc_args_static.cirrus_path
|
||||
|
||||
const coordinator_port = configg.coordinator.port
|
||||
const coordinator_ip = configg.coordinator.ip
|
||||
|
||||
// const http_client = require('../lib/http_client.js')
|
||||
|
||||
// SHALL FIX IT IN FUTURE BECAUSE IT IS NOT THE REST API
|
||||
var app_port_alloc = new port_alloc(app_port_begin, ports_count)
|
||||
var http_port_alloc = new port_alloc(http_port_begin, ports_count)
|
||||
|
||||
module.exports.create_session = async (req, res, next) => {
|
||||
//create?title=name&next_var=0
|
||||
try {
|
||||
var app_info
|
||||
titles.forEach((title) => {
|
||||
if (title.title == req.query.title) {
|
||||
app_info = title
|
||||
}
|
||||
})
|
||||
if (!app_info)
|
||||
throw new Error('app info not exists')
|
||||
|
||||
var app_port
|
||||
var http_port
|
||||
try {
|
||||
app_port = app_port_alloc.get()
|
||||
http_port = http_port_alloc.get()
|
||||
} catch(e) {
|
||||
throw new Error(e)
|
||||
}
|
||||
|
||||
// start app_proc
|
||||
const app_proc = spawn(app_info.path, [].concat(app_args_static,
|
||||
[app_args_ip + server_ip, app_args_port + app_port.toString()]), {
|
||||
detached: true
|
||||
})
|
||||
app_proc.on('error', function(err) {
|
||||
logger_runtime.error(err)
|
||||
response = {msg:'APP_PROC_ERROR'}
|
||||
callback(response)
|
||||
return
|
||||
})
|
||||
app_proc.on('close', (code) => {
|
||||
app_port_alloc.free(app_port)
|
||||
})
|
||||
|
||||
// start webrtc server
|
||||
const webrtc_proc = child_process.fork(webrtc_cirrus_path, [http_port.toString(), app_port.toString()], {
|
||||
detached: true
|
||||
})
|
||||
webrtc_proc.on('error', function(err) {
|
||||
logger_runtime.error(err)
|
||||
response = {msg:'WEBRTC_PROC_ERROR'}
|
||||
callback(response)
|
||||
return
|
||||
})
|
||||
webrtc_proc.on('close', (code) => {
|
||||
http_port_alloc.free(http_port)
|
||||
// if webrtc server closed, kill app proc and send session end message to server
|
||||
if (process.platform === 'win32') {
|
||||
spawn('taskkill', ['/pid', app_proc.pid, '/f', '/t'])
|
||||
}
|
||||
else {
|
||||
app_proc.kill('SIGINT')
|
||||
}
|
||||
http_client.get({
|
||||
host: coordinator_ip,
|
||||
port: coordinator_port,
|
||||
path: `/session/close?session_id=${req.query.session_id}`
|
||||
}, async function(answer) {
|
||||
}, function(err) {
|
||||
next(Error('session server not working'))
|
||||
})
|
||||
// new http_client(coordinator_ip, coordinator_port).post(
|
||||
// JSON.stringify({verb:'CLOSE_SESSION', session_id:req.query.session_id}), function(answer) {
|
||||
|
||||
// },
|
||||
// function(error) {
|
||||
|
||||
// })
|
||||
|
||||
})
|
||||
res.json({msg:'SESSION_CREATED', link:`http://${server_ip+':'+http_port}`})
|
||||
// callback(response)
|
||||
// return
|
||||
|
||||
// get request
|
||||
// http_client.get({
|
||||
// host: free_server.ip,
|
||||
// port: free_server.port,
|
||||
// path: `/session/create?title=${req.query.title}&session_id=${session_id}`
|
||||
// }, async function(answer) {
|
||||
|
||||
// res.json({msg:'SESSION_CREATED', link:answer.link})
|
||||
// }, function(err) {
|
||||
// next(Error('session server not working'))
|
||||
// })
|
||||
} catch (e) {
|
||||
next(e)
|
||||
}
|
||||
}
|
||||
|
||||
module.exports.connect_session = async (req, res, next) => {
|
||||
|
||||
}
|
||||
|
||||
module.exports.close_session = async (req, res, next) => {
|
||||
}
|
||||
Generated
-3411
File diff suppressed because it is too large
Load Diff
@@ -1,19 +0,0 @@
|
||||
{
|
||||
"name": "coordinator",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"main": "coordinator.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"keywords": [],
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"type": "commonjs",
|
||||
"dependencies": {
|
||||
"express": "^4.18.2",
|
||||
"mongodb": "^4.12.0",
|
||||
"node-datetime": "^2.1.2",
|
||||
"signal": "^7.0.6"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
const router = require('express').Router()
|
||||
const router_session = require('./session')
|
||||
|
||||
router.use('/session', router_session)
|
||||
|
||||
module.exports = router
|
||||
@@ -0,0 +1,8 @@
|
||||
const router = require('express').Router()
|
||||
|
||||
const {create_session, connect_session} = require('../controller/session')
|
||||
|
||||
router.get('/create', create_session)
|
||||
router.get('/connect', connect_session)
|
||||
|
||||
module.exports = router
|
||||
@@ -1,153 +0,0 @@
|
||||
// session server
|
||||
// http
|
||||
const http = require('http')
|
||||
// filesystem
|
||||
const fs = require('fs')
|
||||
// server config
|
||||
const config = require('./config.json')
|
||||
// node date time
|
||||
const node_time = require('node-datetime')
|
||||
// titles for process creation
|
||||
const titles = require('./titles.json')
|
||||
|
||||
const { spawn } = require('node:child_process')
|
||||
|
||||
const child_process = require('child_process')
|
||||
|
||||
const port_alloc = require('../lib/port_alloc.js')
|
||||
const http_client = require('../lib/http_client.js')
|
||||
const logger = require('../lib/logger')
|
||||
|
||||
// logger
|
||||
const logger_init = new logger('./logs/init.log')
|
||||
const logger_runtime = new logger('./logs/runtime.log')
|
||||
|
||||
var app_port_alloc = new port_alloc(config.session_ports.app_begin, config.session_ports.count)
|
||||
var http_port_alloc = new port_alloc(config.session_ports.http_begin, config.session_ports.count)
|
||||
|
||||
// response function
|
||||
async function create_response(request, callback) {
|
||||
var response = ''
|
||||
try {
|
||||
if (request.verb == 'CREATE_SESSION') {
|
||||
var app_info
|
||||
titles.forEach((title) => {
|
||||
if (title.title == request.title) {
|
||||
app_info = title
|
||||
}
|
||||
})
|
||||
if (app_info == null) {
|
||||
response = {msg:'TITLE_NOT_EXISTS'}
|
||||
callback(response)
|
||||
return
|
||||
}
|
||||
|
||||
var app_port
|
||||
var http_port
|
||||
try {
|
||||
app_port = app_port_alloc.get()
|
||||
http_port = http_port_alloc.get()
|
||||
} catch(e) {
|
||||
logger_runtime.error(e)
|
||||
response = {msg:'PORT_BUSY'}
|
||||
callback(response)
|
||||
return
|
||||
}
|
||||
|
||||
// start app_proc
|
||||
const app_proc = spawn(app_info.path, [].concat(config.app_args_static,
|
||||
[config.app_args_runtime.ip + config.ip, config.app_args_runtime.port + app_port.toString()]), {
|
||||
detached: true
|
||||
})
|
||||
app_proc.on('error', function(err) {
|
||||
logger_runtime.error(err)
|
||||
response = {msg:'APP_PROC_ERROR'}
|
||||
callback(response)
|
||||
return
|
||||
})
|
||||
app_proc.on('close', (code) => {
|
||||
app_port_alloc.free(app_port)
|
||||
})
|
||||
|
||||
// start webrtc server
|
||||
const webrtc_proc = child_process.fork(config.webrtc_args_static.cirrus_path, [http_port.toString(), app_port.toString()], {
|
||||
detached: true
|
||||
})
|
||||
webrtc_proc.on('error', function(err) {
|
||||
logger_runtime.error(err)
|
||||
response = {msg:'WEBRTC_PROC_ERROR'}
|
||||
callback(response)
|
||||
return
|
||||
})
|
||||
webrtc_proc.on('close', (code) => {
|
||||
http_port_alloc.free(http_port)
|
||||
// if webrtc server closed, kill app proc and send session end message to server
|
||||
if (process.platform === 'win32') {
|
||||
spawn('taskkill', ['/pid', app_proc.pid, '/f', '/t'])
|
||||
}
|
||||
else {
|
||||
app_proc.kill('SIGINT')
|
||||
}
|
||||
new http_client(config.coordinator.ip, config.coordinator.port).post(
|
||||
JSON.stringify({verb:'CLOSE_SESSION', session_id:request.session_id}), function(answer) {
|
||||
|
||||
},
|
||||
function(error) {
|
||||
|
||||
})
|
||||
|
||||
})
|
||||
|
||||
response = {msg:'SESSION_CREATED', link:`http://${config.ip+':'+http_port}`}
|
||||
callback(response)
|
||||
return
|
||||
} else if(request.verb == 'CONNECT_SESSION') {
|
||||
response = ''
|
||||
callback(response)
|
||||
return
|
||||
} else {
|
||||
response = {msg:'UNKNOWN_VERB'}
|
||||
callback(response)
|
||||
return
|
||||
}
|
||||
}
|
||||
catch(e) {
|
||||
logger_runtime.error(e)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// start http server
|
||||
const server = http.createServer(function(request, response) {
|
||||
if (request.method == 'POST') {
|
||||
var body = ''
|
||||
request.on('data', function(data) {
|
||||
body += data
|
||||
})
|
||||
request.on('end', function() {
|
||||
logger_runtime.log('received: ', body)
|
||||
response.writeHead(200, {'Content-Type': 'application/json'})
|
||||
try {
|
||||
create_response(JSON.parse(body), function(message) {
|
||||
response.end(JSON.stringify(message))
|
||||
logger_runtime.log('response:', message)
|
||||
})
|
||||
}
|
||||
catch(e) {
|
||||
logger_runtime.error(e)
|
||||
}
|
||||
})
|
||||
}
|
||||
else {
|
||||
response.writeHead(501, {'Content-Type': 'application/json'})
|
||||
response.end(JSON.stringify({msg:'UNKNOWN_METHOD'}))
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
try {
|
||||
server.listen(config.port, config.ip)
|
||||
logger_init.log(`Listening at http://${config.ip}:${config.port}`)
|
||||
} catch (e) {
|
||||
logger_init.error(e)
|
||||
}
|
||||
Reference in New Issue
Block a user