コード例 #1
0
  /**
   * *************************************************************************** Begin: Methods to
   * handle children communication
   * ***************************************************************************
   */
  public static void askChildren(BasicActor gridActor) throws Exception {

    // If there are children, then ...
    if (gridActor.getContext().getChildren().iterator().hasNext()) {
      BasicRequest request;
      RequestContent requestContent = gridActor.returnRequestContentToSend();

      // check if it is a MultiRequestContainer
      if (requestContent instanceof MultiRequestContainer) {
        MultiRequestContainer mrequest = (MultiRequestContainer) requestContent;

        // send the current message to the children
        if (mrequest.getCurrentRequestContent() instanceof SingleReceiverRequestContainer) {
          executeAskSpecificChildrenLogic(
              gridActor, (SingleReceiverRequestContainer) mrequest.getCurrentRequestContent());
        } else {
          request =
              new BasicRequest(
                  gridActor.getCurrentTimeStep(),
                  gridActor.downStreamTrace,
                  mrequest.getCurrentRequestContent());
          executeAskChildrenLogic(gridActor, request);
        }
      } else // normal execution without MultiRequestContainer
      {
        request =
            new BasicRequest(
                gridActor.getCurrentTimeStep(), gridActor.downStreamTrace, requestContent);
        executeAskChildrenLogic(gridActor, request);
      }
    }
    gridActor.upStreamTrace.add(gridActor.getSelf());
  }