atpagent.java

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

JAVA
508
字号
/* ATPAgent.java * $Id: ATPAgent.java,v 2.10 1998-06-16 11:18:46+09 ht Exp $ * $Name: alpha5_1-release $ * COPYRIGHT NOTICE goes here */package com.ibm.acl.kqmlsample;import com.ibm.acl.kqml.*;import com.ibm.acl.facilitator.*;import com.ibm.acl.util.*;import com.ibm.acl.protocol.atp.*;import com.ibm.aglet.*;import com.ibm.aglets.util.*;import java.net.*;import java.util.*;import java.io.IOException;/** * ATPAgent * * @version     $Name: alpha5_1-release $ $Revision: 2.10 $ $Date: 1998-06-16 11:18:46+09 $ * @author      Osamu Furusawa * @author      Hajime Tsuchitani */abstract public class ATPAgent extends ACLAglet {  private static final String rcsid = "$Id: ATPAgent.java,v 2.10 1998-06-16 11:18:46+09 ht Exp $ $Name: alpha5_1-release $";  static final long serialVersionUID = 1536299043986349774L;  /**   * ATPFrame reference   */  transient protected ATPFrame  frame;  /**   * agent name   */  protected String agentName = null;  /**   * agent local hostname (:sender)   */  transient protected String localHost;  /**   * facilitator's name (:receiver)   */  protected String facilitator;  /**   * facilitator's address (:receiver)   */  protected String facilitatorAddr;  /**   * whitepages registration number   */  transient protected String whitepagesID;  /**   * yellow page registered ID   */  transient protected String yellowpagesID;  /**   * ATP default constructor   */  public ATPAgent() {  }  /**   * onCreation   *   * @param o   */  public void onCreation(Object o) {    try {      super.onCreation(o);      getAgletContext().setProperty(agentName,				    getAgletID().toString());      FacilitatorProperties fp = null;            try {	fp = new FacilitatorProperties();      } catch (IOException ex) {	ex.printStackTrace();	System.exit(1);      }            Vector urls = fp.getURL("atp");            if (urls != null) {	Enumeration enum = urls.elements();	if(enum.hasMoreElements()) { 	  facilitatorAddr = (String) enum.nextElement();	  try {	    SimpleURLParser sup = new SimpleURLParser(facilitatorAddr);	    facilitator = sup.getAgentName();	  } catch (MalformedURLException ex) {	    ex.printStackTrace();	    System.err.println("facilitator.properties broken!");	    System.exit(1);	  }  	} else {	  System.err.println("no atp facilitator");	  System.exit(1);	}      } else {	System.err.println("no atp facilitator");	System.exit(1);      }            URL home = getAgletContext().getHostingURL();      localHost = new String(home.toString() +  agentName);    } catch (Exception ex) {      ex.printStackTrace();    }  }  public void onArrival() {    try {      getAgletContext().setProperty(agentName,				    getAgletID().toString());      URL home = getAgletContext().getHostingURL();      localHost = new String(home.toString() + agentName);    } catch (Exception ex) {      ex.printStackTrace();    }  }  /**   * handle message   *   * @param msg Message   */  public boolean handleMessage(Message msg) {    if ("dialog".equals(msg.getKind())) {      dialog();      return true;    }    return super.handleMessage(msg);  }    /**   * dialog   */  protected void dialog(){    if (frame != null) {      frame.show();    }  }    /**   * onDiposing   */  public void onDisposing() {    if (frame != null) {      frame.dispose();    }  }  /**   * sendKQMLMessage   *   * @param akm KQML message   */  public void sendKQMLMessage(KQML kqml) {    String performative = new String(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);        // yellowpage    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   */  abstract public KQML requestKQML(String performative);     /**   * handling return value for register performative   *   * @param conv conversation thread   */  public void setResultRegister(Conversation conv) {    try {      Object result = conv.waitAndGetResponse(35000); // 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(35000); // 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(35000); // 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(35000);      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(35000);      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(35000);      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 = 35000;    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(35000); // 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;  }    protected void debugTrace(boolean trace) {    if (trace) {      kManager.debug = true;      kManager.getSyslog().setLogMaskUpto(Syslog.LOG_ACL);    } else {      kManager.debug = false;      kManager.getSyslog().setLogMaskUpto(Syslog.LOG_NO_MSG);    }  }}

⌨️ 快捷键说明

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