var http = require('http'); var exec = require('child_process').exec; var fs = require('fs'); var WebSocketServer = require('websocket').server; var HID = require('node-hid'); var devices = HID.devices(); var myBarCode= {}; var lastBarCode = ""; var lastLabel=""; var request = require('request'); try{ var tempObj = fs.readFileSync('whoami'); tempRead = JSON.parse(tempObj); whoami = tempRead.Name; console.log("I am '" + whoami + "'"); } catch (e) { console.log("I could not open whoami, I'm going to quit"); process.exit(); } for(var i in devices){ console.log(devices[i]); if(devices[i].product){ var myString = devices[i].product; if(myString.indexOf('Bar Code')>-1){ console.log("found barcode reader: " + myString); myBarCode=devices[i] }; } } if(myBarCode.path){ var device = new HID.HID(myBarCode.path); } else { console.log("I couldn't get barcode readers path, I'm going to exit."); process.exit(); } device.on("data", function(data) { var myRead = data.toString(); var myArray = myRead.split(""); var startLog=false; var myRes=""; for (var i = 0, len = myArray.length; i < len; i++) { if(startLog){ if(myArray[i]=='\u0000'){ break; } myRes=myRes + myArray[i]; } if(myArray[i]=='\u0000'){startLog=true;} } console.log ("I think you want '" + myRes + "'"); if (myRes == "REBOOT"){exec('shutdown -r now '); return;} if (myRes == "CLOSE"){exec('pkill -f firefox '); return;} if (myRes.substring(0,3) == "MOD"){ console.log("Sending Modal Selection to browsers = " + myRes); for(var i in clients){ var sendMe = JSON.stringify({'type':'Modal', 'MOD':myRes}); clients[i].sendUTF(sendMe); } return; } if (myRes.substring(0,9) == "WEBREBOOT"){ request.get('https://icg.islandceramics.com:8081/?command=webReboot', function (error, response, body) { if (!error && response.statusCode == 200) { console.log(body); } else { console.log(error); } }); return; } if (myRes.substring(0,4) == "MANT"){ console.log("Sending MAINT signoff to browsers = " + myRes); for(var i in clients){ var sendMe = JSON.stringify({'type':'MANT', 'MANT':myRes}); clients[i].sendUTF(sendMe); } return; } if (myRes.substring(0,4) == "ROLL"){ console.log("Sending Modal Selection to browsers = " + myRes); for(var i in clients){ var sendMe = JSON.stringify({'type':'ROLL', 'ROLL':myRes}); clients[i].sendUTF(sendMe); } return; } if (myRes.substring(0,6) == "CONFIG"){ console.log("Configuration Request"); exec("/sbin/ifconfig", function(error,stdout,stderr){ var myMessage = error + stdout + stderr; console.log (myMessage); for(var i in clients){ var sendMe = JSON.stringify({'type':'Message', 'Message':myMessage}); clients[i].sendUTF(sendMe); } }) return; } if (myRes.substring(0,3) == "F11"){ console.log("full screen me browsers = " + myRes); exec('/usr/bin/xdotool search --name Mozilla key F11', {env: {'DISPLAY': ':0.0', 'XAUTHORITY':'/home/bhitch/.Xauthority'}}, function(error,stdout,stderr){ console.log(error + "~" + stdout + "~" + stderr); }); return; } if (myRes.substring(0,3) == "REL"){ console.log("Shift CTL Reload = " + myRes); exec('/usr/bin/xdotool search --name Mozilla key shift+ctrl+r', {env: {'DISPLAY': ':0.0', 'XAUTHORITY':'/home/bhitch/.Xauthority'}}, function(error,stdout,stderr){ console.log(error + "~" + stdout + "~" + stderr); }); return; } if (myRes.substring(0,3) == "UPG"){ console.log("Copy hidLabel.js from server: " + myRes); exec('/home/pi/updateAndReboot.sh'); return; } if (myRes.substring(0,3) == "DOC"){ console.log("Sending DocRevCheck to browsers = " + myRes); for(var i in clients){ var sendMe = JSON.stringify({'type':'DocRevCheck', 'Doc':myRes}); clients[i].sendUTF(sendMe); } return; } if (myRes.substring(0,3) == "LAB"){ console.log("Sending Label Request to browsers = " + myRes.substring(3)); for(var i in clients){ var sendMe = JSON.stringify({'type':'LabelRequest', 'labelNum':myRes.substring(3)}); console.log(sendMe); clients[i].sendUTF(sendMe); } return; } if (myRes.substring(0,3) == "PIC"){ console.log("Sending Picture Request to browsers = " + myRes.substring(3)); for(var i in clients){ var sendMe = JSON.stringify({'type':'PICrequest', 'ID':myRes.substring(3)}); console.log(sendMe); clients[i].sendUTF(sendMe); } return; } if (myRes.substring(0,6) == "MCLOSE"){ //console.log("Sending ModalCloseRequest"); for(var i in clients){ var sendMe = JSON.stringify({'type':'ModalClose'}); console.log(sendMe); clients[i].sendUTF(sendMe); } return; } // if we get this far it turns on whether numeric. Numeric = job, non-numeric = scanDictionary lookup if(isNumeric(myRes)){ if(myRes==lastBarCode){ // Print a label console.log("print a label"); labelPrint(myRes); return; } lastBarCode=myRes; console.log("sending barcode to browser"); for(var i in clients){ var sendMe = JSON.stringify({'type':'barcode', 'barcode':myRes}); clients[i].sendUTF(sendMe); } return; } console.log("Only thing left is scan dictionary"); for(var i in clients){ var sendMe = JSON.stringify({'type':'scanDictionary', 'lookMeUp':myRes}); clients[i].sendUTF(sendMe); } return; }); device.on("error", function(err) { console.log(err); }); var server = http.createServer(function(request, response){ response.writeHead(200, {'Content-Type': 'text/plain'}); response.end("Hello There"); }) server.listen(8080, '127.0.0.1', function(){ console.log("Node Web Server is listening\n\n");}); var clients={}; var count=0; wss = new WebSocketServer({httpServer: server}); wss.on('request', function(r){ var connection=r.accept('barcode', r.origin); var id = count++; clients[id]= connection; connection.on('close', function(reasonCode, description){ console.log("Connection Closed"); delete clients[id]; }) connection.on('message', function(message){ var myLabel2 = JSON.parse(message.utf8Data); if(myLabel2.type=="labelPrint"){ fs.writeFileSync('labelOut2.zpl', myLabel2.zCode); console.log(myLabel2); printLabel('labelOut2.zpl'); } }) }); function labelPrint(lotid){ if(lotid == lastLabel) { //just print, dont request new label string printLabel('shipLabel.zpl'); return; } requestOptions.path="/ShopLabel.php?MLOT="+lotid+"&who="+whoami+"&ship=1"; console.log(requestOptions); request.get("http://192.168.10.26/ShopLabel.php?MLOT="+lotid+"&who="+whoami+"&ship=1", function (error, response, body) { if (!error && response.statusCode == 200) { console.log("Here comes the web response:"); console.log(body); } else { console.log("Here comes the error:"); console.log(error); } }); } function printLabel(filename){ console.log("trying to print label"); exec('cat ' + filename + ' > /dev/usb/lp0', function(error, stdout, stderr) { }); } function isNumeric(n) { return !isNaN(parseFloat(n)) && isFinite(n); }