Skip to content

Commit dba1457

Browse files
Layers (#50)
- Layer’s and device-type’s enums introduced. - Function for creating a Device with it type. --------- Co-authored-by: Tomás Grüner <[email protected]>
1 parent 6cf23f2 commit dba1457

File tree

10 files changed

+201
-43
lines changed

10 files changed

+201
-43
lines changed

src/index.ts

Lines changed: 40 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,7 @@ import { Application, Graphics, EventSystem, Assets } from "pixi.js";
1313
import * as pixi_viewport from "pixi-viewport";
1414
import { ViewGraph } from "./types/graphs/viewgraph";
1515
import {
16-
AddPc,
17-
AddRouter,
18-
AddServer,
16+
AddDevice,
1917
loadFromFile,
2018
loadFromLocalStorage,
2119
saveToFile,
@@ -24,6 +22,7 @@ import {
2422
} from "./types/viewportManager";
2523
import { DataGraph } from "./types/graphs/datagraph";
2624
import { Packet } from "./types/packet";
25+
import { DeviceType, Layer } from "./types/devices/device";
2726

2827
const WORLD_WIDTH = 10000;
2928
const WORLD_HEIGHT = 10000;
@@ -41,10 +40,14 @@ export class GlobalContext {
4140
loadFromLocalStorage(this);
4241
}
4342

44-
load(datagraph: DataGraph) {
43+
private setNetWork(datagraph: DataGraph, layer: Layer) {
4544
this.datagraph = datagraph;
4645
this.viewport.clear();
47-
this.viewgraph = new ViewGraph(this.datagraph, this.viewport);
46+
this.viewgraph = new ViewGraph(this.datagraph, this.viewport, layer);
47+
}
48+
49+
load(datagraph: DataGraph, layer: Layer = Layer.Link) {
50+
this.setNetWork(datagraph, layer);
4851
this.setupAutoSave();
4952
saveToLocalStorage(this);
5053
}
@@ -82,6 +85,11 @@ export class GlobalContext {
8285
this.saveIntervalId = null;
8386
}
8487
}
88+
89+
// (!) For layer abstraction functionality
90+
// changeViewGraph(layer: string) {
91+
// this.setNetWork(this.datagraph, layerFromName(layer));
92+
// }
8593
}
8694

8795
// > graphics.ts
@@ -336,13 +344,21 @@ export class RightBar {
336344
RightBar.getInstance();
337345

338346
// Add router button
339-
leftBar.addButton(RouterSvg, () => AddRouter(ctx), "Add Router");
347+
leftBar.addButton(
348+
RouterSvg,
349+
() => AddDevice(ctx, DeviceType.Router),
350+
"Add Router",
351+
);
340352

341353
// Add server button
342-
leftBar.addButton(ServerSvg, () => AddServer(ctx), "Add Server");
354+
leftBar.addButton(
355+
ServerSvg,
356+
() => AddDevice(ctx, DeviceType.Server),
357+
"Add Server",
358+
);
343359

344360
// Add PC button
345-
leftBar.addButton(ComputerSvg, () => AddPc(ctx), "Add PC");
361+
leftBar.addButton(ComputerSvg, () => AddDevice(ctx, DeviceType.Pc), "Add PC");
346362

347363
ctx.initialize(viewport);
348364

@@ -401,6 +417,22 @@ export class RightBar {
401417

402418
pauseButton.onclick = triggerPause;
403419

420+
// (!) For layer abstraction functionality
421+
// const layerSelect = document.getElementById(
422+
// "layer-select",
423+
// ) as HTMLSelectElement;
424+
425+
// const selectNewLayer = (event: Event) => {
426+
// const selectedLayer = (event.target as HTMLSelectElement).value;
427+
// console.log(`Layer selected: ${selectedLayer}`);
428+
429+
// if (selectElement) {
430+
// ctx.changeViewGraph(selectedLayer);
431+
// }
432+
// };
433+
434+
// layerSelect.onchange = selectNewLayer;
435+
404436
document.body.onkeyup = function (e) {
405437
if (e.key === " " || e.code === "Space") {
406438
triggerPause();

src/types/devices/device.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,19 @@ export const DEVICE_SIZE = 20;
2020

2121
let selectedDeviceId: number | null = null; // Stores only the ID instead of 'this'
2222

23+
export enum Layer {
24+
App = 0,
25+
Transport = 1,
26+
Network = 2,
27+
Link = 3,
28+
}
29+
30+
export enum DeviceType {
31+
Router = 0,
32+
Server = 1,
33+
Pc = 2,
34+
}
35+
2336
export function setSelectedDeviceId(value: number | null) {
2437
selectedDeviceId = value;
2538
}
@@ -300,6 +313,18 @@ export class Device extends Sprite {
300313
this.removeHighlight(); // Calls removeHighlight on deselect
301314
setSelectedDeviceId(null);
302315
}
316+
317+
getType(): DeviceType {
318+
// Return the device’s type.
319+
// For the superclass, the type returned is Router.
320+
return DeviceType.Router;
321+
}
322+
323+
getLayer(): Layer {
324+
// Return the device’s layer.
325+
// For the superclass, the layer returned is Link.
326+
return Layer.Link;
327+
}
303328
}
304329

305330
function onPointerMove(event: FederatedPointerEvent): void {

src/types/devices/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,4 @@ export { Device } from "./device";
44
export { Router } from "./router";
55
export { Server } from "./server";
66
export { Pc } from "./pc";
7+
export { createDevice } from "./utils";

src/types/devices/pc.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
// src/devices/pc.ts
22

3-
import { Device } from "./device";
3+
import { Device, DeviceType, Layer } from "./device";
44
import { ViewGraph } from "../graphs/viewgraph";
55
import PcImage from "../../assets/pc.svg";
66

77
export class Pc extends Device {
88
constructor(
99
id: number,
1010
viewgraph: ViewGraph,
11-
position: { x: number; y: number },
11+
position: { x: number; y: number } | null = null,
1212
) {
1313
super(id, PcImage, viewgraph, position);
1414
}
@@ -27,4 +27,12 @@ export class Pc extends Device {
2727

2828
this.addCommonButtons();
2929
}
30+
31+
getLayer(): Layer {
32+
return Layer.App;
33+
}
34+
35+
getType(): DeviceType {
36+
return DeviceType.Pc;
37+
}
3038
}

src/types/devices/router.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
// src/devices/router.ts
22

3-
import { Device } from "./device";
3+
import { Device, DeviceType, Layer } from "./device";
44
import { ViewGraph } from "../graphs/viewgraph";
55
import RouterImage from "../../assets/router.svg";
66

77
export class Router extends Device {
88
constructor(
99
id: number,
1010
viewgraph: ViewGraph,
11-
position: { x: number; y: number },
11+
position: { x: number; y: number } | null = null,
1212
) {
1313
super(id, RouterImage, viewgraph, position);
1414
}
@@ -27,4 +27,12 @@ export class Router extends Device {
2727

2828
this.addCommonButtons();
2929
}
30+
31+
getLayer(): Layer {
32+
return Layer.Network;
33+
}
34+
35+
getType(): DeviceType {
36+
return DeviceType.Router;
37+
}
3038
}

src/types/devices/server.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
// src/devices/server.ts
22

3-
import { Device } from "./device";
3+
import { Device, DeviceType, Layer } from "./device";
44
import { ViewGraph } from "../graphs/viewgraph";
55
import ServerImage from "../../assets/server.svg";
66

77
export class Server extends Device {
88
constructor(
99
id: number,
1010
viewgraph: ViewGraph,
11-
position: { x: number; y: number },
11+
position: { x: number; y: number } | null = null,
1212
) {
1313
super(id, ServerImage, viewgraph, position);
1414
}
@@ -27,4 +27,12 @@ export class Server extends Device {
2727

2828
this.addCommonButtons();
2929
}
30+
31+
getLayer(): Layer {
32+
return Layer.App;
33+
}
34+
35+
getType(): DeviceType {
36+
return DeviceType.Server;
37+
}
3038
}

src/types/devices/utils.ts

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import { ViewGraph } from "../graphs/viewgraph";
2+
import { Device, DeviceType, Layer } from "./device";
3+
import { Pc } from "./pc";
4+
import { Router } from "./router";
5+
import { Server } from "./server";
6+
7+
export function createDevice(
8+
type: DeviceType,
9+
id: number,
10+
viewgraph: ViewGraph,
11+
position: { x: number; y: number } | null = null,
12+
): Device {
13+
switch (type) {
14+
case DeviceType.Router:
15+
return new Router(id, viewgraph, position);
16+
case DeviceType.Server:
17+
return new Server(id, viewgraph, position);
18+
case DeviceType.Pc:
19+
return new Pc(id, viewgraph, position);
20+
}
21+
}
22+
23+
export function layerFromName(name: string): Layer {
24+
switch (name) {
25+
case "application":
26+
// Lógica específica para la capa de aplicación
27+
console.log("Application Layer selected");
28+
return Layer.App;
29+
case "transport":
30+
// Lógica específica para la capa de transporte
31+
console.log("Transport Layer selected");
32+
return Layer.Transport;
33+
case "network":
34+
// Lógica específica para la capa de red
35+
console.log("Network Layer selected");
36+
return Layer.Network;
37+
case "link":
38+
// Lógica específica para la capa de enlace
39+
console.log("Link Layer selected");
40+
return Layer.Link;
41+
}
42+
}

src/types/graphs/datagraph.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
1+
import { DeviceType } from "../devices/device";
2+
13
export interface GraphNode {
24
x: number;
35
y: number;
4-
type: string;
6+
type: DeviceType;
57
connections: Set<number>;
68
}
79

810
export interface GraphDataNode {
911
id: number;
1012
x: number;
1113
y: number;
12-
type: string;
14+
type: DeviceType;
1315
connections: number[];
1416
}
1517

@@ -54,7 +56,7 @@ export class DataGraph {
5456
}
5557

5658
// Add a new device to the graph
57-
addNewDevice(deviceInfo: { x: number; y: number; type: string }): number {
59+
addNewDevice(deviceInfo: { x: number; y: number; type: DeviceType }): number {
5860
const id = this.idCounter++;
5961
const graphnode: GraphNode = {
6062
...deviceInfo,

src/types/graphs/viewgraph.ts

Lines changed: 13 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,22 @@
1-
import { Device, Pc, Router, Server } from "./../devices/index"; // Import the Device class
1+
import { Device } from "./../devices/index"; // Import the Device class
22
import { Edge } from "./../edge";
33
import { DataGraph } from "./datagraph";
44
import { Viewport } from "../..";
5+
import { Layer } from "../devices/device";
6+
import { createDevice } from "../devices/utils";
57

68
export class ViewGraph {
79
private devices: Map<number, Device> = new Map<number, Device>();
810
private edges: Map<number, Edge> = new Map<number, Edge>();
911
private idCounter = 1;
1012
private datagraph: DataGraph;
13+
private layer: Layer;
1114
viewport: Viewport;
1215

13-
constructor(datagraph: DataGraph, viewport: Viewport) {
16+
constructor(datagraph: DataGraph, viewport: Viewport, layer: Layer) {
1417
this.datagraph = datagraph;
1518
this.viewport = viewport;
19+
this.layer = layer;
1620
this.constructView();
1721
}
1822

@@ -22,24 +26,13 @@ export class ViewGraph {
2226
const connections = new Set<{ deviceId: number; adyacentId: number }>();
2327

2428
this.datagraph.getDevices().forEach(([deviceId, graphNode]) => {
25-
let device: Device;
26-
switch (graphNode.type) {
27-
case "Router":
28-
device = new Router(deviceId, this, {
29-
x: graphNode.x,
30-
y: graphNode.y,
31-
});
32-
break;
33-
case "Server":
34-
device = new Server(deviceId, this, {
35-
x: graphNode.x,
36-
y: graphNode.y,
37-
});
38-
break;
39-
case "Pc":
40-
device = new Pc(deviceId, this, { x: graphNode.x, y: graphNode.y });
41-
break;
42-
}
29+
const position = { x: graphNode.x, y: graphNode.y };
30+
const device: Device = createDevice(
31+
graphNode.type,
32+
deviceId,
33+
this,
34+
position,
35+
);
4336

4437
this.viewport.addChild(device);
4538

0 commit comments

Comments
 (0)