📄 incomingmessagehandler.java
字号:
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 + -