kqml_travel_broker.java

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

JAVA
813
字号
/* kqml_travel_broker.java * $Id: kqml_travel_broker.java,v 2.3 1997-11-19 19:22:41+09 ht Exp $ $Name: alpha5_1-release $ */package com.ibm.acl.kqml.interpreter;import com.ibm.acl.kqml.*;import com.ibm.acl.facilitator.FacilitatorProperties;import com.ibm.acl.kqmlsample.travel.FlightInfo;import java.io.IOException;import java.util.*;/** * Class kqml_travel_broker interprets the contents which written in  * language anAcl and ontology travel_broker. This class supports the following * performatives: broker-all, recruit-one, sorry, and error.  * * @version     $Revision: 2.3 $ $Date: 1997-11-19 19:22:41+09 $ * @author      Hajime Tsuchitani */public class kqml_travel_broker extends kqml_kqml_ontology {  private static final String rcsid = "$Id: kqml_travel_broker.java,v 2.3 1997-11-19 19:22:41+09 ht Exp $ $Name: alpha5_1-release $";  private boolean debug = KQMLManager.debug;  /**   * variable description goes here   */  private KQMLManager km;  private  Conversation conv;  /**   * variable description goes here   */  private IDGenerator idgen;  private String facilitator;  // url of the faclitator  /**   * Constructs kqml_travel_broker with no specified parameter.   *   */  public kqml_travel_broker() {    FacilitatorProperties fp;    try {      fp = new FacilitatorProperties();    } catch (IOException ex) {      ex.printStackTrace();      return;    }    facilitator = fp.getOneURL("ktp");    if (facilitator == null) {      System.err.println(" no ktp facilitator found, system exit!");      System.exit(1);    }    if (debug)       System.err.println(new Date() +         " > kqml_travel_broker.kqml_travel_broker(): faclitator url: " +	facilitator);  }  /**   * Conversation calls this method to interprete    * the content of the received KQML message.   *   * @param conversation reference to the Conversation   * @param msg KQML message   * @return true if message is interpreted successfully, otherwise false.   *    */  public synchronized boolean doInterpret(Conversation conversation,					  KQML msg) {    if (debug)      System.err.println(new Date() + 			 " > kqml_travel_broker.doInterpret(): entered");    conv = (Conversation) conversation;    km = conv.getKQMLManager();    String performative = msg.getPerformative();    if (performative.equalsIgnoreCase("broker-all")) {      return doBrokerAll(conversation, msg);    } else if (performative.equalsIgnoreCase("recruit-one")) {      return doRecruitOne(conversation, msg);    } else if (performative.equalsIgnoreCase("sorry")) {      return doSorry(conversation, msg);    } else if (performative.equalsIgnoreCase("error")) {      return doError(conversation, msg);    } else {      return super.doInterpret(conv, msg);    }         }  /**   * Handles broker-all performative.   *    * @param conversation reference to the Conversation   * @param msg KQML message   * @return true if message is interpreted successfully, otherwise false.   *    */  protected boolean doBrokerAll(Conversation conversation, KQML msg) {    if (debug)       System.err.println(new Date() +         " > kqml_travel_broker.doBrokerAll entered");    KQML rtnMsg = new KQML();    Conversation conv = (Conversation) conversation;    idgen = conv.getIDGenerator();    String id = idgen.getID();    KQML askMsg;    if (msg.getContent() instanceof KQML) {      askMsg = (KQML) msg.getContent();      if (! askMsg.getPerformative().equalsIgnoreCase("ask-all")) {	if (debug)	  System.err.println(new Date() + 	    " - kqml_travel_broker.doBrokerAll: borker-all contents is not ask-all. ");		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 \"cannot handle broker-all " + 			    askMsg.getPerformative() + "\")");	} catch (Exception ex) {	  ex.printStackTrace();	}	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;	}      }    } else {      if (debug)	System.err.println(new Date() + 	  " - kqml_travel_broker.doBrokerAll broker-all's content is not KQML. ");      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 \"broker-all's content is not KQML\" )");      } catch (Exception ex) {	ex.printStackTrace();      }      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;      }    }        // get expiration time from the content of ask-all    Vector tokens =       ParseContent.parse((String)  askMsg.getContent());    // default expiration time is 10 seconds    String expirationTime = new String("10");     for (int i=0; i < tokens.size(); i++) {      if (((String) tokens.elementAt(i)).equalsIgnoreCase(":expirationTime")) {	expirationTime = (String) tokens.elementAt(++i);	if (debug)	  System.err.println(new Date() + 	    " - kqml_travel_broker.doBrokerAll parsing: expirationTime: " 		+ expirationTime);	continue;      }    }    KQML rctMsg = new KQML(); // create recruit-all message    try {      rctMsg.setPerformative("recruit-all");      rctMsg.setParameter(":sender", msg.getParameter(":receiver"));      rctMsg.setParameter(":receiver", facilitator);//    rctMsg.setParameter(":in-reply-to", msg.getParameter(":reply-with"));      rctMsg.setParameter(":reply-with", id);      rctMsg.setParameter(":language", "KQML");      rctMsg.setParameter(":ontology", "kqml-ontology");      rctMsg.setContent(askMsg);    } catch (Exception ex) {      ex.printStackTrace();    }//    Conversation c;//    c = (Conversation) km.sendMessage(rctMsg);    Conversation c = null;    try {      c = (Conversation) km.sendMessage(rctMsg);    } 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");	// wait for result      long waitmills = new Long(expirationTime).longValue() * 1000;      long due = System.currentTimeMillis() + waitmills;      long left;      Vector flights = new Vector();      StringBuffer content = new StringBuffer();      if (debug) 	System.err.println(new Date() + 	  " - kqml_travel_broker.doBrokerAll(): waiting in " + expirationTime 	  + " for response of recruit-all.");      while ((left = due - System.currentTimeMillis()) > 0) {	c.getResult().waitFor(left);	if (c.getResult().isAvailable()) {	  ReturnValue rtn = (ReturnValue) c.getResult().getSubscribedResult();	  if (rtn.isOK()) {	    if (rtn.getReturnValue() instanceof Vector) {	      flights = (Vector) rtn.getReturnValue();	      for (int i=0; i < flights.size(); i++) {		FlightInfo flightInfo = (FlightInfo) flights.elementAt(i);		if (debug)		  System.err.println(new Date() + 		    " - kqml_travel_broker.doBrokerAll(): got FlightInfo. "		    + " making tell message");				content.append(" :carrier ");		content.append(flightInfo.getCarrier());		content.append(" :flight ");		content.append(flightInfo.getFlight());		content.append(" :departure ");		content.append("\"" + getAirPort(flightInfo.getDeparture()) + "\"");		content.append(" :arrival ");		content.append("\"" + getAirPort(flightInfo.getArrival()) + "\"");		content.append(" :deptTime ");		content.append("\"" + getTime(flightInfo.getDeptTime()) + "\"");		content.append("\n");			      }	    }	  }	}      }      id = idgen.getID();      if (content.length() != 0) {	try {	  rtnMsg.setPerformative("tell");	  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", "anACL");	  rtnMsg.setParameter(":ontology", "travel");	  rtnMsg.setContent("("+ content + " )");	} catch (Exception ex) {	  ex.printStackTrace();	}      } else {	if (debug) 	  System.err.println(new Date() + 	    " - kqml_travel_broker.doBrokerAll: No flight recieved.");	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", "anACL");	  rtnMsg.setParameter(":ontology", "travel-broker");	  rtnMsg.setContent("(:errmsg \" No flight found.\")");	} 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.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;      }    }  }  /**   * Handles recruit-one performative.   *    * @param conversation reference to the Conversation   * @param msg KQML message   * @return true if message is interpreted successfully, otherwise false.   *    */  protected boolean doRecruitOne(Conversation conversation, KQML msg) {    if (debug)       System.err.println(new Date() +         " > kqml_travel_broker.doRecruitOne entered");    KQML rtnMsg = new KQML();    Conversation conv = (Conversation) conversation;    idgen = conv.getIDGenerator();    String id = idgen.getID();    KQML subMsg = null; // subscribe message    KQML askMsg = null; // ask-all message    String errmsg = null;    // error check    if (msg.getContent() instanceof KQML) {      subMsg = (KQML) msg.getContent();       if (! subMsg.getPerformative().equalsIgnoreCase("subscribe")) {	errmsg = new String("Content of the recruit-one is not subscribe. ");      } else if (subMsg.getContent() instanceof KQML) {	askMsg = (KQML) subMsg.getContent();	if (! askMsg.getPerformative().equalsIgnoreCase("ask-all")) {	  errmsg = new String("Content of subscribe of the recruit-one is not"           + " ask-all. ");	} else {	  // (recruit-one (subscribe (ask-all ..))) is OK.	}      } else {	errmsg = new String("Content of subscribe of the recruit-one is not" 			    + " KQML. ");      }    } else {      errmsg = new String("Content of the recruit-one is not KQML");    }    if (errmsg != null) {      if (debug)	System.err.println(new Date() + 	  " - kqml_travel_broker.doBrokerAll: borker-all contents is invalide: " 	  + "reason: " + errmsg);

⌨️ 快捷键说明

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