public SetNetworkLinkEndsWhenNodesLinked(LinkIdentifier linkId, IObservable <NetworkEvent> networkEvents, IDisplayLink displayLink, NodePositionReadModel nodePositions) { networkEvents .OfType <NetworkEvent, NetworkEvent.LinkAdded>() .Where(linkAdded => linkAdded.Link.Id == linkId) .Subscribe(linkAdded => displayLink.DisplayLink(nodePositions[linkAdded.Link.Source], nodePositions[linkAdded.Link.Sink])); }
private void TransmitPacket(PacketIdentifier packetId, LinkIdentifier linkId) { float delay = linkLatency[linkId]; displayTransmission.Display(packetId, delay); Observable.Timer(TimeSpan.FromSeconds(delay)) .Subscribe(_ => CompleteTransmission(packetId, linkId)); }
public OnStartTransmission(LinkIdentifier linkId, IObservable <NetworkEvent> networkEvents, IDisplayPacketTransmission displayTransmission, LinkLatencyReadModel linkLatency, IEnqueueCommand <NetworkCommand> commandQueue) { this.displayTransmission = displayTransmission; this.linkLatency = linkLatency; this.commandQueue = commandQueue; networkEvents .OfType <NetworkEvent, NetworkEvent.PacketTransmissionStarted>() .Where(transmissionStarted => transmissionStarted.LinkId == linkId) .Subscribe(transmissionStarted => TransmitPacket(transmissionStarted.PacketId, transmissionStarted.LinkId)); }
private void Initialize(NodeIdentifier nodeId, LinkIdentifier linkId) { commandQueue.Enqueue(new NetworkCommand.IncrementPacketTypeDirection(nodeId, PacketType.Red)); commandQueue.Enqueue(new NetworkCommand.IncrementPacketTypeDirection(nodeId, PacketType.Blue)); commandQueue.Enqueue(new NetworkCommand.IncrementPacketTypeDirection(nodeId, PacketType.Green)); }
public float this[LinkIdentifier linkId] => _latencies.Lookup(linkId).OrElseDefault();
private void CompleteTransmission(PacketIdentifier packetId, LinkIdentifier linkId) { commandQueue.Enqueue(new NetworkCommand.CompleteTransmission(packetId, linkId)); }