-
Notifications
You must be signed in to change notification settings - Fork 0
/
Roteador.cpp
71 lines (56 loc) · 1.92 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
69
70
71
#include "Roteador.h"
Roteador::Roteador(int endereco) : endereco (endereco) {
tab = new TabelaDeRepasse();
fila = new Fila(TAMANHO_FILA);
ultimoDadoRecebido = "";
}
TabelaDeRepasse* Roteador::getTabela() {
return this->tab;
}
Fila* Roteador::getFila() {
return this->fila;
}
int Roteador::getEndereco() {
return this->endereco;
}
void Roteador::receber(Datagrama* d) {
if (this->fila->enqueue(d) == false)
cout << "\tFila em " << this->getEndereco() << " estourou" << endl;
}
void Roteador::processar() {
Datagrama* dat = this->fila->dequeue();
if (dat != NULL) {
dat->processar();
Roteador* rot = tab->getDestino(dat->getDestino());
cout << "Roteador " << this->endereco << endl;
if (dat->getTtl() <= 0) {
cout << "\tDestruido por TTL: Origem: " << dat->getOrigem()
<< ", Destino: " << dat->getDestino() << ", TTL: " << dat->getTtl()
<< ", " << dat->getDado() << endl;
delete dat;
} else if (dat->getDestino() == this->endereco) {
cout << "\tRecebido: " << dat->getDado() << endl;
this->ultimoDadoRecebido = dat->getDado();
delete dat;
} else if (rot != NULL) {
cout << "\tEnviado para " << rot->getEndereco() << " " <<
"Origem: " << dat->getOrigem()
<< ", Destino: " << dat->getDestino() << ", TTL: " << dat->getTtl()
<< ", " << dat->getDado() << endl;
rot->receber(dat);
} else
delete dat;
}
}
string Roteador::getUltimoDadoRecebido() {
return ultimoDadoRecebido;
}
void Roteador::imprimir() {
cout << "Ultimo dado recebido foi: " << getUltimoDadoRecebido() << endl;
this->tab->imprimir();
this->fila->imprimir();
}
Roteador::~Roteador() {
delete tab;
delete fila;
}