-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathnode1.js
100 lines (84 loc) · 2.57 KB
/
node1.js
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
const express = require('express');
const fs = require('fs');
const request = require('request');
const crypto = require('crypto');
let app = express();
let port = 3001;
let nodeNumber = 1;
//Requests
app.get("/",(req,res)=>{
res.send(`Node-${nodeNumber} Page.`);
})
app.get('/reqData',(req,res)=>{
let fileData = getFileData().toString();
res.send(fileData);
})
app.get('/appendFileData',(req,res)=>{
let fileData = req.param('data');
appendFileData(fileData);
broadcastUpdate(fileData);
res.send('Updated');
})
app.get('/reqUpdateData',(req,res)=>{
console.log(`Update from Node-${req.param('node')}`);
fs.appendFileSync(`node${nodeNumber}.txt`,req.param('data'));
})
//Functions
let init = () => {
getFSHash((fileDataHash)=>{
for(let i=0;i<10;i++){
request.get(`http://127.0.0.1:300${i}`,(error,response,body)=>{
if(!error){
if(i !== nodeNumber){
console.log(`Discovered Node ${i}`);
requestDataFromNode(i,fileDataHash);
}
}else{
//console.log('error');
}
})
}
});
}
let getFSHash = (callback) => {
let fileData = fs.readFileSync(`node${nodeNumber}.txt`);
let hash = crypto.createHash('md5').update(fileData).digest('hex');
callback(hash);
}
let getFileData = () => {
let fileData = fs.readFileSync(`node${nodeNumber}.txt`);
return fileData;
}
let updateFileData = (fileData) => {
fs.writeFileSync(`node${nodeNumber}.txt`,fileData);
}
let requestDataFromNode = (i,fileDataHash) => {
request.get(`http://127.0.0.1:300${i}/reqData`,(error,response,body)=>{
if(!error){
let remoteFileDataHash = crypto.createHash('md5').update(body).digest('hex');
if(fileDataHash != remoteFileDataHash){
updateFileData(body);
console.log('Updated the File');
}else{
console.log(`Not Updated as File Data is Same`);
}
}else{
console.log('Error in Sending Request for Data');
}
})
}
let appendFileData = (fileData) => {
fs.appendFileSync(`node${nodeNumber}.txt`,fileData);
}
let broadcastUpdate = (fileData) => {
for(let i=0;i<10;i++){
if(i !== nodeNumber){
request.get(`http://127.0.0.1:300${i}/reqUpdateData?node=${nodeNumber}&data=${fileData}`,(error,response,body)=>{
})
}
}
}
app.listen(port,()=>{
console.log(`Node-${nodeNumber} started at ${port}`);
init();
})