Skip to content

Instantly share code, notes, and snippets.

@kriskowal
Last active August 29, 2015 13:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kriskowal/9719411 to your computer and use it in GitHub Desktop.
Save kriskowal/9719411 to your computer and use it in GitHub Desktop.
var Connection = require("./q-connection");
var ProcessStream = require("q-io/node/process-stream");
var stream = ProcessStream(process);
var remote = Connection(stream, {
exit: function (code) {
process.exit(code);
}
});
remote.invoke("greet", "Hello, World!").done();
var ChildProcess = require("child_process");
var ProcessStream = require("q-io/node/process-stream");
var Connection = require("./q-connection");
var child = ChildProcess.spawn("node", ["child.js"], {
stdio: ["ipc"]
});
var stream = ProcessStream(child);
var remote = Connection(stream, {
greet: function (message) {
console.log(message);
return remote.invoke("exit", 0);
}
});
var BufferStream = require("../buffer-stream");
module.exports = ProcessStream;
function ProcessStream(process) {
var input = new BufferStream();
var output = new BufferStream();
var stream = new BufferStream({get: input.get, put: output.put});
process.on("message", function (message) {
input.yield(message);
});
process.on("close", function () {
input.return(0);
});
process.on("exit", function (code) {
input.return(code);
});
output.forEach(function (message) {
process.send(message);
});
return stream;
}
var ChildProcess = require("child_process");
var ProcessStream = require("q-io/node/process-stream");
var Connection = require("../q-connection");
describe("subprocess exits", function () {
it("revokes promise for remote root object", function () {
var child = ChildProcess.spawn("true", [], {
stdio: ["ipc"]
});
var stream = ProcessStream(child);
var remote = Connection(stream);
return remote.then(function () {
expect(false).toBe(true);
}, function (error) {
expect(error.message).toBe("Can't resolve promise because connection closed");
});
});
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment