Exemple #1
0
  @Override
  public void run() {
    if (this.node.nodes.size() > 0) {
      // send to higher IDs
      boolean higher = true;
      for (Node node : this.node.nodes) {
        if (node.id > this.node.id) {
          higher = false;
          XmlRpcSender.execute(
              "startElection",
              new Object[] {this.node.ip, this.node.port, this.node.id},
              node.ip,
              node.port);
        }
      }

      if (higher) {
        // higher...send message to network declaring yourself winner
        System.out.println("Highest ID. I'm the Winner!");
        this.node.setMasterNode(this.node);
        this.advert();
      } else {
        // not higher...wait for response
        System.out.println("waiting for response...");
        for (int i = 0; i < 5; i++) {
          try {
            Thread.sleep(1000);
            if (this.node.responded) {
              System.out.println("I lost the election!");
              return;
            }
          } catch (InterruptedException e) {
            e.printStackTrace();
          }
        }

        System.out.println("No response. I'm the Winner!");
        this.node.setMasterNode(this.node);
        this.advert();
      }
    } else {
      System.out.println("No nodes connected. Setting self to master node");
      this.node.setMasterNode(this.node);
    }
  }
Exemple #2
0
 private void advert() {
   for (Node node : this.node.nodes) {
     XmlRpcSender.execute("masterNodeAnnouncement", new Object[] {this.node.id}, node);
   }
 }