#include <SPLITTER.h>
Protected Member Functions | |
virtual void | initialize () |
virtual void | handleMessage (cMessage *msg) |
Definition at line 21 of file SPLITTER.h.
void SPLITTER::handleMessage | ( | cMessage * | msg | ) | [protected, virtual] |
Reimplemented from cSimpleModule.
Definition at line 38 of file SPLITTER.cc.
00039 { 00040 // VARIABLES 00041 int type = msg->getKind(); // VARIABLE TYPE PARA IDENTIFICAR LOS MENSAJES DE LA RED 00042 00043 // ESTRUCTURA CONDICIONAL SWITCH QUE NOS DIFERENCIA LOS MENSAJES QUE LLEGUEN A ESTE MODULO 00044 switch(type) 00045 { 00046 case 0: 00047 // LLEGA UN PAQUETE GATE CON IDENTIFICADOR = 0 00048 if(msg->getKind()==0) 00049 { 00050 GATEmsg *gatemsg=check_and_cast<GATEmsg*>(msg); // CHEQUEAMOS EL PAQUETE GATE 00051 00052 00053 // BUCLE FOR PARA GENERAR UNA COPIA DEL MENSAJE GATE QUE SE MANDA A TODAS LAS ONUS DE LA RED 00054 for( int k=gatemsg->getLambdagate(); k<gateSize("splitterOut"); k=k+(int)par("numlong")) 00055 { 00056 GATEmsg *copy = gatemsg->dup(); // DUPLICAMOS EL PAQUETE GATE QUE SE MANDA A TODAS LAS ONUS DE LA RED 00057 send(copy, "splitterOut$o", k); // ENVIAMOS TODAS LAS COPIAS DEL PAQUETE GATE HACIA TODAS LAS ONUS DE LA RED 00058 } 00059 00060 delete msg; // BORRAMOS EL MENSAJE 00061 } 00062 break; 00063 00064 case 1: 00065 // LLEGA UN PAQUETE ETHERNET CON IDENTIFICADOR = 1 00066 if(msg->getKind()==1) 00067 { 00068 ETHERNETmsg *ethernetmsg=check_and_cast<ETHERNETmsg*>(msg); // CHEQUEAMOS EL PAQUETE ETHERNET 00069 00070 // COMPARAMOS SI LA EL IDENTIFICADOR DE LA DIRECCION DE DESTINO ES IGUAL AL IDENTIFICADOR = 9 QUE CORRESPONDE CON EL OLT 00071 if(ethernetmsg->getDestAddress()==9) 00072 { 00073 // VISUALIZAMOS EL TAMANYO DEL PAQUETE ETHERNET QUE SE MANDA HACIA EL OLT 00074 // //ev<<" Longitud del paquete Ethernet que se manda hacia el OLT: " << ethernetmsg->getByteLength() << " Bytes" << endl; 00075 // ENVIAMOS EL PAQUETE ETHERNET POR LA SALIDA DEL MODULO SPLITTER HACIA EL OLT 00076 if(ethernetmsg->getIsWireless()==1) 00077 { 00078 ev<<" Envio de paquete Ethernet de origen inalambrico al modulo 'OLT_WDMSplitter'."<<endl; 00079 } 00080 else 00081 { 00082 //ev<<" Envio mensaje Ethernet (Id. " << ethernetmsg->getId() << ") al modulo 'OLT_WDMSplitter'." << endl; 00083 } 00084 send(ethernetmsg, "splitterIn$o", ethernetmsg->getLambdaethernet()); 00085 } 00086 else 00087 { 00088 // BUCLE FOR PARA GENERAR UNA COPIA DEL MENSAJE ETHERNET QUE SE MANDA A TODAS LAS ONUS DE LA RED 00089 for( int k=ethernetmsg->getLambdaethernet(); k<gateSize("splitterOut"); k=k+(int)par("numlong")) 00090 { 00091 ETHERNETmsg *copy = ethernetmsg->dup(); // DUPLICAMOS EL PAQUETE ETHERNET QUE SE MANDA A TODAS LAS ONUS DE LA RED 00092 send(copy, "splitterOut$o", k); // ENVIAMOS TODAS LAS COPIAS DEL PAQUETE ETHERNET HACIA TODAS LAS ONUS DE LA RED 00093 } 00094 00095 delete msg; // BORRAMOS EL MENSAJE 00096 } 00097 } 00098 break; 00099 00100 case 2: 00101 // LLEGA UN PAQUETE REPORT CON IDENTIFICADOR = 2 00102 if(msg->getKind()==2) 00103 { 00104 00105 REPORTmsg *reportmsg=check_and_cast<REPORTmsg*>(msg); // CHEQUEAMOS EL PAQUETE REPORT 00106 // ENVIAMOS EL PAQUETE REPORT POR LA SALIDA DEL MODULO SPLITTER HACIA EL OLT 00107 send(reportmsg, "splitterIn$o", reportmsg->getLambdareport()); 00108 } 00109 break; 00110 00111 default: 00112 delete msg; 00113 break; 00114 } 00115 }
void SPLITTER::initialize | ( | ) | [protected, virtual] |