node.js - Architecture of code using node js -


i having problems code architecture , looking advice. sending multiple read request server via udp , printing read response out. example of how request , response below. getting response 1 large hex string starting @ 0008.. need way code know how many addresses sent read , data size requested , take account on printing out data. since data size can change, can not split string using definite value. not looking actual code rather ideas on how 1 tackle this.

request     00 06 - opcode     00 00 - block #     02 - count     34 97 00 20 - address 1     04 00 - data size 1 (bytes)     30 97 00 20 - address 2      01 00 - data size 2 (bytes)   response- 00080001e60300009     00 08 - opcode     00 01 - block #      e6 03 00 00 - data 1     09 - data 2    printing right now- e603000009   how want printed - address 1 = e6030000                           address 2 = 09  ...                            address 3 = 00 00                           etc.    (it know new data data size requested , # of addresses requested) 

part of code sending read request , emitting html

app.post('/output3', function(req, res){    res.sendfile(__dirname + '/upload3.html');  //define host , port values of udp    var host= '192.168.0.136';   var port= 69;          var io = require('socket.io')(http);      //mulitple parameters     //setinterval send message constantly.     var client= dgram.createsocket('udp4');     var counter = 0;        //array addresses       var address=[];       //array size       var size=[];       //iterate through addresses , convert little endian       (var i=0; i<req.body.address.length; i++) {         var n= req.body.address[i];         var s = n.tostring(16).match(/.{1,2}/g);         address[i]= s.reverse().join("").tostring(16); // ==> "0x985c0020" (= 2556166176)       }        //iterate through size , make hex strings , little endian       (var i=0; i<req.body.size.length; i++) {         function pad(number, length) {           var my_string = '' + number;           while (my_string.length < length) {             my_string = '0' + my_string;           }           return my_string;         }          var n2= pad(req.body.size[i], 4);         var s2 = n2.tostring(16).match(/.{1,2}/g);         size[i]= s2.reverse().join("").tostring(16);       }        //empty string add address , size       var x='';       (var i=0; i<req.body.address.length; i++) {         x += address[i]+size[i];       }          console.log(req.body.size);       var mrq= read(x);        //open listener recieve intial message , print in webpage       io.on('connection', function(socket){         var mrq= read(x);           io.emit('mrq', mrq);         });       function read() {         // memory read request 16-bit word value of 6         var message = '0006'         // block number 16-bit word set 0         message += '0000'         // count variable, , calculated size of parameter list         message += '02'          (var i=0; < arguments.length; i++) {           message += arguments[i];         }         return message;       }         var message = new buffer(mrq, 'hex');       counter++;        var loop= setinterval(function () {       //sends packets udp , setinterval sends packets again specific time       client.send(message, 0, message.length, port, host, function (err, bytes) {         if (err) throw err;       });       if (counter === 1000000000000000) {         clearinterval(loop);       }     }, 1/50);        //open listener recieve intial message , print in webpage     io.on('connection', function(socket){       client.on('message', function( message, rinfo ){         //hex string         var temp = message.readuintbe(0, 2);         //console.log(message.tostring(16));         io.emit('temp', temp);       });     }); 

showing current code answer better.

but in general, way use write stream , push string out in chunks, rather whole block.


Comments