Skip to content
Snippets Groups Projects
Commit 34fe3b2d authored by arshiam2's avatar arshiam2
Browse files

updated commands

parent 4ae6f389
No related branches found
No related tags found
1 merge request!1updated commands
// @flow
const path = require("path");
const chalk = require("chalk");
const dgram = require("dgram");
const process = require("process");
const handleErrors = require("../utils/handleErrors");
const PORT = 5000;
const HOST = "172.22.158.17";
const socket = dgram.createSocket({ type: "udp4", reuseAddr: true });
const machineToIps = {
"0": "172.16.138.158",
"1": "172.22.156.15",
"2": "172.22.158.15",
"3": "172.22.154.16",
"4": "172.22.156.16",
"5": "172.22.158.16",
"6": "172.22.154.17",
"8": "172.22.158.17",
"9": "172.22.154.18",
"10": "172.22.156.18"
};
module.exports.command = "initialize [number]";
module.exports.describe = "test commands";
module.exports.builder = (yargs: any) => yargs;
socket.bind(PORT);
function sendMessage(host, number) {
const message = Buffer.from(`initialize`);
console.log(host);
socket.send(message, 0, message.length, 20000, host, function() {});
}
module.exports.handler = handleErrors(async (argv: {}) => {
console.log("Sending message to introducer");
let number = argv.number;
if (number != undefined) {
await sendMessage(machineToIps[number], number);
}
process.exit(0);
});
......@@ -47,12 +47,17 @@ socket.on("listening", function() {
});
socket.on("message", function(message, rinfo) {
const parsedMessage = JSON.parse(message);
Object.keys(JSON.parse(message)).map(key => console.log(key + " " + parsedMessage[key]["status"]))
console.log("GOT MESSAGE")
console.info(`Message from: ${rinfo.address}:${rinfo.port} - ${message}`);
// console.log(JSON.parse(message))
const parsedMessage = JSON.parse(message);
Object.keys(JSON.parse(message)).map(key =>
console.log(key + " " + parsedMessage[key])
);
});
function sendMessage(host, number) {
const message = Buffer.from(`list`);
const message = Buffer.from(`list ${number}`);
console.log(host);
socket.send(message, 0, message.length, 20000, host, function() {});
}
......
......@@ -14,7 +14,7 @@ socket.bind(PORT);
let connections = {};
let machineNumber = 1;
let timeAllowed = 60 * 2 * 1000;
const machineToIps = {
"0": "172.16.138.158",
......@@ -29,82 +29,124 @@ const machineToIps = {
"10": "172.22.156.18"
};
const IpsToMachine = {
"0.0.0.0": "0",
"172.16.138.158": "0",
"172.22.156.15": "1",
"172.22.158.15": "2",
"172.22.154.16": "3",
"172.22.156.16": "4",
"172.22.158.16": "5",
"172.22.154.17": "6",
"172.22.158.17": "8",
"172.22.154.18": "9",
"172.22.156.18": "10"
};
let machineNumber = -1;
socket.on("listening", function() {
socket.addMembership(MULTICAST_ADDR);
socket.setBroadcast(true);
// setInterval(sendMessage, 2500);
const address = socket.address();
console.log(
`UDP socket listening on ${address.address}:${address.port} pid: ${
process.pid
}`
);
resetConnections()
// console.log(Date.now())
machineNumber = IpsToMachine[address.address];
setInterval(checkAll, 1000 * 2);
setInterval(checkConnections, timeAllowed);
});
function resetConnections() {
connections = {
"1": {
status: "alive",
timestamp: 0
},
"2": {
function resetConnections(machineIds) {
connections = {};
console.log(machineIds);
machineIds.forEach(element => {
connections[element] = {
status: "alive",
timestamp: 0
},
"3": {
status: "alive",
timestamp: 0
},
"4": {
status: "alive",
timestamp: 0
},
"5": {
status: "alive",
timestamp: 0
}
};
};
});
// ( m => {
// connections[id] = {
// status: "alive",
// timestamp: 0
// }
// });
// console.log(id)
// connections[id] = {
// status: "alive",
// timestamp: 0
// }
// }
console.log(connections);
}
function check() {
console.log(machineToIps["1"])
function checkAll() {
Object.keys(connections).map(m => check(m));
}
function check(machineNumberBeingChecked) {
// console.log(machineNumberBeingChecked)
// console.log(machineToIps[machineNumberBeingChecked])
// console.log("my machien number" + machineNumber)
// const message = Buffer.from(`check ${machineToIps[machineNumber]}`);
const message = Buffer.from(`check ${machineToIps[0]}`);
socket.send(message, 0, message.length, PORT, machineToIps["1"], function() {});
const message = Buffer.from(`check ${machineToIps[machineNumber]}`);
socket.send(
message,
0,
message.length,
PORT,
machineToIps[machineNumberBeingChecked],
function() {}
);
}
function sendMessage() {
function sendListResponse() {
const message = JSON.stringify(connections);
socket.send(message, 0, message.length, CLI_PORT, CLI_HOST, function() {});
}
function sendAck(synIP) {
const message = Buffer.from(`ack ${machineNumber}`)
console.log(machineToIps[machineNumber])
console.log(PORT)
console.log(synIP)
const message = Buffer.from(`ack ${machineNumber}`);
socket.send(message, 0, message.length, PORT, synIP, function() {});
}
//checks all the connections to make sure the latest ack was in the last two minutes
function checkConnections() {
const machines = Object.keys(connections);
const currentTime = Date.now();
for (let machine in machines) {
if (connections[machine]) {
// console.log((currentTime - connections[machine].timestamp))
if (timeAllowed >= currentTime - connections[machine].timestamp) {
connections[machine].status = "alive";
} else {
connections[machine].status = "dead";
}
}
}
console.log(connections);
}
socket.on("message", function(message, rinfo) {
const text = message.toString().split(" ");
if (text[0] === "list") {
sendMessage();
check();
checkConnections();
sendListResponse();
}
if (text[0] === "check") {
console.log("Sending Ack")
sendAck(text[1])
// set
// sendMessage();
// console.log("Sending Ack")
sendAck(text[1]);
}
if (text[0] === "ack") {
// console.log("GOT ACK")
console.log(text[1])
connections[text[1]]["timestamp"] = Date.now()
console.log(connections[text[1]])
connections[text[1]]["timestamp"] = Date.now();
// console.log(connections[text[1]])
}
if (text[0] == "initialize") {
console.log("initialize");
resetConnections([1, 2, 3, 4, 5]);
}
});
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment