/** Retira o próximo evento da fila de prioridades, e o trata. */ public void handleEvents() { // Não é esperado que esta lista esteja vazia... if (getEvents().isEmpty()) throw new RuntimeException(); // Evento é retornado e deletado da fila. Event event = getEvents().poll(); currentTime = event.getTime(); switch (event.getType()) { case CongestionPacketIntoRouter: handleCongestionPacketIntoRouterEvent(event); break; case TxPacketIntoRouter: handleTxPacketIntoRouter(event); break; case Timeout: handleTimeout(event); break; case RouterSuccessfullySentPacket: handleRouterSuccessfullySentPacket(event); break; case TxPacketHeadsToRouter: handleTxPacketHeadsToRouter(event); break; case SackArrives: handleSackArrives(event); break; default: throw new RuntimeException(); // Não deve existir outro evento... } }