Skip to content
Snippets Groups Projects
Commit 3b1c19a0 authored by Loïc Correnson's avatar Loïc Correnson
Browse files

[Ivette/server] use per-process socket io

parent 101f5669
No related branches found
No related tags found
No related merge requests found
...@@ -143,6 +143,12 @@ export function getDownloads() { return appProxy.getPath('downloads'); } ...@@ -143,6 +143,12 @@ export function getDownloads() { return appProxy.getPath('downloads'); }
*/ */
export function getWorkingDir() { return command_wdir; } export function getWorkingDir() { return command_wdir; }
/**
@summary Returns the current process ID.
@return {number} `process.pid`
*/
export function getPID() { return process.pid; }
/** /**
@summary Command-line arguments (Application Window). @summary Command-line arguments (Application Window).
@return {Array.<string>} command-line arguments @return {Array.<string>} command-line arguments
...@@ -639,6 +645,7 @@ export default { ...@@ -639,6 +645,7 @@ export default {
getWorkingDir, getWorkingDir,
getArguments, getArguments,
getStatic, getStatic,
getPID,
join, resolve, dirname, basename, extname, join, resolve, dirname, basename, extname,
fileStat, fileStat,
isFile, readFile, writeFile, copyFile, isFile, readFile, writeFile, copyFile,
......
...@@ -279,7 +279,7 @@ export function clear() { ...@@ -279,7 +279,7 @@ export function clear() {
@param {string} [config.cwd] - Working directory (default: current) @param {string} [config.cwd] - Working directory (default: current)
@param {string} [config.command] - Server command (default: `frama-c`) @param {string} [config.command] - Server command (default: `frama-c`)
@param {Array.<string>} [config.params] - Additional server arguments (default: empty) @param {Array.<string>} [config.params] - Additional server arguments (default: empty)
@param {string} [config.sockaddr] - Server socket (default: `ipc:///.frama-c.socket.io`) @param {string} [config.sockaddr] - Server socket (default: `ipc:///.frama-c.<pid>.io`)
@param {number} [config.timeout] - Shutdown timeout before server is hard killed, in milliseconds (default: 300ms) @param {number} [config.timeout] - Shutdown timeout before server is hard killed, in milliseconds (default: 300ms)
@param {number} [config.polling] - Server polling period, in milliseconds (default: 50ms) @param {number} [config.polling] - Server polling period, in milliseconds (default: 50ms)
@param {string} [config.logout] - Process stdout log file (default: `undefined`) @param {string} [config.logout] - Process stdout log file (default: `undefined`)
...@@ -298,8 +298,26 @@ async function _launch() { ...@@ -298,8 +298,26 @@ async function _launch() {
_reset(); _reset();
if (!config) throw('Frama-C Server not configured'); if (!config) throw('Frama-C Server not configured');
let { env, cwd, command='frama-c', params=[], sockaddr, logout, logerr } = config; let { env, cwd, command='frama-c', params=[], sockaddr, logout, logerr } = config;
buffer.clear();
buffer.append('$',command);
params.forEach((argv) => {
if (argv.startsWith('-') || argv.endsWith('.c') || argv.endsWith('.i') || argv.endsWith('.h'))
buffer.append('\n ');
buffer.append(' ');
buffer.append(argv);
});
buffer.append('\n');
if (!cwd) cwd = System.getWorkingDir(); if (!cwd) cwd = System.getWorkingDir();
if (!sockaddr) sockaddr = 'ipc://' + System.join( cwd , '.frama-c.socket.io' ); if (!sockaddr) {
let socketfile = System.join(cwd,'.frama-c.' + System.getPID() + '.io');
System.atExit(() => {
System.remove(socketfile);
console.log('REMOVE',socketfile);
});
sockaddr = 'ipc://' + socketfile ;
}
logout = logout && System.join( cwd, logout ); logout = logout && System.join( cwd, logout );
logerr = logerr && System.join( cwd, logerr ); logerr = logerr && System.join( cwd, logerr );
params = params.concat('-then','-server-zmq',sockaddr ); params = params.concat('-then','-server-zmq',sockaddr );
...@@ -312,15 +330,6 @@ async function _launch() { ...@@ -312,15 +330,6 @@ async function _launch() {
// Launch Process // Launch Process
const process = await System.spawn( command, params, options ); const process = await System.spawn( command, params, options );
const kill = () => process.kill() ; const kill = () => process.kill() ;
buffer.clear();
buffer.append('$',command);
params.forEach((argv) => {
if (argv.startsWith('-') || argv.endsWith('.c') || argv.endsWith('.i') || argv.endsWith('.h'))
buffer.append('\n ');
buffer.append(' ');
buffer.append(argv);
});
buffer.append('\n');
const logger = (text) => { const logger = (text) => {
buffer.append(text); buffer.append(text);
if (0 <= text.indexOf('\n')) if (0 <= text.indexOf('\n'))
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment