private LinkedList<Neighbor> loadNeighbors(String xmlFile) throws ParserConfigurationException { LinkedList<Neighbor> ns = new LinkedList<Neighbor>(); try { DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder(); Document doc = docBuilder.parse(new File(xmlFile)); doc.getDocumentElement().normalize(); NodeList neighborsList = doc.getElementsByTagName("neighbor"); for (int i = 0; i < neighborsList.getLength(); i++) { Neighbor n = new Neighbor(); NamedNodeMap atributes = neighborsList.item(i).getAttributes(); n.setIp(InetAddress.getByName(atributes.getNamedItem("ip").getNodeValue())); n.setNumberOfOcupiedSlots(0); n.setNumberOfSlots( Integer.parseInt(atributes.getNamedItem("availableSlots").getNodeValue())); n.setPort(Integer.parseInt(atributes.getNamedItem("listenPort").getNodeValue())); ns.add(n); } } catch (SAXException ex) { Logger.getLogger(Neighborhood.class.getName()).log(Level.SEVERE, null, ex); } catch (IOException ex) { Logger.getLogger(Neighborhood.class.getName()).log(Level.SEVERE, null, ex); } return ns; }
@Override public void execute() throws IOException { boolean dvChanged = true; String key = IPUtils.getUniqueKey(senderIP, senderPort); Neighbor neighbor = DVState.getNeighbors().get(key); if (neighbor == null) { System.err.println(Constants.NO_NEIGHBOUR); return; } if (neighbor != null) { synchronized (neighbor.getLock()) { neighbor.setLinkUp(); DVState.addDVTask(neighbor); DVState.addTimeoutTask(neighbor); } } // Update my distance vector for this node DVEntry entry = DVState.getDistanceVector().get(key); entry.setCost(neighbor.getCost()); entry.setNeighbor(neighbor); if (!received) DVSenderUtil.sendLinkUpMessage(neighbor); // Re-calculate the distance vector dvChanged = DVState.computeDistanceVector(neighbor); // If distance vector changes, send an update to all if (dvChanged) { DVSenderUtil.sendVectorToAllNeighbors(); } }
public static void printNeighbors(ArrayList neighbors) { int i = 0; for(Neighbor neighbor : neighbors) { Instance instance = neighbor.getInstance(); System.out.println("\nNeighbor " + (i + 1) + ", distance: " + neighbor.getDistance()); i++; for(Feature f : instance.getAttributes()) { System.out.print(f.getName() + ": "); if(f instanceof Category) { System.out.println(((Category)f).getCategory().toString()); } else if(f instanceof Distance) { System.out.println(((Distance)f).getDistance().toString()); } else if (f instanceof Expiration) { System.out.println(((Expiration)f).getExpiry().toString()); } else if (f instanceof Handset) { System.out.print(((Handset)f).getOs().toString() + ", "); System.out.println(((Handset)f).getDevice().toString()); } else if (f instanceof Offer) { System.out.println(((Offer)f).getOfferType().toString()); } else if (f instanceof WSAction) { System.out.println(((WSAction)f).getAction().toString()); } } } }
public void leaveDSSystem() { List<Neighbor> neighbors = Configuration.getNeighbors(); Iterator<Neighbor> neighborsIterator = neighbors.iterator(); while (neighborsIterator.hasNext()) { Neighbor temp = neighborsIterator.next(); Message leaveMsg = new LEAVEMessage(temp.getIpAddress(), temp.getPortNumber()); myMsgTransfer.sendMessage(leaveMsg); } }
public void printConnectedNeighbors() { System.out.println("Connected Neighbors:"); List<Neighbor> neighbors = Configuration.getNeighbors(); Iterator<Neighbor> neighborsIterator = neighbors.iterator(); while (neighborsIterator.hasNext()) { Neighbor temp = neighborsIterator.next(); System.out.println(temp.toString()); } }
void insert(Neighbor node) { Neighbor prev = null, next = list; double distance = node.distance; while (next != null && next.distance < distance) { prev = next; next = prev.next; } node.next = next; if (prev == null) { list = node; } else { prev.next = node; } }
public static WSAction.Action determineMajority(ArrayList neighbors) { int yea = 0, ney = 0; for(int i = 0; i < neighbors.size(); i++) { Neighbor neighbor = neighbors.get(i); Instance instance = neighbor.getInstance(); if(instance.isRedeemed()) { yea++; } else { ney++; } } if(yea > ney) { return WSAction.Action.Redeem; } else {
public void forwardSerMsg(Message message) { List<Neighbor> neighbors = Configuration.getNeighbors(); Iterator<Neighbor> neighborsIterator = neighbors.iterator(); while (neighborsIterator.hasNext()) { Neighbor temp = neighborsIterator.next(); if (!message.ip_from.matches(temp.getIpAddress()) || message.port_from != temp.getPortNumber()) { Message serMsg = new SERMessage( message.query, message.hops + 1, message.ip_from, message.port_from, temp.getIpAddress(), temp.getPortNumber()); noOfFwdMsg++; System.out.println( "Forwarded query : " + message.ip_from + ":" + message.port_from + " TO " + temp.getIpAddress() + ":" + temp.getPortNumber()); myMsgTransfer.sendMessage(serMsg); } } }
@Override public Neighbor<double[], E>[] knn(double[] q, int k) { if (k < 1) { throw new IllegalArgumentException("Invalid k: " + k); } Set<Integer> candidates = obtainCandidates(q); Neighbor<double[], E> neighbor = new Neighbor<double[], E>(null, null, 0, Double.MAX_VALUE); @SuppressWarnings("unchecked") Neighbor<double[], E>[] neighbors = (Neighbor<double[], E>[]) java.lang.reflect.Array.newInstance(neighbor.getClass(), k); HeapSelect<Neighbor<double[], E>> heap = new HeapSelect<Neighbor<double[], E>>(neighbors); for (int i = 0; i < k; i++) { heap.add(neighbor); } int hit = 0; for (int index : candidates) { double[] key = keys.get(index); if (q == key && identicalExcluded) { continue; } double distance = Math.distance(q, key); if (distance < heap.peek().distance) { heap.add(new Neighbor<double[], E>(key, data.get(index), index, distance)); hit++; } } heap.sort(); if (hit < k) { @SuppressWarnings("unchecked") Neighbor<double[], E>[] n2 = (Neighbor<double[], E>[]) java.lang.reflect.Array.newInstance(neighbor.getClass(), hit); int start = k - hit; for (int i = 0; i < hit; i++) { n2[i] = neighbors[i + start]; } neighbors = n2; } return neighbors; }
@Override public Neighbor<double[], E> nearest(double[] q) { Set<Integer> candidates = obtainCandidates(q); Neighbor<double[], E> neighbor = new Neighbor<double[], E>(null, null, -1, Double.MAX_VALUE); for (int index : candidates) { double[] key = keys.get(index); if (q == key && identicalExcluded) { continue; } double distance = Math.distance(q, key); if (distance < neighbor.distance) { neighbor.index = index; neighbor.distance = distance; neighbor.key = key; neighbor.value = data.get(index); } } return neighbor; }
Neighbor getByIpAndPort(InetAddress inetAddress, int port) { Neighbor neighbor = null; for (Neighbor n : neighbors) { try { if (n.getIp().equals(inetAddress) && n.getPort() == port) { neighbor = n; break; } } catch (NullPointerException e) { if (inetAddress != null) { System.out.println("Searching for: " + inetAddress.getCanonicalHostName() + ":" + port); } else { System.out.println( "Inet addres is null - happens if there was an error while comunicating with the client"); } System.out.println("Neighbors size = " + neighbors.size()); e.printStackTrace(); } } return neighbor; }
public Long gather(Neighbor<Long, NullValue> neighbor) { return neighbor.getNeighborValue(); }