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
Post a Comment