예제 #1
0
  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();
    }
  }
예제 #3
0
    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());
                }
            }
        }
    }
예제 #4
0
파일: Node.java 프로젝트: bruntha1991/ds
 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);
   }
 }
예제 #5
0
파일: Node.java 프로젝트: bruntha1991/ds
  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());
    }
  }
예제 #6
0
 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;
   }
 }
예제 #7
0
    public static WSAction.Action determineMajority(ArrayList neighbors) {
        int yea = 0, ney = 0;

        for(int i = 0; i &lt; neighbors.size(); i++) { 			Neighbor neighbor = neighbors.get(i); 			Instance instance = neighbor.getInstance(); 			if(instance.isRedeemed()) { 				yea++; 			} 			else { 				ney++; 			} 		} 		 		if(yea &gt; ney) {
            return WSAction.Action.Redeem;
        }
        else {
예제 #8
0
파일: Node.java 프로젝트: bruntha1991/ds
  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);
      }
    }
  }
예제 #9
0
  @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;
  }
예제 #10
0
  @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;
  }
예제 #11
0
 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();
 }