@webwriter/network
Version:
Visualization of network topologies. Can represent different kinds of networks.
43 lines (39 loc) • 1.81 kB
text/typescript
import { ComputerNetwork } from '../../..';
import { PacketSimulator } from '../../event-handlers/packet-simulator';
import { GraphEdge } from '../GraphEdge';
import { Packet, Frame } from '../logicalNodes/DataNode';
import { PhysicalNode } from '../physicalNodes/PhysicalNode';
import { DataHandlingDecorator } from './DataHandlingDecorator';
export class SimpleDecorator extends DataHandlingDecorator {
constructor(component?: PhysicalNode) {
super(component);
this.cssClass.push('simple-decorated');
}
handleDataIn(dataNode: any, previousNode: any, network: ComputerNetwork) {
dataNode = dataNode.remove();
let previousId = previousNode.id();
this.portLinkMapping.forEach((linkId) => {
if (linkId != '' && linkId != null && linkId != undefined) {
let edge: GraphEdge = network._graph.$('#' + linkId).data();
if (edge.target == previousId) {
//do not flood the incoming port
} else if (edge.source == previousId) {
//do not flood the incoming port
} else {
let directTargetId = edge.target == this.id ? edge.source : edge.target;
let newData =
dataNode.data() instanceof Packet
? Packet.cloneData(dataNode.data())
: Frame.cloneData(dataNode.data());
let nextHop = network._graph.$('#' + directTargetId);
network.packetSimulator.initThenDirectSend(
network._graph.$('#' + this.id),
nextHop,
newData,
network
);
}
}
});
}
}