/**
   * 非同期メッセージを親へと送信するメソッド 親へのメッセージング
   *
   * @param command
   * @param tagValue
   */
  public String callParent(String command, JSONObject... tagValue) {
    debug.assertTrue(parentName != "", "ASYNC parentName not applied yet");
    debug.assertTrue(parentID != "", "ASYNC	parentID not applied yet");

    String messageID = UUID.uuid(8, 16);
    JSONObject messageMap =
        getMessageStructure(
            MS_CATEGOLY_CALLPARENT,
            messageID,
            getName(),
            getID(),
            getParentName(),
            getParentID(),
            command,
            tagValue);
    debug.trace("true	messageMap	" + messageMap.toString());
    sendAsyncMessage(messageMap);
    return messageID;
  }
  /**
   * PostMessageAPI からダイレクトで複数のmessengerが各個に呼ばれる事を想定したメソッド
   *
   * @param rootMessage
   */
  public void onMessagereceivedFromPostMessageAPI(String rootMessage) {
    JSONObject rootObject = null;
    //		Window.alert("受け取った	"+getName());
    try {
      rootObject = JSONParser.parseStrict(rootMessage).isObject();
    } catch (Exception e) {
      debug.trace("receiveMessage_parseError_" + e);
      return;
    }

    if (rootObject == null) {
      debug.trace("rootObject = null");
      return;
    }

    String toName = null;
    {
      /*
       * 宛先チェック
       */
      debug.assertTrue(rootObject.get(KEY_TO_NAME).isString() != null, "invalid KEY_TO_NAME");
      toName = rootObject.get(KEY_TO_NAME).isString().stringValue();

      if (!toName.equals(getName())) { // 送信者の指定した宛先が自分か
        //			NSLog(@"MS_CATEGOLY_CALLPARENT_宛先ではないMessnegerが受け取った");
        return;
      }
    }

    String fromName = null;
    String fromID = null;
    {
      /*
       * 送付元名前チェック
       */
      fromName = rootObject.get(KEY_MESSENGER_NAME).isString().stringValue();
      debug.assertTrue(fromName != null, "invalid KEY_MESSENGER_NAME");

      /*
       * 送付元IDチェック
       */

      fromID = rootObject.get(KEY_MESSENGER_ID).isString().stringValue();
      debug.assertTrue(fromID != null, "invalid KEY_MESSENGER_ID");
    }

    int categoly;
    {
      debug.assertTrue(
          rootObject.get(KEY_MESSAGE_CATEGOLY).isNumber() != null, "no KEY_MESSAGE_CATEGOLY");
      categoly = (int) rootObject.get(KEY_MESSAGE_CATEGOLY).isNumber().doubleValue();
    }

    /*
     * コマンドチェック
     */
    {
      debug.assertTrue(
          rootObject.get(KEY_MESSENGER_EXEC).isString() != null, "KEY_MESSENGER_EXEC = null");
    }

    /*
     * tag-valueチェック
     */
    {
      debug.assertTrue(
          rootObject.get(KEY_MESSENGER_TAGVALUE_GROUP).isObject() != null,
          "KEY_MESSENGER_TAGVALUE_GROUP = null");
    }

    /*
     * 宛先存在チェック
     */
    String toID = null;
    {
      debug.assertTrue(rootObject.get(KEY_TO_ID).isString() != null, "no KEY_TO_ID");
      toID = rootObject.get(KEY_TO_ID).isString().stringValue();
    }
    //		Window.alert("カテゴリチェックまで	メッセージングを受け取りました");

    switch (categoly) {
      case MS_CATEGOLY_LOCAL:
        {
          if (toID.equals(getID())) {
            addReceiveLog(rootObject);
            receiveCenter(rootMessage);
          }
        }
        return;

      case MS_CATEGOLY_CALLCHILD:
        if (toID.equals(getID())) {
          addReceiveLog(rootObject);
          receiveCenter(rootMessage);
        }
        return;

      case MS_CATEGOLY_CALLPARENT:
        // 宛先MIDが自分のIDと一致するか
        if (toID.equals(getID())) {
          //				Window.alert("親として呼ばれた	メッセージングを受け取りました	");
          addReceiveLog(rootObject);
          receiveCenter(rootMessage);
          //				Window.alert("親として呼ばれた2	メッセージングを受け取りました");
        }

        return;

      case MS_CATEGOLY_PARENTSEARCH:
        debug.assertTrue(rootObject.get(KEY_PARENT_NAME).isString() != null, "no KEY_PARENT_NAME");
        String childSearchingName = rootObject.get(KEY_PARENT_NAME).isString().stringValue();
        if (childSearchingName.equals(getName())) {

          JSONObject childInfo = new JSONObject();
          childInfo.put(CHILDLIST_KEY_CHILD_ID, new JSONString(fromID));
          childInfo.put(CHILDLIST_KEY_CHILD_NAME, new JSONString(fromName));

          childList.add(childInfo);
          //				Window.alert("子供っす	"+childList+"	で、名前が	"+childInfo);
          JSONObject messageMap =
              getMessageStructure(
                  MS_CATEGOLY_PARENTSEARCH_RET,
                  UUID.uuid(8, 16),
                  getName(),
                  getID(),
                  fromName,
                  fromID,
                  TRIGGER_PARENTCONNECTED);
          sendAsyncMessage(messageMap);
          addReceiveLog(rootObject);
        }

        return;

      case MS_CATEGOLY_PARENTSEARCH_S:
        debug.assertTrue(rootObject.get(KEY_PARENT_NAME).isString() != null, "no KEY_PARENT_NAME");
        String childSearchingName2 = rootObject.get(KEY_PARENT_NAME).isString().stringValue();
        if (childSearchingName2.equals(getName())) {
          addReceiveLog(rootObject);
          JSONObject childInfo = new JSONObject();
          childInfo.put(CHILDLIST_KEY_CHILD_ID, new JSONString(fromID));
          childInfo.put(CHILDLIST_KEY_CHILD_NAME, new JSONString(fromName));

          childList.add(childInfo);

          JSONObject messageMap =
              getMessageStructure(
                  MS_CATEGOLY_PARENTSEARCH_RET,
                  UUID.uuid(8, 16),
                  getName(),
                  getID(),
                  fromName,
                  fromID,
                  TRIGGER_PARENTCONNECTED);
          MessageMasterHub.getMaster().syncMessage(messageMap.toString());
          addSendLog(messageMap);
        }
        break;

      case MS_CATEGOLY_PARENTSEARCH_RET:
        if (!parentName.equals(fromName)) {
          return;
        }

        if (toID.equals(getID())) {
          if (parentID.equals("")) {
            parentID = fromID;
            addReceiveLog(rootObject);
          } else {
            //					debug.trace("もう別の親が居ます"+ "/fromID	"+fromID);
          }
        }

        return;

      case MS_CATEGOLY_REMOVE_CHILD:
      case MS_CATEGOLY_REMOVE_PARENT:
      default:
        debug.assertTrue(false, "not ready yet or UNKNOWN CATEGOLY");
        return;
    }
  }
 /** 現在のEventBusからこのMessengerのレジスタだけを削除する */
 public void removeFromCurrentMessageAspect() {
   //		debug.timeAssert("11/09/29 17:17:21", 3600, "未完成の切断");//24F8A5DC-A35B-4981-A206-B5AB86690992
   tearDown(postMessageAPIMethod);
   debug.trace("this	" + this + "/postMessageAPIMethod	tearDown	" + postMessageAPIMethod);
 }