/// <summary> /// Envía el mensaje a la MANET /// </summary> /// <param name="netHandler">El manejador de la red</param> /// <param name="ip">la ip de la maquina remota destino</param> internal bool send(NetHandler netHandler, IPAddress ip) { return netHandler.sendTcpMessage(new NetMessage(toByteArray()), ip); }
/// <summary> /// Actualiza los parámetros del router /// </summary> /// <param name="netHandler">El manejador de la red</param> /// <param name="netUser">Los datos del usuario local</param> /// <param name="netUserList">La lista de usuarios de la red</param> public void updateRouterTable(NetHandler netHandler, NetUser netUser, NetUserList netUserList) { this.netHandler = netHandler; this.netUser = netUser; this.netUserList = netUserList; int newMessageNumber = nMessagesCounted; nMessagesCounted = 0; int neighborhoodSize = netUser.NeighborhoodIds.Length; //se incrementa el numero de iteraciones iterations++; //actualizo el promedio de cada registro messageAverage = ((messageAverage * (iterations - 1) + newMessageNumber) / iterations); if (messageAverage > 1) { //calculo el nuevo tamaño optimo de la lista, int size = 1 + (int)(((Math.Log(duplicationProbability, Math.E) / (Math.Log(messageAverage - 1, Math.E) - Math.Log(messageAverage, Math.E))))); //si el nuevo tamaño optimo es mayor, se debe aumentar el tamaño de la lista if (size > messageIdCollection.MaxSize) { messageIdCollection.MaxSize = size; } } }
/// <summary> /// Envía el mensaje a la MANET /// </summary> /// <param name="netHandler">El manejador de la red</param> internal void send(NetHandler netHandler) { netHandler.sendUdpMessage(new NetMessage(toByteArray())); }
/// <summary> /// Constructo Parametrizado /// </summary> /// <param name="configuration">El objeto con los datos de configuración previamente llenado</param> /// <param name="subProtocols">Lista de SubProtocolos</param> /// <param name="extraMessageTypes">Tipos de mensajes no especificados en los sub protocolos</param> public Communication(Configuration configuration, SubProtocolList subProtocols, MessageTypeList extraMessageTypes) { try { this.configuration = configuration; if (extraMessageTypes != null) { messageTypes = extraMessageTypes.Collection; } else { messageTypes = new Hashtable(); } if (subProtocols != null) { Hashtable sub = subProtocols.Collection; foreach (DictionaryEntry en in sub) { SubProtocolI subProtocol = (SubProtocolI)en.Value; Hashtable spMessageTypes = subProtocol.getMessageTypes().Collection; foreach (DictionaryEntry de in spMessageTypes) { messageTypes.Add(de.Key, de.Value); } subProtocol.sendMessageEvent += internalSendMessage; } this.subProtocols = sub; } netHandler = new NetHandler(configuration.NetData, this); eventQueuePC = new EventQueuePC(); eventConsumer = new Thread(new ThreadStart(consumeEvent)); eventConsumerStarted = false; eventConsumerLock = new Object(); init(); } catch (ThreadAbortException e) { throw e; } catch (Exception e) { throw e; } }