kqml_travel_broker.java

来自「《移动Agent技术》一书的所有章节源代码。」· Java 代码 · 共 813 行 · 第 1/2 页

JAVA
813
字号
      try {	rtnMsg.setPerformative("sorry");	rtnMsg.setParameter(":sender", msg.getParameter(":receiver"));	rtnMsg.setParameter(":receiver", msg.getParameter(":sender"));	rtnMsg.setParameter(":in-reply-to", msg.getParameter(":reply-with"));	rtnMsg.setParameter(":reply-with", id);	rtnMsg.setParameter(":language", msg.getParameter(":language"));	rtnMsg.setParameter(":ontology", msg.getParameter(":ontology"));	rtnMsg.setContent("(:errmsg \"" + errmsg + " \")");      } catch (Exception ex) {	ex.printStackTrace();      }//      Conversation c;//      c = km.sendMessage(rtnMsg);      Conversation c = null;      try {	c = km.sendMessage(rtnMsg);      } catch (SendFailedException ex) {	ex.printStackTrace();      } catch (InvalidFormatException ex) {	ex.printStackTrace();      } catch (InvalidMessageSequenceException ex) {	ex.printStackTrace();      } catch (JKQMLException ex) {	ex.printStackTrace();      }       if (c == null) { 	System.err.println(new Date() + 	  " < kqml_travel_broker.doBrokerAll(): sending response message failed");	return false;      } else {	if (debug)	  System.err.println(new Date() + 	    " < kqml_travel_broker.doBrokerAll(): sent response message successfully");	return true;      }    }    Vector tokens = ParseContent.parse((String) askMsg.getContent());    String carrier = null;    String carrierURL = null;    for (int i=0; i < tokens.size(); i++) {      if (((String) tokens.elementAt(i)).equalsIgnoreCase(":carrier")) {	carrier = (String) tokens.elementAt(++i);	if (debug)	  System.err.println(new Date() + 	    " - kqml_travel_broker.doRecruitOne parsing: carrier: " 		+ carrier);	continue;      }    }    if (carrier == null) {      if (debug) 	System.err.println(new Date() + 	  " - kqml_travel_broker.doRecruitOne: carrier not detected in " +	  "content of ask-all performative.");      try {	rtnMsg.setPerformative("sorry");	rtnMsg.setParameter(":sender", msg.getParameter(":receiver"));	rtnMsg.setParameter(":receiver", msg.getParameter(":sender"));	rtnMsg.setParameter(":in-reply-to", msg.getParameter(":reply-with"));	rtnMsg.setParameter(":reply-with", id);	rtnMsg.setParameter(":language", msg.getParameter(":language"));	rtnMsg.setParameter(":ontology", msg.getParameter(":ontology"));	rtnMsg.setContent("(:errmsg \"no carrier specified in content.\" )");      } catch (Exception ex) {	ex.printStackTrace();      }//      Conversation c;//      c = km.sendMessage(rtnMsg);      Conversation c = null;      try {	c = km.sendMessage(rtnMsg);      } catch (SendFailedException ex) {	ex.printStackTrace();      } catch (InvalidFormatException ex) {	ex.printStackTrace();      } catch (InvalidMessageSequenceException ex) {	ex.printStackTrace();      } catch (JKQMLException ex) {	ex.printStackTrace();      }       if (c == null) { 	System.err.println(new Date() + 	  " < kqml_travel_broker.doRecruitOne(): " + 			   " sending response message failed");	return false;      } else {	if (debug)	  System.err.println(new Date() + 	    " < kqml_travel_broker.doRecruitOne(): " + 			     "sent response message successfully");	return true;      }    } else { // if (carrier == null)      KQML askOne = new KQML();      if (debug)	System.err.println(new Date() + 	  " < kqml_travel_broker.doRecruitOne(): " + 			     "(ask-one LC (:name " + carrier + " )) created.");            try {	askOne.setPerformative("ask-one");	askOne.setParameter(":sender", msg.getParameter(":receiver"));	askOne.setParameter(":receiver", facilitator);//	askOne.setParameter(":in-reply-to", msg.getParameter(":reply-with"));	askOne.setParameter(":reply-with", id);	askOne.setParameter(":language", "anACL");	askOne.setParameter(":ontology", "lifeCycle");	askOne.setContent("(:name " + carrier + " )");      } catch (Exception ex) {	ex.printStackTrace();      }      id = idgen.getID();//      Conversation c;//      c = (Conversation) km.sendMessage(askOne);      Conversation c = null;      try {	c = (Conversation) km.sendMessage(askOne);      } catch (SendFailedException ex) {	ex.printStackTrace();      } catch (InvalidFormatException ex) {	ex.printStackTrace();      } catch (InvalidMessageSequenceException ex) {	ex.printStackTrace();      } catch (JKQMLException ex) {	ex.printStackTrace();      }       if (c == null) { 	System.err.println(new Date() + 	  " < kqml_travel_broker.doRecruitOne(): " + 			   " sending ask-one message failed");	return false;      } else { // if (c == null) {	if (debug)	  System.err.println(new Date() + 	    " < kqml_travel_broker.doRecruitOne(): " + 			     "sent ask-one message successfully");	// wait for lifeCycle response	c.getResult().waitFor(10000); // 10 seconds wait	if (c.getResult().isAvailable()) {	  ReturnValue rtn = (ReturnValue) c.getResult().getResult();	  if (rtn.getReturnValue() instanceof AgentInfo) {	    AgentInfo agent = (AgentInfo) rtn.getReturnValue();	    carrierURL = agent.getURL();	    if (debug)	      System.err.println(new Date() + 		" < kqml_travel_broker.doRecruitOne(): " + 		  "tell of ask-one received : URL: " + carrierURL);	  }	}      }      if (carrierURL == null) {	if (debug) 	  System.err.println(new Date() + 	    " - kqml_travel_broker.doRecruitOne: carrier URL not resolved. ");	try {	  rtnMsg.setPerformative("sorry");	  rtnMsg.setParameter(":sender", msg.getParameter(":receiver"));	  rtnMsg.setParameter(":receiver", msg.getParameter(":sender"));	  rtnMsg.setParameter(":in-reply-to", msg.getParameter(":reply-with"));	  rtnMsg.setParameter(":reply-with", id);	  rtnMsg.setParameter(":language", msg.getParameter(":language"));	  rtnMsg.setParameter(":ontology", msg.getParameter(":ontology"));	  rtnMsg.setContent("(:errmsg \"carrier URL cannot resolved.\" )");	} catch (Exception ex) {	  ex.printStackTrace();	}//	c = (Conversation) km.sendMessage(rtnMsg);	try {	  c = (Conversation) km.sendMessage(rtnMsg);	} catch (SendFailedException ex) {	  ex.printStackTrace();	} catch (InvalidFormatException ex) {	  ex.printStackTrace();	} catch (InvalidMessageSequenceException ex) {	  ex.printStackTrace();	} catch (JKQMLException ex) {	  ex.printStackTrace();	} 	if (c == null) { 	  System.err.println(new Date() + 	    " < kqml_travel_broker.doRecruitOne(): " + 			   " sending response message failed");	  return false;	} else {	  if (debug)	    System.err.println(new Date() + 	      " < kqml_travel_broker.doRecruitOne(): " + 			     "sent response message successfully");	  return true;	}      } else { // if (carrierULR == null)	KQML fwdMsg = new KQML();	if (debug) 	  System.err.println(new Date() + 	    " - kqml_travel_broker.doRecruitOne: forward subscribe ask-all" +	    " message sending.");	try {	  fwdMsg.setPerformative("forward");	  fwdMsg.setParameter(":to", carrierURL);	  fwdMsg.setParameter(":from", msg.getParameter(":sender"));	  fwdMsg.setParameter(":receiver", carrierURL);	  fwdMsg.setParameter(":sender", msg.getParameter(":receiver"));	  fwdMsg.setParameter(":reply-with", id);	  fwdMsg.setParameter(":language", "KQML");	  fwdMsg.setParameter(":ontology", "kqml-ontology");	  fwdMsg.setContent(subMsg);	  subMsg.setParameter(":receiver", carrierURL);	  // I should handle nested subscribed performative....	  ((KQML) subMsg.getContent()).setParameter(":receiver", carrierURL);	} catch (Exception ex) {	  ex.printStackTrace();	}	//	c = (Conversation) km.sendMessage(fwdMsg);	try {	  c = (Conversation) km.sendMessage(fwdMsg);	} catch (SendFailedException ex) {	  ex.printStackTrace();	} catch (InvalidFormatException ex) {	  ex.printStackTrace();	} catch (InvalidMessageSequenceException ex) {	  ex.printStackTrace();	} catch (JKQMLException ex) {	  ex.printStackTrace();	} 	if (c == null) { 	  System.err.println(new Date() + 	    " < kqml_travel_broker.doRecruitOne(): " + 			   " sending forward message failed");	  return false;	} else {	  if (debug)	    System.err.println(new Date() + 	      " < kqml_travel_broker.doRecruitOne(): " + 			     "sent forward message successfully");	  return true;	}      }    } // if (carrier == null)  }  /**   * Handles sorry performative.   *    * @param conversation reference to the Conversation   * @param msg KQML message   * @return true if message is interpreted successfully, otherwise false.   *    */  protected boolean doSorry(Conversation conversation, KQML msg) {    if (debug)       System.err.println(new Date() + " > kqml_travel_broker.doSorry entered");    Conversation conv = (Conversation) conversation;    Result res = conv.getResult();    try {      Vector tokens = ParseContent.parse((String) msg.getContent());      String errmsg = null;      for (int i=0; i < tokens.size(); i++) {	if (((String) tokens.elementAt(i)).equalsIgnoreCase(":errmsg")) {	  errmsg = (String) tokens.elementAt(i + 1);	  break;	}      }      if (debug) { 	System.err.println(new Date() + 	  " - kqml_travel_broker.doSorry errmsg: " + errmsg);	System.err.println(new Date() + 	  " - kqml_travel_broker.doSorry Result: " + res);      }      res.setResult(new ReturnValue(false, errmsg));      res.complete();      if (debug) 	System.err.println(new Date() + 	  " < kqml_travel_broker.doSorry completed");            return true;    } catch (ResultException ex) {      System.err.println(ex.getMessage());      if (debug) 	System.err.println(new Date() +           " < kqml_travel_broker.doSorry: ResultException Caught. " +          ex.getMessage());      return true;    }  }  /**   * Handles error performative.   *    * @param conversation reference to the Conversation   * @param msg KQML message   * @return true if message is interpreted successfully, otherwise false.   *    */  protected boolean doError(Conversation conversation, KQML msg) {    if (debug)       System.err.println(new Date() + 			 " > kqml_travel_broker.doError entered");    Conversation conv = (Conversation) conversation;    Result res = conv.getResult();    try {      Vector tokens = ParseContent.parse((String) msg.getContent());      String errmsg = null;      for (int i=0; i < tokens.size(); i++) {	if (((String) tokens.elementAt(i)).equalsIgnoreCase(":errmsg")) {	  errmsg = (String) tokens.elementAt(i + 1);	  break;	}      }      if (debug) { 	System.err.println(new Date() + 	  " - kqml_travel_broker.doError errmsg: " + errmsg);	System.err.println(new Date() + 	  " - kqml_travel_broker.doError Result: " + res);      }      res.setResult(new ReturnValue(false, errmsg));      res.complete();      if (debug) 	System.err.println(new Date() + 	  " < kqml_travel_broker.doError completed");            return true;    } catch (ResultException ex) {      System.err.println(ex.getMessage());      if (debug) 	System.err.println(new Date() +           " < kqml_travel_broker.doError: ResultException caulght. " +	  ex.getMessage());      return true;    }  }  /**   * Handles performatives which not supported in this class.   *    * @param conversation reference to the Conversation   * @param msg KQML message   * @return true if message is interpreted successfully, otherwise false.   *    *//*  protected boolean doOtherPerformatives(Conversation conversation, KQML msg) {    if (debug) {	System.err.println(new Date() +           " - kqml_travel_broker.doOtherPerformatives : "	  + "unknow performative: " + msg.getPerformative()	  + " recieved. message is ignored.");    }    return false;  }*/  String getAirPort(String airport) {    if (airport.equalsIgnoreCase("NRT")) {      return new String("\"(NRT) Tokyo, Japan (Narita)\"");    } else if (airport.equalsIgnoreCase("CDG")) {      return new String("\"(CDG) Paris, France (Charles De Gaulle)\"");    } else if (airport.equalsIgnoreCase("SFO")) {      return new String("\"(SFO) San Francisco, CA, USA\"");    } else if (airport.equalsIgnoreCase("JFK")) {      return new String("\"(JFK) New York, NY, USA (Kennedy Intl)\"");    } else if (airport.equalsIgnoreCase("LHR")) {      return new String("\"(LHR) London, England (Heathrow)\"");    } else if (airport.equalsIgnoreCase("HKG")) {      return new String("\"(HKG) Hong Kong, Hong Kong\"");    } else if (airport.equalsIgnoreCase("HNL")) {      return new String("\"(HNL) Honolulu, HI, USA\"");    } else {      return airport;    }  }  String getTime(String time) {    if (time.endsWith("PM")) {      return "\"" + time.concat("12:15") + "\"";    } else if (time.endsWith("AM")) {      return "\"" + time.concat("10:15") + "\"";    } else {      return time;    }  }}

⌨️ 快捷键说明

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