Skip to content
Merged
Show file tree
Hide file tree
Changes from 8 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/context.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,13 @@ export class GlobalContext {
private saveIntervalId: NodeJS.Timeout | null = null;
private ipGenerator: IpAddressGenerator;

initialize(viewport: Viewport) {
initialize(viewport: Viewport, layer: string) {
this.viewport = viewport;

const baseIp = "192.168.1.0";
const mask = "255.255.255.0";
this.ipGenerator = new IpAddressGenerator(baseIp, mask);
loadFromLocalStorage(this);
loadFromLocalStorage(this, layer);
}

getNextIp(): { ip: string; mask: string } {
Expand Down
4 changes: 4 additions & 0 deletions src/graphics/left_bar.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,8 @@ export class LeftBar {
img.classList.add("icon-img");
button.appendChild(img);
}

clear() {
this.leftBar.textContent = "";
}
}
48 changes: 22 additions & 26 deletions src/index.ejs
Original file line number Diff line number Diff line change
@@ -1,33 +1,29 @@
<!DOCTYPE html>
<!doctype html>
<html>
<head>
<title><%= htmlWebpackPlugin.options.title %></title>
</head>

<head>
<title>
<%= htmlWebpackPlugin.options.title %>
</title>
</head>

<body>
<body>
<div id="top-bar">
<button id="new-button" class="new-button" title="New">New</button>
<button id="save-button" class="save-button" title="Save">Save</button>
<button id="load-button" class="load-button" title="Load">Load</button>
<div id="app-title">GEduNet</div>
<button id="new-button" class="new-button" title="New">New</button>
<button id="save-button" class="save-button" title="Save">Save</button>
<button id="load-button" class="load-button" title="Load">Load</button>
<div id="app-title">GEduNet</div>
</div>
<div id="bottom-screen" class="row container">
<div id="left-bar" class="left-bar"></div>
<div class="canvas-container">
<canvas id="canvas"></canvas>
<button id="pause-button" class="pause-button" title="Pause"></button>
<select id="layer-select" class="dropdown-menu">
<option value="application">App Layer</option>
<option value="transport">Transport Layer</option>
<option value="network">Network Layer</option>
<option value="link">Link Layer</option>
</select>
</div>
<div id="right-bar" class="right-bar"></div>
<div id="left-bar" class="left-bar"></div>
<div class="canvas-container">
<canvas id="canvas"></canvas>
<button id="pause-button" class="pause-button" title="Pause"></button>
<select id="layer-select" class="dropdown-menu">
<option value="application">App Layer</option>
<option value="transport">Transport Layer</option>
<option value="network">Network Layer</option>
<option value="link">Link Layer</option>
</select>
</div>
<div id="right-bar" class="right-bar"></div>
</div>
</body>

</body>
</html>
56 changes: 37 additions & 19 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,29 +46,49 @@ import PauseSvg from "./assets/pause-icon.svg";
const viewport = new Viewport(app.renderer.events);
app.stage.addChild(viewport);

// Get the layer’s menu
const layerSelect = document.getElementById(
"layer-select",
) as HTMLSelectElement;

// Left bar logic
const leftBar = LeftBar.getFrom(document);
RightBar.getInstance();

// Add router button
leftBar.addButton(
RouterSvg,
() => AddDevice(ctx, DeviceType.Router),
"Add Router",
);
const addRouterButton = () =>
leftBar.addButton(
RouterSvg,
() => AddDevice(ctx, DeviceType.Router),
"Add Router",
);

const addHostButton = () =>
leftBar.addButton(
ComputerSvg,
() => AddDevice(ctx, DeviceType.Host),
"Add Host",
);

function setButtonsByLayer(layer: string) {
leftBar.clear();

const buttonConfig: Record<string, (() => void)[]> = {
application: [addHostButton],
transport: [addHostButton],
network: [addRouterButton, addHostButton],
link: [addRouterButton, addHostButton],
};

buttonConfig[layer]?.forEach((addButton) => addButton());
}

// Add Host button
leftBar.addButton(
ComputerSvg,
() => AddDevice(ctx, DeviceType.Host),
"Add Host",
);
setButtonsByLayer(layerSelect.value);

ctx.initialize(viewport);
// Initialize Context
ctx.initialize(viewport, layerSelect.value);

// Ticker logic
// app.ticker.add(() => { });

const lBar = document.getElementById("left-bar");
const rBar = document.getElementById("right-bar");
const tBar = document.getElementById("top-bar");
Expand Down Expand Up @@ -126,16 +146,14 @@ import PauseSvg from "./assets/pause-icon.svg";
pauseButton.onclick = triggerPause;

// (!) For layer abstraction functionality
const layerSelect = document.getElementById(
"layer-select",
) as HTMLSelectElement;

const selectNewLayer = (event: Event) => {
const selectedLayer = (event.target as HTMLSelectElement).value;
console.log(`Layer selected: ${selectedLayer}`);

if (selectedLayer) {
ctx.changeViewGraph(selectedLayer);
// LeftBar is reset
setButtonsByLayer(selectedLayer);
}
};

Expand All @@ -149,7 +167,7 @@ import PauseSvg from "./assets/pause-icon.svg";
};

// TODO: load from local storage directly, without first generating a context
loadFromLocalStorage(ctx);
loadFromLocalStorage(ctx, layerSelect.value);

console.log("initialized!");
})();
1 change: 0 additions & 1 deletion src/types/devices/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,6 @@ export function layerFromName(name: string): Layer {

export function layerIncluded(layer1: Layer, layer2: Layer) {
// Determines whether layer1 is included within layer2’s abstraction.
console.log(`${layer1.valueOf()} <= ${layer2.valueOf()}`);
return layer1.valueOf() <= layer2.valueOf();
}

Expand Down
4 changes: 0 additions & 4 deletions src/types/graphs/viewgraph.ts
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,6 @@ export class ViewGraph {
}
});

console.log("Finished creating devices in ViewGraph");
connections.forEach((key) => {
const connection = parseConnectionKey(key);
const device1 = this.getDevice(connection.id1);
Expand Down Expand Up @@ -308,17 +307,14 @@ export class ViewGraph {
connections: Set<string>,
) {
graph.get(v).connections.forEach((w) => {
console.log(`Se accede a ${w} desde ${v}`);
if (!visited.has(w)) {
console.log(`Se visita ${w}`);
const adyacent = this.datagraph.getDevice(w);
// mark node as visited
visited.add(w);
if (layerIncluded(layerFromType(adyacent.type), this.layer)) {
// add connection between v and w
const connectionKey: string = generateConnectionKey(w, s);
if (!connections.has(connectionKey)) {
console.log(`Dispositivos agregados a conexion`);
connections.add(connectionKey);
}
} else {
Expand Down
8 changes: 4 additions & 4 deletions src/types/viewportManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { Edge } from "./edge";
import { RightBar } from "../graphics/right_bar";
import { Packet } from "./packet";
import { DeviceType } from "./devices/device";
import { createDevice } from "./devices/utils";
import { createDevice, layerFromName } from "./devices/utils";

type Selectable = Device | Edge | Packet;

Expand Down Expand Up @@ -141,15 +141,15 @@ export function saveToLocalStorage(ctx: GlobalContext) {
console.log("Graph saved in local storage.");
}

export function loadFromLocalStorage(ctx: GlobalContext) {
export function loadFromLocalStorage(ctx: GlobalContext, currLayer: string) {
const jsonData = localStorage.getItem(LOCAL_STORAGE_KEY) || "[]";
try {
const graphData: GraphData = JSON.parse(jsonData);
ctx.load(DataGraph.fromData(graphData));
ctx.load(DataGraph.fromData(graphData), layerFromName(currLayer));
} catch (error) {
const extraData = { jsonData, error };
console.error("Failed to load graph from local storage.", extraData);
ctx.load(new DataGraph());
ctx.load(new DataGraph(), layerFromName(currLayer));
return;
}
console.log("Graph loaded from local storage.");
Expand Down
Loading