dynamic update speed for large networks

This commit is contained in:
2025-09-08 16:29:58 -05:00
parent 63ef2b3a9b
commit f9d543c20f
3 changed files with 41 additions and 3 deletions
+8 -2
View File
@@ -51,7 +51,7 @@
<button id="addNode" class="controlButton">Add Node</button> <button id="addNode" class="controlButton">Add Node</button>
<button id="sendPacket" class="controlButton">Send Packet</button> <button id="sendPacket" class="controlButton">Send Packet</button>
<button id="resetTTLColors" class="controlButton">Reset TTL Colors</button> <button id="resetTTLColors" class="controlButton">Reset TTL Colors</button>
<button id="createRandomGraph" class="controlButton">Create Random Graph</button> <button id="createRandomGraph" class="controlButton">Create Random Network</button>
</div> </div>
<div id="simToggles"> <div id="simToggles">
<input type="checkbox" id="showRanges" class="simToggle"> <input type="checkbox" id="showRanges" class="simToggle">
@@ -71,7 +71,13 @@
<div id="randomGraphModalContent"> <div id="randomGraphModalContent">
<label for="randomGraphNodes">Number of Nodes</label> <label for="randomGraphNodes">Number of Nodes</label>
<input type="number" id="randomGraphNodes" value="10" autocomplete="off"> <input type="number" id="randomGraphNodes" value="10" autocomplete="off">
<button id="createRandomGraphConfirm" class="controlButton">Create Random Graph</button> <button id="createRandomGraphConfirm" class="controlButton">Create</button>
</div>
</div>
<div id="warningModal">
<div id="warningModalContent">
<p id="warningModalMessage"></p>
<button id="warningModalConfirm" class="controlButton" onclick="document.getElementById('warningModal').style.display = 'none';">OK</button>
</div> </div>
</div> </div>
</div> </div>
+22
View File
@@ -4,6 +4,7 @@ var DROP_PENALTY = 1.2;
var TTL = 5; var TTL = 5;
var MAX_OUTGOING_CONNECTIONS = 3; var MAX_OUTGOING_CONNECTIONS = 3;
var MAX_INCOMING_CONNECTIONS = 3; var MAX_INCOMING_CONNECTIONS = 3;
var warningModalShown = false;
function smoothColorTransition(color1, color2, min, max, current) { function smoothColorTransition(color1, color2, min, max, current) {
// Clamp current between min and max // Clamp current between min and max
@@ -396,10 +397,28 @@ function main() {
} }
main(); main();
function onNodeAdd() {
var nodeLength = Object.keys(nodeTable).length;
if (nodeLength >= 200 && !warningModalShown) {
warningModalShown = true;
document.getElementById('warningModal').style.display = 'block';
document.getElementById('warningModalMessage').innerHTML = 'Large network detected; simulation speed will be reduced.';
document.getElementById('updateInterval').disabled = true;
document.getElementById('updateInterval').value = nodeLength*2;
UPDATE_INTERVAL = nodeLength*2;
document.getElementById('simSpeed').value = 1;
onEdgeEngine.setSimulationSpeed(1);
} else if (nodeLength >= 200 && warningModalShown) {
document.getElementById('updateInterval').value = nodeLength*2;
UPDATE_INTERVAL = nodeLength*2;
}
}
document.getElementById('addNode').addEventListener('click', function() { document.getElementById('addNode').addEventListener('click', function() {
const nodeId = generateRealisticLabel(); const nodeId = generateRealisticLabel();
nodes.add({id: nodeId, label: nodeId}); nodes.add({id: nodeId, label: nodeId});
nodeTable[nodeId] = {'incoming': [], 'outgoing': [], 'packetCache': []}; nodeTable[nodeId] = {'incoming': [], 'outgoing': [], 'packetCache': []};
onNodeAdd();
}); });
network.on('click', function(properties) { network.on('click', function(properties) {
@@ -410,6 +429,7 @@ network.on('click', function(properties) {
const nodeId = generateRealisticLabel(); const nodeId = generateRealisticLabel();
nodes.add({id: nodeId, label: nodeId, x: properties.pointer.canvas.x, y: properties.pointer.canvas.y}); nodes.add({id: nodeId, label: nodeId, x: properties.pointer.canvas.x, y: properties.pointer.canvas.y});
nodeTable[nodeId] = {'incoming': [], 'outgoing': [], 'packetCache': []}; nodeTable[nodeId] = {'incoming': [], 'outgoing': [], 'packetCache': []};
onNodeAdd();
} }
}); });
@@ -423,6 +443,7 @@ network.on('doubleClick', function(properties) {
const nodeId = generateRealisticLabel(); const nodeId = generateRealisticLabel();
nodes.add({id: nodeId, label: nodeId, x: properties.pointer.canvas.x, y: properties.pointer.canvas.y}); nodes.add({id: nodeId, label: nodeId, x: properties.pointer.canvas.x, y: properties.pointer.canvas.y});
nodeTable[nodeId] = {'incoming': [], 'outgoing': [], 'packetCache': []}; nodeTable[nodeId] = {'incoming': [], 'outgoing': [], 'packetCache': []};
onNodeAdd();
}); });
document.getElementById('sendPacket').addEventListener('click', function() { document.getElementById('sendPacket').addEventListener('click', function() {
@@ -506,6 +527,7 @@ document.getElementById('createRandomGraphConfirm').addEventListener('click', fu
const nodeId = generateRealisticLabel(); const nodeId = generateRealisticLabel();
nodes.add({id: nodeId, label: nodeId, x: Math.random() * 100, y: Math.random() * 100}); nodes.add({id: nodeId, label: nodeId, x: Math.random() * 100, y: Math.random() * 100});
nodeTable[nodeId] = {'incoming': [], 'outgoing': [], 'packetCache': []}; nodeTable[nodeId] = {'incoming': [], 'outgoing': [], 'packetCache': []};
onNodeAdd();
nodeCounter++; nodeCounter++;
if (nodeCounter >= nodeCount) { if (nodeCounter >= nodeCount) {
console.log('Node count reached'); console.log('Node count reached');
+11 -1
View File
@@ -80,7 +80,7 @@ html, body {
margin-bottom: 10px; margin-bottom: 10px;
} }
#randomGraphModal { #randomGraphModal, #warningModal {
display: none; display: none;
position: absolute; position: absolute;
top: 0%; top: 0%;
@@ -93,6 +93,16 @@ html, body {
height: 100%; height: 100%;
} }
#warningModalContent {
padding: 20px;
background-color: #fff;
border: 1px solid #ffee00;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
#randomGraphModalContent { #randomGraphModalContent {
padding: 20px; padding: 20px;
background-color: #fff; background-color: #fff;