Ejemplo n.º 1
0
  /**
   * This is the standard method the define periodic activity. The frequency of execution of this
   * method is defined by a {@link peersim.edsim.CDScheduler} component in the configuration.
   */
  public void nextCycle(Node node, int pid) {
    Linkable linkable = (Linkable) node.getProtocol(FastConfig.getLinkable(pid));
    if (linkable.degree() > 0) {
      Node peern = linkable.getNeighbor(CommonState.r.nextInt(linkable.degree()));

      // XXX quick and dirty handling of failures
      // (message would be lost anyway, we save time)
      if (!peern.isUp()) {
        return;
      }

      ((Transport) node.getProtocol(FastConfig.getTransport(pid)))
          .send(
              node,
              peern,
              new FloodMessage(value, ddl, node, node, String.valueOf(node.getID())),
              pid);
      System.out.println("Start " + node.getID() + " ->" + peern.getID());
    }
  }
Ejemplo n.º 2
0
  /** This is the standard method to define to process incoming messages. */
  public void processEvent(Node node, int pid, Object event) {

    FloodMessage aem = (FloodMessage) event;

    if (aem.value == this.value) {

      System.out.println(
          "Sucess  at time: "
              + CommonState.getTime()
              + " ddl="
              + aem.ddl
              + ", path is: "
              + aem.path
              + "->"
              + node.getID()
              + "  search value:"
              + aem.value
              + " this node'value is:"
              + value);
    } else {
      aem.ddl++;
      if (aem.ddl <= 8) {
        System.out.println(
            "Forward at time: "
                + CommonState.getTime()
                + " ddl="
                + aem.ddl
                + ", path is: "
                + aem.path
                + "->"
                + node.getID()
                + "  search value:"
                + aem.value
                + " this node'value is:"
                + value);
        Linkable linkable = (Linkable) node.getProtocol(FastConfig.getLinkable(pid));

        if (linkable.degree() > 0) {
          for (int i = 0; i < linkable.degree(); i++) {

            Node peern = linkable.getNeighbor(i);
            if (peern.getID() != aem.sender.getID()
                && peern.getID() != aem.directsender.getID()) // ��ԭʼ��sender����һ��ת���ڵ�
            {
              // XXX quick and dirty handling of failures
              // (message would be lost anyway, we save time)
              if (!peern.isUp()) {
                return;
              }

              ((Transport) node.getProtocol(FastConfig.getTransport(pid)))
                  .send(
                      node,
                      peern,
                      new FloodMessage(
                          aem.value,
                          aem.ddl,
                          aem.sender,
                          node,
                          aem.path + "->" + String.valueOf(node.getID())),
                      pid);
            }
          }
        }
      } else {
        System.out.println(
            "Failed  at time: "
                + CommonState.getTime()
                + " ddl="
                + aem.ddl
                + ", path is: "
                + aem.path
                + "->"
                + node.getID()
                + "  search value:"
                + aem.value
                + " this node'value is:"
                + value);
      }
    }
    /*
    if( aem.sender!=null )
    ((Transport)node.getProtocol(FastConfig.getTransport(pid))).
    send(
    node,
    aem.sender,
    new AverageMessage(value,null),
    pid);

    value = (value + aem.value) / 2;
     */
  }
Ejemplo n.º 3
0
 // envoi d'un message (l'envoi se fait via la couche transport)
 public void send(Message msg, Node dest) {
   this.log("Send " + msg.getContent() + " to " + dest.getID());
   this.transport.send(getMyNode(), dest, msg, this.mypid);
 }