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