⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 incomingmessagehandler.java

📁 SRI international 发布的OAA框架软件
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
      if(loggerV2.isDebugEnabled()) {
        loggerV2.debug("IncomingMessageHandler.handleVersion2() found register_solvable_goals");
      }
      handleV2RegisterSolvableGoals(t);
    }
    else {
      loggerV2.warn("IncomingMessageHandler.handleVersion2() handler unspecified for term: [" + t.toString() + "]");
    }
    /*
    getConn().setName(otherName); (wait until we get the solvables)
    getConn().setLang(otherLang); okay lisp
    getConn().setType(otherType); (always client for lisp)
    getConn().setFormat(format); (need this to create a FormatWriter for lisp)
    getConn().setVersion(version); okay lisp
    */
    /*
      receive: term(write_bb(kshost, 'aberdour')).
      reply: <none>
      receive: term(write_bb(language, c)).
      reply: <none>
      receive: term(write_bb(oaa_version, 2.0)).
      reply: <none>
      receive: term(register_solvable_goals([echo_me(ARG_1,ARG_2,ARG_3,ARG_4),echo_me(
      ARG_1,ARG_2,ARG_3),echo_me(ARG_1,ARG_2),echo_me(ARG_1),use_world(ARG_1,ARG_2),no
      tify_shared_info(ARG_1,ARG_2,ARG_3),notify_control_info(ARG_1,ARG_2,ARG_3,ARG_4)
      ,notify_no_sensed_state(ARG_1,ARG_2,ARG_3,ARG_4),notify_sensed_state(ARG_1,ARG_2
      ,ARG_3,ARG_4),notify_state(ARG_1,ARG_2,ARG_3),send_state(ARG_1,ARG_2),update_pro
      file(ARG_1,ARG_2)],'TEST-AGENT')).
      reply: <none>
      receive: term(read_bb(ksdata, [_,ready,_,_])).
      reply: return_read_bb(Solutions)
      receive: term(post_query(goal,params)).
      reply: <none>

      term(write_bb(kshost, 'aberdour')).
      term(write_bb(language, c)).
      term(write_bb(oaa_version, 2.0)).
      term(register_solvable_goals([echo_me(ARG_1,ARG_2,ARG_3,ARG_4),echo_me(ARG_1,ARG
      _2,ARG_3),echo_me(ARG_1,ARG_2),echo_me(ARG_1),use_world(ARG_1,ARG_2),notify_shar
      ed_info(ARG_1,ARG_2,ARG_3),notify_control_info(ARG_1,ARG_2,ARG_3,ARG_4),notify_n
      o_sensed_state(ARG_1,ARG_2,ARG_3,ARG_4),notify_sensed_state(ARG_1,ARG_2,ARG_3,AR
      G_4),notify_state(ARG_1,ARG_2,ARG_3),send_state(ARG_1,ARG_2),update_profile(ARG_
      1,ARG_2)],'TEST-AGENT')).
      term(read_bb(ksdata, [_,ready,_,_])).
      term(trace_on).
      term(replace_bb(ksdata, [InternalName,  open, Solvables, 'TEST-AGENT'], [Interna
      lName, ready, Solvables, 'TEST-AGENT'])).
      term(read_bb(ksdata, [InternalName, ready, Solvables, 'TEST-AGENT'])).

      term(return_read_bb([read_bb(ksdata,[0,ready,[solvable(agent_data(_6862,_6863,_6
      864,_6865,_6866,_6867),[type(data)]),solvable(agent_host(_6848,_6849,_6850),[typ
      e(data)]),agent_version(_6834,_6835,_6836),solvable(facilitator_data(_6822,_6823
      ,_6824,_6825,_6826),[type(data)]),can_solve(_6809,_6810),solvable(agent_location
      (_6798,_6799,_6800,_6801),[type(data)]),solvable(data(_6785,_6786),[type(data)])
      ],root])])).

      term(return_read_bb([])).

     */
  }

  protected final void handleV2WriteBB(IclTerm t)
  {
    String key;
    IclTerm value;

    if(t.size() != 2) {
      loggerV2.warn("IncomingMessageHandler.handleV2WriteBB() expected 2 term IclStruct, got: [" + t.toString() + "]");
      return;
    }

    key = t.getTerm(0).toString();
    value = t.getTerm(1);
    if(key.equals("kshost")) {
      if(loggerV2.isDebugEnabled()) {
        loggerV2.debug("handleV2WriteBB() ignoring " + t.toString());
      }
      // ignore this
    }
    else if(key.equals("language")) {
      getConn().setLang(value);
      if(loggerV2.isDebugEnabled()) {
        loggerV2.debug("handleV2WriteBB() set lang " + value.toString());
      }
    }
    else if(key.equals("oaa_version")) {
      getConn().setVersion(value);
      getConn().setType(new IclStr("client"));
      getConn().verifyFormat(new IclStr(FormatTypes.formatTypes[FormatTypes.DEFAULT]));
      if(loggerV2.isDebugEnabled()) {
        loggerV2.debug("handleV2WriteBB() set version " + value.toString());
      }
    }
    else {
      loggerV2.warn("handleV2WriteBB() ignoring message " + t.toString());
    }
  }

  protected final void handleV2ReadBB(IclTerm t)
  {
    // term(return_read_bb([read_bb(ksdata,[0,ready,[solvable(agent_data(_6862,_6863,_6864,_6865,_6866,_6867),[type(data)]),solvable(agent_host(_6848,_6849,_6850),[type(data)]),agent_version(_6834,_6835,_6836),solvable(facilitator_data(_6822,_6823,_6824,_6825,_6826),[type(data)]),can_solve(_6809,_6810),solvable(agent_location(_6798,_6799,_6800,_6801),[type(data)]),solvable(data(_6785,_6786),[type(data)])],root])])).
    int numReadBB = getConn().getNumReadBB();
    IclTerm reply;
    if(numReadBB == 0) {
      // first request is a request for existing solvables
      reply = new IclStruct("return_read_bb", getConn().getFac().getV2AllSolvables());
    }
    else if(numReadBB == 1) {
      // second request is request for solvables of this agent
      HashSet solvables = getConn().getFac().getSolvablesForId(getConn().getId());
      IclList solvList = new IclList();
      reply = new IclStruct("return_read_bb");
      if(solvables != null) {
        // For each solvable, create a new term that looks like:
        // solvable(solvable_i(args_i),[type(data)])
        IclTerm oneSolv;
        IclList typeList = new IclList(new IclStruct("type", new IclStr("data")));
        ArrayList newSolvables = new ArrayList();
        for(Iterator i = solvables.iterator(); i.hasNext();) {
          oneSolv = (IclTerm)i.next();
          newSolvables.add(new IclStruct("solvable", oneSolv, typeList));
        }
        for(ListIterator li = newSolvables.listIterator(); li.hasNext();) {
          solvables.add(li.next());
        }
        getConn().getFac().addSolvablesForId(getConn().getId(), solvables);
      }
      reply.add(
       new IclList(
        new IclStruct("read_bb",
                      new IclStr("ksdata"),
                      new IclList(
                       getConn().getId().toIclTerm(),
                       new IclStr("ready"),
                       solvList,
                       getConn().getName()))));
      getConn().setOutputReady(true);
      getConn().getOutputReadySem().release();
    }
    else {
      reply = new IclStruct("return_read_bb", new IclList());
    }
    getConn().setNumReadBB(numReadBB + 1);
    if(loggerV2.isDebugEnabled()) {
      loggerV2.debug("IncomingMessageHandler.handleV2ReadBB() sending reply: [" + reply.toString() + "]");
    }
    if(getConn().getOutputReady()) {
      getConn().sendTerm(reply);
    }
    else {
      getConn().sendTerm(reply, true);
    }
  }

  protected final void handleV2RegisterSolvableGoals(IclTerm t)
  {
    IclTerm solvables = t.getTerm(0);
    IclTerm name = t.getTerm(1);
    getConn().setName(name);

    if(loggerV2.isDebugEnabled()) {
      loggerV2.debug("handleV2RegisterSolvables: Registering solvables: " + solvables.toString());
    }

    HashSet solvSet = new HashSet();
    IclTerm oneSolv;
    for(int i = 0; i < solvables.size(); ++i) {
      oneSolv = StandardizeVars.getInstance().from(solvables.getTerm(i));
      solvSet.add(oneSolv);
    }
    getConn().getFac().addSolvablesForId(getConn().getId(), solvSet);
  }

  protected final void handleV2PostQuery(IclTerm t)
  {
    if(loggerV2.isDebugEnabled()) {
      loggerV2.debug("handleV2PostQuery got term: " + t.toString());
    }

    IclTerm goal = t.getTerm(0);
    IclTerm goalId = getConn().getV2GoalId();
    IclTerm goalParamsTerm = t.getTerm(1);
    IclList goalParams;
    if(!goalParamsTerm.isList()) {
      loggerV2.error("handleV2PostQuery() goalParams is not a list; ignoring: [" + t.toString() + "]");
      return;
    }
    else {
      goalParams = (IclList)goalParamsTerm;
    }

    IclTerm broadcast = IclUtils.getParamValue("broadcast", new IclStr("false"), goalParams);
    IclTerm async = IclUtils.getParamValue("asynchronous", new IclStr("false"), goalParams);

    String broadcastVal = broadcast.toIdentifyingString();
    String asyncVal = async.toIdentifyingString();

    StandardizeVars.getInstance().from(goal);
    HashSet ids = getConn().getFac().whoCanSolve(goal);
    if(loggerV2.isDebugEnabled()) {
      loggerV2.debug("handleV2PostQuery() able to solve: " + ids);
    }
    if(ids == null) {
      if(loggerV2.isDebugEnabled()) {
        loggerV2.debug("handleV2PostQuery() No agents can solve goal: [" + goal.toString() + "]");
      }
      else if(loggerV2.isInfoEnabled()) {
        loggerV2.info("handleV2PostQuery() No agents can solve goal: [" + goal.toIdentifyingString() + "]");
      }
      return;
    }

    if(broadcastVal.equals("true") || asyncVal.equals("true")) {
      // fast return?
    }
    else {
      loggerV2.warn("handleV2PostQuery() Solvable would block; ignoring: [" + goal.toString() + "]");
      return;
    }

    SimpleFacConnection conn;
    Iterator it = ids.iterator();
    ConnectionId id;
    IclTerm connGoalId = null;
    IclTerm origin = null;
    IclTerm dest = null;
    IclTerm outEvSolv;
    IclTerm toSend;
    origin = new IclStruct("origin", getConn().getAddressWithId());
    while(it.hasNext()) {
      id = (ConnectionId)it.next();
      if(loggerSolve.isDebugEnabled()) {
        loggerSolve.debug("handleV2PostQuery(): will try to send message [" +
                          goal.toString() +
                          "] to agent " +
                          id);
      }
      conn = getConn().getFac().getConnectionForId(id);
      if(conn != null) {
        if(loggerV2.isDebugEnabled()) {
          if(conn.getVersion() != null) {
            loggerV2.debug("handleV2PostQuery(): getVersion() string is " + conn.getVersion().toString());
          }
          else {
            loggerV2.debug("handleV2PostQuery(): getVersion() is null");
          }
        }
        if((conn.getVersion() != null) && (conn.getVersion().toString().equals("2.0"))) {
          // term(event(KS_NAME, solve(goalId, goal, params))).
          connGoalId = new IclStruct("id", goalId, id.toIclTerm());
          outEvSolv = new IclStruct("solve", connGoalId, goal, goalParams);
          toSend = new IclStruct("event", connGoalId, outEvSolv);
          conn.sendTerm(toSend);
        }
        else {
          connGoalId = new IclStruct("id", goalId, id.toIclTerm());
          dest = new IclStruct("address", (IclTerm)conn.getAddressWithId().clone());
          outEvSolv = new IclStruct("ev_solve", connGoalId, goal, goalParams);
          toSend = new IclStruct("event", outEvSolv, new IclList(dest, origin));
          conn.sendTerm(toSend);
        }
      }
    }
  }
}


  //[term(event(ev_connect([other_name('TestOaaListener'),other_language(java),other_type(client),format(pure_text),other_version(3.2)]),[]))]

//Receive
//-------
// term(event(ev_connect([<parameter list>]),[])).

//term(event(ev_register_solvables(add,[solvable(broadcastif(X1,X2),[],[]),solvable(echo_me(P1,P2,P3,P4),[],[]),solvable(echo_me(P1,P2,P3),[],[]),solvable(echo_me(Msg),[],[])],'TestOaaListener',[if_exists(overwrite)]),[])).
// term(event(ev_register_solvables(add,[solvable(solve_name(VARS),[<params, including callback name>],[])...],'other_name',[<params for registration>--assume overwrite]),[])).




//Send
//-------
//term(event(ev_connected([oaa_address(addr(tcp('130.107.65.150',3378),1)),other_id(0),other_type(facilitator),other_name(root),other_language(prolog),other_version(3.2),other_dialect(sicstus),format(default)]),[])).
//term(event(ev_connected(


//term(event(ev_data_updated(g_11,add,agent_host(addr(tcp('130.107.65.150',3378),1),'TestOaaListener',agent1),[address(addr(tcp('130.107.65.150',3378)))],[addr(tcp('130.107.65.150',3378))],[addr(tcp('130.107.65.150',3378))]),[address(addr(tcp('130.107.65.150',3378),1))])).

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -