NEWS
Js wie in "Puffer" schreiben
Js wie in "Puffer" schreiben
-
ich möchte gern ankommendende Daten so lange in eine Puffer schreiben bis ein bestimmtes Zeichen am ende kommt und dann erst die "kompletten Daten" übergeben.
folgendes:
hier wird auf ankommende Daten reagiert:
on('data', function (data) { var iscp_message = eiscp_packet_extract(data), result = iscp_to_command(iscp_message); result.iscp_command = iscp_message; result.host = config.host; result.port = config.port; result.model = config.model; self.emit('debug', util.format("DEBUG (received_data) Received data from %s:%s - %j", config.host, config.port, result)); self.emit('data', result); // If the command is supported we emit it as well if (typeof result.command !== 'undefined') { if (Array.isArray(result.command)) { result.command.forEach(function (cmd) { self.emit(cmd, result.argument); }); } else { self.emit(result.command, result.argument); } } });und hier werden die Daten entpacket:
function eiscp_packet_extract(packet) { /* Exracts message from eISCP packet Strip first 18 bytes and last 3 since that's only the header and end characters */ return packet.toString('ascii', 18, packet.length - 3); }ich möchte die ankommenden Daten nun solange in einen Puffer schreiben (zusammenfügen) bis ein bestimmten Zeichen am Ende der Daten kommt.
in HEX: 0a
in Ascii: "." (Punkt)
erst danach soll das komplette Paket übergeben werden…
Bsp.:
in HEX
~~https://i.imgur.com/dcdD8fc.jpg" />umgewandelt:
~~https://i.imgur.com/bVshqAe.jpg" />wie könnte man das realisieren?~~~~
-
-
HEX: 0a = LF(line feed)
ASCII: "\n" (new line) `
Ich verste nicht so ganz was du mir damit sagen möchtest… ??? :?:
@Jey Cee:Du musst mit Streams Arbeiten. Schau dir mal "pipe" an. Damit geht sowas. `
Ich hab mir mal einiges bei stackoverflow durgelesen aber so richtig schlau werde ich daraus noch nicht…
const bl = require('bl') , fs = require('fs') fs.createReadStream('README.md') .pipe(bl(function (err, data) { // note 'new' isn't strictly required // `data` is a complete Buffer object containing the full data console.log(data.toString()) })) -
Ich verste nicht so ganz was du mir damit sagen möchtest… ??? `
https://www.torsten-horn.de/techdocs/ascii.htm."." (Punkt) hat den hexadezimalen Wert 0x2e.
-
jetzt verste ich was du meinst,
0a am ende steht für LF(line feed) und nicht für den Punkt… okay verstanden.
mein Problem ist das ein Antwort in mehreren Paketen gesendet wird und das ende immer "0A"...
Ich möchte nun die Pakete "zusammensetzen" im Moment werden sie leider als einzelne Teile verarbeitet...
-
okay, aber dann müsste ich doch die strings so lange in einen Puffer schreiben bis ein LF zeichen kommt, richtig? `
So würde ich es versuchen. -
Wenn es sich tatsächlich um Strings handelt, dann ist der Puffer ein String, der als Leerstring initialisiert wird, und an den man die Stringbruchstücke solange anhängt, bis ein LF enthalten ist. Der Hex-Dump zeigt allerdings etliche Steuerzeichen innerhalb der Daten.
-
die Antworten die ich erwarte sehen dann so aus…
NRI<response status="ok"><device id="TX-NR525"><brand>ONKYO</brand><category>AV Receiver</category><year>2013</year><model>TX-NR525</model><destination>xx</destination><firmwareversion>1060-9110-0000-</firmwareversion></device></response> -
die Antworten die ich erwarte sehen dann so aus… `
Das ist unvollständiger XML-Code.NRI <response status="ok"><device id="TX-NR525"><brand>ONKYO</brand> <category>AV Receiver</category> <year>2013</year> <model>TX-NR525</model> <destination>xx</destination> <firmwareversion>1060-9110-0000-</firmwareversion></device></response> -
richtig… das Problem ist das der xml code in teilen gesendet wird und nicht vollständig übergeben wird...
~~https://i.imgur.com/LFkxKiN.jpg" />
~~https://i.imgur.com/qLyVEPv.jpg" />der komplette xml-code setzt sich den Paketen 920,921,922,923 und 924 zusammen…
darum möchte ich die enzelnen Teile wieder zusammensetzen um den kompletten und brauchbaren xml code zu bekommen...~~~~
-
nein, die anderen haben diesen header nicht… der isr aber wichtig für die weiterverarbeitung müsste also am Anfang des Paketes bestehen bleiben...
~~https://i.imgur.com/sTO0PT2.jpg" />
~~https://i.imgur.com/jryLouz.jpg" />
~~https://i.imgur.com/E80eKKM.jpg" />
https://i.imgur.com/YKPAKSY.jpg" />~~~~~~ -
das ist richtig…
~~https://i.imgur.com/SaV0DU6.jpg" />Wireshark sagt mir das der "Datenteil" immer erst mit byte 66 startet…

https://i.imgur.com/wzzsRhF.jpg" />~~ -