ktpagent.java

来自「《移动Agent技术》一书的所有章节源代码。」· Java 代码 · 共 443 行

JAVA
443
字号
/* KTPAgent.java * $Id: KTPAgent.java,v 2.6 1997-12-12 20:19:54+09 ht Exp $ * $Name: alpha5_1-release $ */package com.ibm.acl.kqmlsample;import com.ibm.acl.kqml.*;import com.ibm.acl.facilitator.*;import java.net.*;import java.io.*;import java.util.*;/** * KTPAgent * * @version     $Revision: 2.6 $ $Date: 1997-12-12 20:19:54+09 $ * @author      Osamu Furusawa * @author      Hajime Tsuchitani */abstract class KTPAgent {  private static final String rcsid = "$Id: KTPAgent.java,v 2.6 1997-12-12 20:19:54+09 ht Exp $ $Name: alpha5_1-release $";  /**   * KTPFrame reference   */  protected KTPFrame  frame = null;    /**   * agent name   */  protected String agentName;    /**   * agent local host name (:sender)   */  protected String localHost;    /**   * facilitator address (:receiver)   */  protected String facilitatorAddr;  /**   * facilitator name   */  protected String facilitator = "facilitator";    /**   * whitepages registration number.   * After sending register performative to facilitator,   * this ID is issued by facilitator agent.   */  protected String whitepagesID;    /**   * yellowpage ID   * After sending advertise performative to facilitator,   * this ID is issued by facilitator agent.   */  protected String yellowpagesID = null;    /**   * KQMLManagner   */  protected KQMLManager kManager;      /**   * Constructor.   * create KQMLManager.   *   * @param port port number   */  public  KTPAgent(int port){        // read the URL of facilitator from $HOME/.jkqml/facilitator.properties        FacilitatorProperties fp = null;        try {      fp = new FacilitatorProperties();    } catch (IOException ex) {      ex.printStackTrace();      System.exit(1);    }        Vector urls = fp.getURL("ktp");        if (urls != null) {      Enumeration enum = urls.elements();      if(enum.hasMoreElements()) { 	facilitatorAddr = (String) enum.nextElement();      } else {	System.err.println("no ktp facilitator");	System.exit(1);      }    } else {      System.err.println("no ktp facilitator");      System.exit(1);    }        try {      InetAddress home = InetAddress.getLocalHost();      StringBuffer buf = new StringBuffer("ktp://");      buf.append(home.getHostName() + ":");      buf.append(Integer.toString(port));      localHost = new String(buf.toString());    } catch (UnknownHostException e) {      System.err.println("Unknown HostName");      System.exit(1);    }  }    /**   * send KQML message. This method must call sendKQMLMessage() method of   * KQMLManager.   *   * @param kqml kqml message   */  public void sendKQMLMessage(KQML kqml) {        String performative = kqml.getPerformative();    Conversation conv = null;    try {      conv =	(Conversation) kManager.sendMessage(kqml);    } catch (SendFailedException ex) {      ex.printStackTrace();    } catch (InvalidFormatException ex) {      ex.printStackTrace();    } catch (InvalidMessageSequenceException ex) {      ex.printStackTrace();    } catch (JKQMLException ex) {      ex.printStackTrace();    } 	    // white pages    if ("register".equals(performative))      setResultRegister(conv);    else if ("unregister".equals(performative))      setResultUnregister(conv);    else if ("ask-one".equals(performative))      setResultAskOne(conv);    // yellow pages    else if ("insert".equals(performative))      setResultInsert(conv);    else if ("delete-one".equals(performative))      setResultDeleteOne(conv);    else if ("ask-all".equals(performative))      setResultAskAll(conv);            // kqml    else if ("broker-all".equals(performative))      setResultBrokerAll(conv);    else if ("advertise".equals(performative))      setResultAdvertise(conv);        // other    else if ("recommend-one".equals(performative))      setResultOther(conv, performative);    else if ("recommend-all".equals(performative))      setResultOther(conv, performative);    else if ("recruit-one".equals(performative))      setResultOther(conv, performative);    else if ("recruit-all".equals(performative))      setResultOther(conv, performative);    else if ("broker-one".equals(performative))      setResultOther(conv, performative);    else if ("subscribe".equals(performative))      setResultOther(conv, performative);    else if ("forward".equals(performative))      setResultOther(conv, performative);    else if ("tell".equals(performative))      setResultOther(conv, performative);    else if ("uninsert".equals(performative))      setResultOther(conv, performative);				    else if ("discard".equals(performative))      setResultOther(conv, performative);    else if ("undelete".equals(performative))      setResultOther(conv, performative);    else if ("transport-address".equals(performative))      setResultOther(conv, performative);    else       setResultOther(conv, performative);  }        /**   * set KQML message. called by ATPFrame class   *   * @param performative performative's string   *   */  public abstract KQML requestKQML(String performative);      /**   * handling return value for register performative   *   * @param conv conversation thread   */  public void setResultRegister(Conversation conv) {    try {      Object result = conv.waitAndGetResponse(15000); // wait 15 sec      StringBuffer resultText = new StringBuffer();      resultText.append("registration number: " + result + "\n");      whitepagesID = (String) result;      frame.setResult(resultText.toString());    } catch (Exception ex) {      ex.printStackTrace();      frame.setResult("no result");    }  }     /**   * handling return value for unregister performative   *   * @param conv conversation thread   */  public void setResultUnregister(Conversation conv) {    try {      Object result = conv.waitAndGetResponse(15000); // wait 15 sec      StringBuffer resultText = new StringBuffer();      resultText.append("unregister result : " + result + "\n");      frame.setResult(resultText.toString());    } catch (Exception ex) {      ex.printStackTrace();      frame.setResult("no result");    }  }     /**   * handling return value for ask-one performative   *   * @param conv conversation thread   */  public void setResultAskOne(Conversation conv) {    try {      Object result = conv.waitAndGetResponse(15000); // wait 15 sec      StringBuffer resultText = new StringBuffer();      resultText.append("ask-one result : " + result + "\n");      frame.setResult(resultText.toString());    } catch (Exception ex) {      ex.printStackTrace();      frame.setResult("no result");    }  }     /**   * handling return value for insert performative   *   * @param conv conversation thread   */  public void setResultInsert(Conversation conv) {    try {      ReturnValue rtn = (ReturnValue) conv.waitAndGetResponse(15000);      StringBuffer resultText = new StringBuffer();      resultText.append("insert result: " + rtn.isOK() + "\n");      if (rtn.isOK()) {	yellowpagesID = new String((String)rtn.getReturnValue());	resultText.append(":registeredID ");	resultText.append(yellowpagesID + "\n");	frame.setResult(resultText.toString());      } else {	resultText.append("error msg : ");	resultText.append(rtn.getReturnValue() + "\n");	frame.setResult(resultText.toString());      }    } catch (Exception ex) {      ex.printStackTrace();      frame.setResult("no result");    }  }      /**   * handling return value for delete-one performative   *   * @param conv conversation thread   */  public void setResultDeleteOne(Conversation conv) {    try {      ReturnValue rtn = (ReturnValue) conv.waitAndGetResponse(15000);      StringBuffer resultText = new StringBuffer();      resultText.append("delete-one result : " + rtn.isOK() + "\n");      if (rtn.isOK()) {	resultText.append("message  : ");	resultText.append(rtn.getReturnValue() + "\n");	frame.setResult(resultText.toString());      } else {	resultText.append("error msg : ");	resultText.append(rtn.getReturnValue() + "\n");	frame.setResult(resultText.toString());      }    } catch (Exception ex) {      ex.printStackTrace();      frame.setResult("no result");    }  }      /**   * handling return value for ask-all performative   *   * @param conv conversation thread   */  public void setResultAskAll(Conversation conv) {    try {      ReturnValue rtn = (ReturnValue) conv.waitAndGetResponse(15000);      StringBuffer resultText = new StringBuffer();      resultText.append("ask-all result : " + rtn.isOK() + "\n");      if (rtn.isOK()) {	AgentInfo agentinfo = new AgentInfo();	Vector agentInfos = (Vector)rtn.getReturnValue();	Enumeration enum = agentInfos.elements();	while (enum.hasMoreElements()) {	  agentinfo = (AgentInfo)enum.nextElement();	  resultText.append("Name : ");	  resultText.append(agentinfo.getAgentName() + "\n");	  resultText.append("URL : ");	  resultText.append(agentinfo.getURL() + "\n");	  resultText.append("ClassName : ");	  resultText.append(agentinfo.getClassName() + "\n");	  frame.setResult(resultText.toString());	}      } else {	resultText.append("error msg : ");	resultText.append(rtn.getReturnValue() + "\n");	frame.setResult(resultText.toString());      }    } catch (Exception ex) {      ex.printStackTrace();      frame.setResult("no result");    }  }      /**   * handling return value for advertise performative.   * advertise performative doesn't reply message.   *   * @param conv conversation thread   */  public void setResultAdvertise(Conversation conv) {        try {      conv.getResponse();      frame.setResult("advertise set");    } catch (Exception ex) {      ex.printStackTrace();      frame.setResult("advertise failed");    }  }      /**   * handling return value for broker-all performative   *   * @param conv conversation thread   */  public void setResultBrokerAll(Conversation conv) {    long timeout = 15000;    StringBuffer resultText = new StringBuffer();    for (int i = 0; i < 8 ; i++) {      try {	ReturnValue rtn = (ReturnValue) conv.waitAndGetResponse(timeout);	if (rtn != null) {	  if (rtn.getReturnValue() instanceof Vector) {	    AgentInfo agentinfo = new AgentInfo();	    Vector agentInfos = (Vector)rtn.getReturnValue();	    Enumeration enum = agentInfos.elements();	    while (enum.hasMoreElements()) {	      agentinfo = (AgentInfo)enum.nextElement();	      resultText.append("Name : ");	      resultText.append(agentinfo.getAgentName() + "\n");	      resultText.append("URL : ");	      resultText.append(agentinfo.getURL() + "\n");	      resultText.append("ClassName : ");	      resultText.append(agentinfo.getClassName() + "\n");	    }	  } else if (!rtn.isOK()) {	    frame.setResult("sorry or error msg received.");	  }	} else { 	  frame.setResult("null was set.");	}      } catch (SorryMsgReceivedException ex) {	frame.setResult("sorry msg received");      } catch (ErrorMsgReceivedException ex) {	frame.setResult("err msg received");      } catch (ResponseTimeOutException ex) {	frame.setResult("wait " + (8 - i));      } catch (Exception ex) {	ex.printStackTrace();	frame.setResult("no result");      }      timeout = 1000; // reset timeout;    } // for loop    frame.setResult(resultText.toString());  }      /**   * handling return value for other performative   *   * @param conv conversation thread   */  public void setResultOther(Conversation conv, String perfo) {    try {      Object result = conv.waitAndGetResponse(15000); // wait 15 sec      StringBuffer resultText = new StringBuffer();      resultText.append(perfo + " (other) result : " + result + "\n");      frame.setResult(resultText.toString());    } catch (Exception ex) {      ex.printStackTrace();      frame.setResult("no result");    }  }    /**   * handling return value for ask-one performative   *   * @rtn return new ID used reply-with or in-reply-to.   */  public String newReplyWith() {    String newRw = new String(kManager.getInitialID());    return newRw;  }}

⌨️ 快捷键说明

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