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 + -
显示快捷键?