|
Step |
Description |
|
|
0 |
do any necessary imports for application |
import
EDU.cmu.softagents.misc.KQMLParser.InternalKQMLmessage; import
EDU.cmu.softagents.misc.KQMLParser.ExternalKQMLmessage; import EDU.cmu.softagents.retsina.Communicator.* |
|
1 |
Start class and main program do any necessary initialization and processing |
public class Client { static
Communicator comm = null; public
static void main ( String argv[] ) throws CommunicatorException, IOException { |
|
2 |
create a new instance of the Communicator. give it the Client's AgentName, its HostName, and the preferred port number for communication. |
comm =
new Communicator( "TestClient", "angel.cimds.ri", 0, new InternalKQMLmessage(), new ExternalKQMLmessage(), null,
false); |
|
3 |
Using the comm object, open a connection to a server agent by referencing its Agent's name. In return you'll get a ConnectionDescriptor that will be used to refer to this client-to-server link. |
ConnectionDescriptor cd = comm.openConnection("TestServer"); |
|
4 |
Create an internal message. |
InternalKQMLmessage reqMsg = new InternalKQMLmessage(); |
|
5 |
Populate the message structure with relevant information; including the "CONTENT". |
reqMsg.setPerformative("ask-one");
reqMsg.setField(reqMsg.SENDER, "TestClient");
reqMsg.setField(reqMsg.RECEIVER, "TestServer");
reqMsg.setField(reqMsg.REPLY_WITH, "");
reqMsg.setField(reqMsg.IN_REPLY_TO, "");
reqMsg.setField(reqMsg.CONTENT, "HelloWorld!"); |
|
6 |
Send the message. After sending the message, wait for a reply message. Create a new message object called replyMsg and fill it with the information that returns from the server. |
boolean
sentOK = comm.sendMsg(cd, reqMsg);
InternalKQMLmessage replyMsg = (InternalKQMLmessage)
comm.waitOnGetInputMsg(cd); |
|
or |
||
|
InternalKQMLmessage replyMsg=(InternalKQMLmessage)
comm.sendMsgAndGetReply(cd, reqMsg); |
||
|
7 |
Extract the CONTENT information from the reply message. |
String
result = replyMsg.getField(replyMsg.CONTENT).trim(); |
|
8 |
Do whatever processing is appropriate to the data received. |
System.out.println("**** reply message = " + result + " ****"; |
|
9 |
Close down services and connections and end. |
comm.refuseNewConnection();
comm.flushMsgsAndStop();
comm.unRegisterWithANS();
comm.closeConnection( cd );
system.exit(0); } |
A Simple Server Application:
|
Step |
Description |
|
|
0 |
Do any necessary imports for application |
import
EDU.cmu.softagents.misc.KQMLParser.InternalKQMLmessage; import
EDU.cmu.softagents.misc.KQMLParser.ExternalKQMLmessage; import EDU.cmu.softagents.retsina.Communicator.* |
|
1 |
Start class and main program do any necessary initialization and processing |
public class Server { static
Communicator comm = null; public
static void main ( String argv[] ) throws CommunicatorException, IOException { |
|
2 |
Create a new instance of the Communicator. Give it the Client’s AgentName, its HostName, and the preferred port number for communication. |
comm =
new Communicator( "TestServer", "angel.cimds.ri", 0, new InternalKQMLmessage(), new ExternalKQMLmessage(), null, false); |
|
3 |
We don't have a connection with another Agent yet, so, wait for a message and then discover the connection details from the incoming message object. |
InputMsgObject iMsgObj = comm.waitOnGetInputMsg(); |
|
4 |
Discover Connection Descriptor and details from incoming Message. |
ConnectionDescriptor cd = comm.lookupConnection(iMsgObj); |
|
5 |
Extract the message from the message object; then do whatever processing is required. |
InternalKQMLmessage msg = (InternalKQMLmessage) iMsgObj.getMsg();
System.out.println("*** message= "+ msg.getField(msg.Content)+" ***"); |
|
6 |
Build a reply message based on the incoming message. |
InternalKQMLmessage replyMsg = (InternalKQMLmessage) msg.buildReplyMsg("Reply",
"ThisIsTheReply", "nothing"); |
|
7 |
Send the reply message back to the client |
boolean
sentOK = comm.sendMsg( cd, replyMsg ); |
|
8 |
Do whatever follow-up processing may be required |
//… |
|
9 |
Close down all services and connections and end. |
comm.refuseNewConnection();
comm.flushMsgsAndStop();
comm.unRegisterWithANS();
system.exit(0); } |