UNPKG

computes-ipfs

Version:

computes.io distributed supercomputer

144 lines (109 loc) 2.76 kB
var util=require('util') var EventEmitter = require( "events" ).EventEmitter var Job = function(){} util.inherits(Job, EventEmitter) const os = require('os') const path = require('path') const IPFS = require('ipfs') var uuid = require('uuid') var jobs = [] var node function connect(domain){ var job = new Job(); node = new IPFS({ repo: path.join(os.tmpdir() + '/' + new Date().toString()), init: { emptyRepo: true, bits: 2048 }, start: true, EXPERIMENTAL: { pubsub: true }, config: { // overload the default config to avoid ports in use Addresses: { Swarm: [ '/ip4/127.0.0.1/tcp/1337' ] } } }); node.on('ready', () => { console.log('Node is now ready and online') node.id(function(err, data){ console.log("Node info:", data) nodeData = data node.pubsub.subscribe(domain, receiveMsg); node.pubsub.subscribe(nodeData.id, receivePM); // connection ready job.emit("ready"); }); }); // core detected available for work const receiveMsg = (msg) => { if(jobs.length > 0){ var dataObj = JSON.parse(msg.data.toString()); var fromNode = dataObj.node.id; var msgObj = { node: nodeData, compute: jobs[0].operation, data: jobs[0].data } jobs.splice(0, 1); var msgSend = new Buffer(JSON.stringify(msgObj).toString()); node.pubsub.publish(fromNode, msgSend, (err) => { if (err) {throw err} }) } } // core reporting result const receivePM = (msg) => { console.log("private:",msg.data.toString()); var dataObj = JSON.parse(msg.data.toString()); var fromNode = dataObj.node.id; var results = { result: dataObj.result } job.emit( "result", results ); } return job; } Job.prototype.cancel = function(){}; Job.prototype.disconnect = function(){ // stopping a node node.stop(() => { // node is now 'offline' process.exit() }) }; Job.prototype.compute = function compute(operation, data, options){ var jobid = 'computes:' + uuid.v1(); var payload={ client: { "name": "job-creator" }, jobid: jobid, operation: operation, data: data, options: options }; jobs.push(payload) } Job.prototype.execute = function execute(command, options){ var jobid = 'computes:' + uuid.v1(); var payload={ client: { "name": "job-creator" }, jobid: jobid, command: command, options: options }; jobs.push(payload) } Job.prototype.cancel = function cancel(job){ var payload={ client:{ "name": "job-creator" }, jobs: [job] }; // submitJob('killJobs', payload); } module.exports = { connect: connect }