diff --git a/README.MD b/README.MD
new file mode 100644
index 0000000..004fdc5
--- /dev/null
+++ b/README.MD
@@ -0,0 +1,93 @@
+# @2o3t/process-manager
+
+Process manager for Nodejs.
+
+Ideas from https://github.com/Microsoft/vscode.
+
+## Installation
+
+```sh
+npm install @2o3t/process-manager
+```
+
+or
+
+```sh
+yarn add @2o3t/process-manager
+```
+
+## Usage
+
+**Client** (main process):
+
+```js
+const PM = require('@2o3t/process-manager');
+const client = new PM.Client(__dirname + '/sub-processes.js');
+const channel = client.getChannel('channelName');
+channel.call('info', {
+ // something
+}).then(data => {
+ console.log('data', data);
+});
+channel.listen('ccc')(aa => {
+ console.log('listen..', aa);
+});
+```
+
+
+**Server** (sub process):
+
+```js
+const PM = require('@2o3t/process-manager');
+const server = new PM.Server();
+const channel = new PM.ServerChannel({
+ info(arg) {
+ console.log('arg: ', arg);
+ return Promise.resolve(server.info);
+ },
+ ccc(emit) {
+ emit('100w');
+ emit('101w');
+ // server.dispose();
+ emit('102w');
+ emit('103w');
+ emit('104w');
+ },
+});
+console.log('server ok');
+server.registerChannel('channelName', channel);
+```
+
+## Options
+
+**`Client`** options in paramters
+
+**modulePath**: file path of sub process
+
+**options**: Object.
+
+| key | type | desc |
+|-----|-----|-----|
+| **serverName** | string | A descriptive name for the server this connection is to. Used in logging. |
+| **timeout**? | number | Time in millies before killing the ipc process. The next request after killing will start it again. |
+| **args**? | string[] | Arguments to the module to execute. |
+| **env**? | any | Environment key-value pairs to be passed to the process that gets spawned for the ipc. |
+| **debug**? | number | Allows to assign a debug port for debugging the application executed. |
+| **debugBrk**? | number | Allows to assign a debug port for debugging the application and breaking it on the first line. |
+| **freshExecArgv**? | boolean | See https://github.com/Microsoft/vscode/issues/27665
* Allows to pass in fresh execArgv to the forked process such that it doesn't inherit them from `process.execArgv`.
* e.g. Launching the extension host process with `--inspect-brk=xxx` and then forking a process from the extension host results in the forked process inheriting `--inspect-brk=xxx`. |
+| **useQueue**? | boolean | Enables our createQueuedSender helper for this Client. Uses a queue when the internal Node.js queue is full of messages - see notes on that method. |
+
+
+
+**`Server`** options in paramters
+
+**options**: Object.
+
+| key | type | desc |
+|-----|-----|-----|
+| **timeoutDelay**? | number | They will timeout after `timeoutDelay`. |
+
+
+## License
+
+MIT
diff --git a/lib/Client.js b/lib/Client.js
index 5d3ed03..574dc19 100644
--- a/lib/Client.js
+++ b/lib/Client.js
@@ -53,6 +53,10 @@ const ChannelClient = require('./channel/ChannelClient');
// useQueue?: boolean;
// }
+const defaultOptions = {
+ serverName: 'UNKNOW',
+};
+
class Client {
/**
*Creates an instance of Client.
@@ -67,6 +71,7 @@ class Client {
this.channels = new Map();
this.child = null;
this._client = null;
+ this.options = Object.assign({}, defaultOptions, options, { timeout });
}
/**
diff --git a/package.json b/package.json
index ed3aab0..b4ddfb6 100644
--- a/package.json
+++ b/package.json
@@ -1,18 +1,37 @@
{
- "name": "@2o3t/process-manager",
- "version": "0.0.1",
- "description": "",
- "main": "index.js",
- "directories": {
- "lib": "lib"
- },
- "scripts": {
- "test": "echo \"Error: no test specified\" && exit 1"
- },
- "author": "zyao89 ",
- "license": "ISC",
- "devDependencies": {
- "eslint": "^5.16.0",
- "eslint-config-2o3t": "^1.1.15"
- }
+ "name": "@2o3t/process-manager",
+ "version": "0.0.2",
+ "description": "Process manager for Nodejs.",
+ "main": "index.js",
+ "directories": {
+ "lib": "lib"
+ },
+ "files": [
+ "lib",
+ "index.js"
+ ],
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "keywords": [
+ "process",
+ "manager",
+ "pm",
+ "process-manager",
+ "ipc"
+ ],
+ "author": "zyao89 ",
+ "license": "MIT",
+ "homepage": "https://github.com/2o3t/process-manager",
+ "repository": "github:2o3t/process-manager",
+ "bugs": {
+ "url": "https://github.com/2o3t/process-manager/issues"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "devDependencies": {
+ "eslint": "^5.16.0",
+ "eslint-config-2o3t": "^1.1.15"
+ }
}
diff --git a/test/index.js b/test/index.js
index b80207d..0023f56 100644
--- a/test/index.js
+++ b/test/index.js
@@ -2,15 +2,12 @@
const PM = require('../');
const client = new PM.Client(__dirname + '/sub-processes.js');
-const channel = client.getChannel('abc');
-channel.call('ccd', 789).then(data => {
+const channel = client.getChannel('channelName');
+channel.call('info', {
+ // something
+}).then(data => {
console.log('data', data);
});
-setInterval(() => {
- channel.call('ccd', 'info').then(data => {
- console.log('info: ', data);
- });
-}, 2000);
channel.listen('ccc')(aa => {
console.log('listen..', aa);
});
diff --git a/test/sub-processes.js b/test/sub-processes.js
index 9c8d2ba..a49c78f 100644
--- a/test/sub-processes.js
+++ b/test/sub-processes.js
@@ -14,10 +14,9 @@
const PM = require('../');
const server = new PM.Server();
const channel = new PM.ServerChannel({
- ccd(arg) {
+ info(arg) {
console.log('arg: ', arg);
- if (arg === 'info') return Promise.resolve(server.info);
- return Promise.resolve(arg);
+ return Promise.resolve(server.info);
},
ccc(emit) {
emit('100w');
@@ -29,4 +28,4 @@ const channel = new PM.ServerChannel({
},
});
console.log('server ok');
-server.registerChannel('abc', channel);
+server.registerChannel('channelName', channel);