@northernblock/triangulation-algorithm
v1.0.0
Published
Accept or reject a nodes location based on ping times
Downloads
4
Readme
Triangulation Algorithm for SkyTech Project
Installation
npm i @northernblock/triangulation-algorithm
Usage
To import the library, you can write
const triangulate = require('@northernblock/triangulation-algorithm')
Then, triangulate
is a function that takes 2 parameters:
- newNodePings: new nodes ping data to all other nodes on the network
- existingNodePings: existing nodes on the networks pings to each other
triangulate
function throws errors
const newNodePings = { A: 180, B: 200, C: 400, D: 300 }
const existingNodePings = {
A: { B: 500, C: 500, D: 500 },
B: { A: 500, C: 500, D: 500 },
C: { A: 500, B: 500, D: 500 },
D: { A: 500, B: 500, C: 500 },
}
try {
const res = triangulate(newNodePings, existingNodePings)
// expected output: [{ A: 180, D: 300, B: 200 }]
} catch (e) {
console.log(e.message)
}
Scripts
npm test
to run all test units
Errors
- If
newNodePings
is null or undefined:Received: ${newNodePings}. newNodePings cannot be null or undefined
- If
newNodePings
is not an object:Received: ${newNodePings}. newNodePings needs to be an object
- If ping data inside
newNodePings
is not defined:newNodePings has an undefined value: ${nodePingTime}
- If ping data inside
newNodePings
is not an Integer:Received ${nodePingTime} of type ${typeof nodePingTime}. Node pings need to be Integers. Make sure they are numbers, not strings. ( you can use parseInt(string) )
- If
existingNodePings
is null or undefined:Received: ${existingNodePings}. existingNodePings cannot be null or undefined.
) - If
existingNodePings
is not an Object:Received: ${existingNodePings}. existingNodePings needs to be an object
- If node data inside
existingNodePings
is null or undefined:Received: ${existingNodePingData}. existingNodePingData cannot be null or undefined
- If node data inside
existingNodePings
is not an Object:Received ${existingNodePingData} for one of the ping times. Each nodes pingtimes to other nodes needs to be an object in this format: { [nodeId]: pingTime }
- If ping times of node data inside
existingNodePings
is null or undefined:One node ping in existingNodePings has an undefined value: ${nodePingTime}
- If ping times of node data inside
existingNodePings
is not an Integer:node pings need to be Integers. Make sure they are numbers, not strings. ( you can use parseInt(string) )
- If
newNodePings
has less than 4 distances:Please provide 4 or more distances.
- If
newNodePings
doesn't include all the nodes provided inexistingNodePings
:Please provide ping time to all nodes!
- If a collision is detected:
New node collides with node(s) ${arrayOfNodes}
- If the algorithm has detected that a node is lying about it's distance from another node:
New node falls outside of the globe because of distances ${arrayOfNodesWithDistances}
- If ping data received is not valid:
Ping data received is not valid
- Internal errors:
Something went horribly wrong inside /lib/ping-validator.js
,Internal error... something bad has happened!