UNPKG

@webwriter/network

Version:

Visualization of network topologies. Can represent different kinds of networks.

99 lines (88 loc) 3.06 kB
import { LogicalNode } from './LogicalNode'; export abstract class Data extends LogicalNode { layer2header; constructor(color: string) { super(color); this.cssClass.push('data-node'); } } export class Packet extends Data { layer2header = { macSender: '', macReceiver: '', }; layer3header = { ipSender: '', ipReceiver: '', }; constructor(color: string, macSender: string, macReceiver: string, ipv4Sender: string, ipv4Receiver: string) { super(color); this.id = 'packet' + crypto.randomUUID(); this.layer2header.macSender = macSender; this.layer2header.macReceiver = macReceiver; this.layer3header.ipSender = ipv4Sender; this.layer3header.ipReceiver = ipv4Receiver; this.cssClass.push('packet-node'); if (macSender != '' && macReceiver != '') { this.cssClass.push('data-node-layer2-layer3'); } else { this.cssClass.push('data-node-layer3'); } } static cloneData(data: Packet): Packet { let newData: Packet = new Packet( data.color, data.layer2header.macSender, data.layer2header.macReceiver, data.layer3header.ipSender, data.layer3header.ipReceiver ); return newData; } } export class Frame extends Data { layer2header = { macSender: '', macReceiver: '', ipSender: '', ipReceiver: '', }; private constructor(color: string) { super(color); this.id = 'frame' + crypto.randomUUID(); this.cssClass.push('frame-node'); } static cloneData(data: Frame): Frame { let newData: Frame = new Frame(data.color); newData.cssClass = data.cssClass; newData.layer2header = data.layer2header; newData.name = data.name; return newData; } static createArpRequest(color: string, macSender: string, ipSender: string, ipReceiver: string): Frame { let arpReq: Frame = new Frame(color); arpReq.layer2header.macSender = macSender; arpReq.layer2header.macReceiver = 'FF:FF:FF:FF:FF:FF'; //broadcast arpReq.layer2header.ipSender = ipSender; arpReq.layer2header.ipReceiver = ipReceiver; arpReq.name = 'L2 ARP req'; arpReq.cssClass.push('arp-req-node'); return arpReq; } static createArpResponse( color: string, macSender: string, macReceiver: string, ipSender: string, ipReceiver: string ): Frame { let arpRes: Frame = new Frame(color); arpRes.layer2header.macSender = macSender; arpRes.layer2header.macReceiver = macReceiver; arpRes.layer2header.ipSender = ipSender; arpRes.layer2header.ipReceiver = ipReceiver; arpRes.name = 'L2 ARP res'; arpRes.cssClass.push('arp-res-node'); return arpRes; } }