/// <summary>
 /// Procesa un mensaje que no ha podido ser envíado correctamente
 /// </summary>
 /// <param name="message">El mensaje</param>
 internal void routerMessageErrorHandler(Message message)
 {
     //ImAliveMessage
     if (message.Type == MessageType.IMALIVE)
     {
         ImAliveMessage imAliveMessage = (ImAliveMessage)message;
         produceEvent(CommunicationEvent.NETINFORMATION, "ROUTER: message delivery fail " + imAliveMessage.ToString());
     }
     //AckMessage
     else if (message.Type == MessageType.ACK)
     {
         AckMessage ackMessage = (AckMessage)message;
         produceEvent(CommunicationEvent.NETINFORMATION, "ROUTER: message delivery fail " + ackMessage.ToString());
     }
     //Resto de los mensajes
     else
     {
         SubProtocolI subProtocol = (SubProtocolI)subProtocols[message.ProtocolType];
         if (subProtocol != null)
         {
             eventQueuePC.put(new Event(new MessageEvent(subProtocol.errorMessage), message));
         }
         else
         {
             produceEvent(CommunicationEvent.ERRORMESSAGE, message);
         }
         produceEvent(CommunicationEvent.NETINFORMATION, "ROUTER: message delivery fail " + message.ToString());
     }
 }
 /// <summary>
 /// Envía un mensaje a la MANET
 /// </summary>
 /// <param name="message">el mensaje a enviar</param>
 public void send(Message message)
 {
     //ImAliveMessage
     if (message.Type == MessageType.IMALIVE)
     {
         ImAliveMessage imAliveMessage = (ImAliveMessage)message;
         produceEvent(CommunicationEvent.NETINFORMATION, "COMMUNICATION WARNING: reserved kind of message " + imAliveMessage.ToString());
     }
     //AckMessage
     else if (message.Type == MessageType.ACK)
     {
         AckMessage ackMessage = (AckMessage)message;
         produceEvent(CommunicationEvent.NETINFORMATION, "COMMUNICATION WARNING: reserved kind of message " + ackMessage.ToString());
     }
     //Resto de los mensajes
     else
     {
         internalSendMessage(message);
     }
 }