/** * A fila de eventos precisa ser setada com eventos iniciais. Este método seta envios de pacotes * de congestionamento (tráfego de fundo) e também envios de pacotes vindo dos Txs. */ private void setFirstEvents() { resetSimulation(); // Prepara o tráfego de fundo. if (SimulationProperties.isWithCongestion()) { Event firstCongestionPack = new Event( EventType .CongestionPacketIntoRouter); // Evento "Pacote de Tráfego de Fundo chegar ao // roteador" firstCongestionPack.setTime(random.generateExponential(1.0 / congestionPacketFrequency)); getEvents().add(firstCongestionPack); } // Prepara os servidores para transmissão de Tx-Rx. for (Tx tx : getSystem().getTxs()) { double propagationDelay = setPropagationDelay(tx); // Fator aleatório além da propagação e da transmissão. // É zero por padrão, mas este intervalo muda nos cenários 2 e 3. double randTime = random.generateDouble() * SimulationProperties.getAssyncInterval(); Event packSent = new Event(EventType.TxPacketHeadsToRouter); // Evento "Pacote sair do Tx" packSent.setTime(randTime + transmissionTime); packSent.setTxIndex(tx.getIndex()); getEvents().add(packSent); Pack pack = tx.sendPacket(randTime); Event firstTcpPack = new Event(EventType.TxPacketIntoRouter); // Evento "Pacote TCP chegar ao roteador" firstTcpPack.setTime(randTime + transmissionTime + propagationDelay); firstTcpPack.setPack(pack); getEvents().add(firstTcpPack); Event possibleTimeout = new Event(EventType.Timeout); // Evento "Possível Timeout do pacote" possibleTimeout.setTime(randTime + tx.getRTO()); possibleTimeout.setTxIndex(tx.getIndex()); pack.setTimeout(possibleTimeout); getEvents().add(possibleTimeout); } }