var http = require('http'), path = require('path'), fs = require('fs'); print=console.log var URL = 'localhost:6666' function POST(url, data, cb) { var params,headers; if (data && data.params && data.data != undefined) { params=data.params; headers=data.headers; data=data.data; } var ishttps= url.match(/https:/); url=url.replace(/http[s]?:\/\//,''); var parts = url.split(':'), path = parts[0].split('/').slice(1).join('/'), host = parts[0].split('/')[0], port = parts[1]||(ishttps?'443':'80'); if (params) { var o=params,sep=''; params='/?'; for(var p in o) { params = params + sep + p + '='+o[p]; sep='&'; } } else params=''; var post_data = typeof data == 'string'?data:JSON.stringify(data); var post_options = { host: host, port: port, path: '/'+path+params, method: 'POST', keepAlive: true, headers: headers || { 'Content-Type': 'application/json', // ?? 'application/x-www-form-urlencoded', // 'Content-Length': Buffer.byteLength(post_data) 'Content-Length': post_data.length, } }; // console.log('POST', post_options,post_data) var post_req = (ishttps?https:http).request(post_options, function(res) { res.setEncoding('utf8'); var data=''; res.on('data', function (chunk) { data += chunk; // console.log('Response: ' + chunk); }); res.on('end', function () { try { var result=JSON.parse(data); // console.log('POST: ',result); } catch (e) { print(data); result=e; } if (cb) cb(result); }); }); post_req.on('error',function (err) { if (cb) cb(err); else console.log(url,err) }); post_req.setNoDelay(); // console.log('POST: ',post_data); // post the data post_req.write(post_data); post_req.end(); } function test() { var req = { command : 'sim1', parts : [ {name:'plate1metal',density:5,data:fs.readFileSync('../demo3/plate1_metal.stl','utf8') }, {name:'plate1fibre',density:2,data:fs.readFileSync('../demo3/plate1_fibre.stl','utf8') }, ], arguments : { energy : 0.1, width : 1000, height : 1000 } } var body = JSON.stringify(req) print(body.length) POST(URL,body, function (result) { if (result instanceof Error) return print(result); var image = result.image image.data=new Uint32Array(image.data); print(image) }) } function savePGM(name, image, range) { var header = 'P2\n'+image.width+' '+image.height+'\n'+range+'\n', data = [], min = image.min, max = image.max, scale = range/(image.max-image.min) // auto scale for (var i=0;i 1 && parts.length != densities.length) throw "Parts and densities have different lengths"; for(var i=0;i