-
Notifications
You must be signed in to change notification settings - Fork 0
/
Roteador.cpp
69 lines (55 loc) · 2.04 KB
/
Roteador.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include "Roteador.h"
Roteador::Roteador(int endereco) : endereco(endereco) {
tabelaDoRoteador = new TabelaDeRepasse(TAMANHO);
filaDeDatagramas = new Fila(TAMANHO);
}
Roteador::~Roteador() {
delete tabelaDoRoteador;
delete filaDeDatagramas;
}
bool Roteador::mapear(int endereco, Roteador* adjacente, int atraso) {
return tabelaDoRoteador->mapear(endereco, adjacente, atraso);
}
void Roteador::setPadrao(Roteador* padrao, int atraso) {
tabelaDoRoteador->setPadrao(padrao, atraso);
}
int Roteador::getEndereco() {
return endereco;
}
void Roteador::receber(Datagrama* d) {
if (filaDeDatagramas->enqueue(d) == false) {
cout << "\tFila em " << endereco << "estourou" << endl;
}
}
Evento* Roteador::processar(int instante) {
Datagrama* dtRetirado;
if (filaDeDatagramas->isEmpty() == true)
return NULL;
else {
cout << "Roteador " << endereco << endl;
dtRetirado = filaDeDatagramas->dequeue();
if (dtRetirado->getDestino() == endereco) {
cout << "\tRecebido: " << dtRetirado->getDado() << endl;
delete dtRetirado;
return NULL;
}
else {
int atraso;
Roteador* proximoRoteador = tabelaDoRoteador->getProximoSalto(dtRetirado->getDestino(), atraso);
if (proximoRoteador == NULL) {
cout << "\tSem proximo: " << "Origem: " << dtRetirado->getOrigem() << ", Destino: " << dtRetirado->getDestino() << ", "<< dtRetirado->getDado() << endl;
delete dtRetirado;
return NULL;
}
else {
cout << "\tRepassado para " << proximoRoteador->getEndereco() << " (instante " << instante + atraso << "): ";
cout << "Origem: " << dtRetirado->getOrigem() << " Destino: " << dtRetirado->getDestino() << ", " << dtRetirado->getDado() << endl;
Evento* evento = new Evento(instante + atraso, proximoRoteador, dtRetirado);
return evento;
}
}
}
}
void Roteador::imprimir()
{
}