-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathconvert.js
More file actions
59 lines (56 loc) · 1.52 KB
/
convert.js
File metadata and controls
59 lines (56 loc) · 1.52 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
const fs = require("fs");
const readline = require("readline");
const events = require("events");
class Operation {
constructor(name, elements) {
this.name = name;
this.elements = elements;
}
}
const convert = async (file) => {
const stream = fs.createReadStream(file);
const reader = readline.createInterface({
input: stream
});
let array = [];
reader.on("line", line => {
if(line === "")
array.push("\n");
else
array.push(line);
});
await events.once(reader, "close");
return extractData(array);
};
const extractData = (result) => {
const clientData = {};
const first = result.indexOf("\n");
const second = result.indexOf("\n", first + 1);
let third = result.length;
while (result[third -1] === "\n") {
third--;
}
clientData.id = result[0];
clientData.port = result[1];
clientData.replica = result[2];
// parse other clients
clientData.otherClients = [];
for (let i = first + 1; i < second; i++) {
const data = result[i].split(" ");
clientData.otherClients.push({
id: data[0],
address: data[1],
port: data[2]
});
}
// parse actions
clientData.operations = [];
for(let i = second + 1; i < third; i++){
const data = result[i].split(" ");
const [head, ...rest] = data;
clientData.operations.push(
new Operation(head, rest));
}
return clientData;
};
module.exports = {convert};