Skip to content

Commit ff372c0

Browse files
committed
Separator regex modified for CRLF ending messages
1 parent 7ac9d21 commit ff372c0

File tree

1 file changed

+8
-9
lines changed

1 file changed

+8
-9
lines changed

Diff for: src/msgAggregatorWorker.ts

+8-9
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ ctx.addEventListener("message", (event) => {
1818

1919
let buffer = "";
2020
let discardFirstLine = true;
21-
const separator = "\n";
21+
const separator = "\r?\n";
2222
const delimiter = "[, \t]+"; // Serial Plotter protocol supports Comma, Space & Tab characters as delimiters
2323
var separatorRegex = new RegExp(`(${separator})`, "g");
2424
var delimiterRegex = new RegExp(delimiter, "g");
@@ -33,10 +33,10 @@ export const parseSerialMessages = (
3333
// so we need to discard it and start aggregating from the first encountered separator
3434
let joinMessages = messages.join("");
3535
if (discardFirstLine) {
36-
const firstSeparatorIndex = joinMessages.indexOf(separator);
37-
if (firstSeparatorIndex > -1) {
36+
const separatorMatch = separatorRegex.exec(joinMessages);
37+
if (separatorMatch && separatorMatch.index > -1) {
3838
joinMessages = joinMessages.substring(
39-
firstSeparatorIndex + separator.length
39+
separatorMatch.index + separatorMatch[0].length
4040
);
4141
discardFirstLine = false;
4242
} else {
@@ -55,7 +55,7 @@ export const parseSerialMessages = (
5555
// remove the previous buffer
5656
buffer = "";
5757
// check if the last message contains the delimiter, if not, it's an incomplete string that needs to be added to the buffer
58-
if (messagesAndBuffer[messagesAndBuffer.length - 1] !== separator) {
58+
if (!separatorRegex.test(messagesAndBuffer[messagesAndBuffer.length - 1])) {
5959
buffer = messagesAndBuffer[messagesAndBuffer.length - 1];
6060
messagesAndBuffer.splice(-1);
6161
}
@@ -65,16 +65,15 @@ export const parseSerialMessages = (
6565

6666
// for each line, explode variables
6767
messagesAndBuffer
68-
.filter((message) => message !== separator)
68+
.filter((message) => !separatorRegex.test(message))
6969
.forEach((message) => {
7070
const parsedLine: { [key: string]: number } = {};
71-
71+
72+
// Part Separator symbols i.e. Space, Tab & Comma are fully supported
7273
// SerialPlotter protocol specifies 3 message formats. The following 2 formats are supported
7374
// Value only format: <value1> <value2> <value3>
7475
// Label-Value format: name1:<value1>,name2:<value2>,name3:<value3>
7576

76-
// Part Separator symbols i.e. Space, Tab & Comma are fully supported
77-
7877
// if we find a colon, we assume the latter is being used
7978
let tokens: string[] = [];
8079
if (message.indexOf(":") > 0) {

0 commit comments

Comments
 (0)