使用Aglets开发agents(三)

 
三、代码例子
          这节中提供了一些代码例子关于运行 aglets 。这些代码仅仅为教学使用。
1 、一个基本的 agent
          以下的类展示了一个简单的 aglet ,该类一旦被加载,以标准输出的方式打印出一些信息。
          import com.ibm.aglet.*;
 
public class FirstAglet extends Aglet
{
    public void run()
    {
           System.out.println("/n/tHello/n");
           for(int i=0;i<10;i++)
           {
                  System.out.println("/n i is "+i);
           }
    }
}
2 、事件监听
          以下的代码例子表明, MobilityListene CloneListener PersistencyListener 怎样被使用。首先,看看监听器类:
package example.goofy;
import com.ibm.aglet.*;
import com.ibm.aglet.event.*;
public class myListener implements MobilityListener,CloneListener,PersistencyListener
{
          //mobility listener methods
          public void onArrival(MobilityEvent event)
          {
              System.out.println("Agent arrived "+event);
          }
          public void onDispathching(MobilityEvent event)
          {
              System.out.println("Before moving... "+event);
          }
          public void onReverting(MobilityEvent event)
          {
              System.out.println("Before coming back home... "+event);
          }
 
          //clone listener methods
          public void onClone(CloneEvent event)
          {
              System.out.println("I'm the clone "+event);
          }
          public void onCloned(CloneEvent event)
          {
              System.out.println("A clone of myself created "+event);
          }
          public void onCloning(CloneEvent event)
          {
              System.out.println("Someone is cloning myself "+event);
          }
 
          //Persistency listener methods
          public void onActivation(PersistencyEvent event)
          {
              System.out.println("Activating "+event);
          }
          public void onDeactivating(PersistencyEvent event)
          {
              System.out.println("Deactivating "+event);
          }
}
上面的监听器定义了不同的方法来捕获不同时间的事件,正如代码中解释的一样。以下的 agent 注册上面的监听器,使用它来触发事件。
          package examples.goofy;
import com.ibm.aglet.*;
import com.ibm.aglet.event.*;
 
public class agletC extends Aglet
{
    public boolean move=true;
    public void onCreation(Object init)
    {
           //create a listener object
           myListener listener = new myListener();
           //register a mobility listener
           this.addMobilityListener((MobilityListener)listener);
           //register a clone listener
           this.addCloneListener((CloneListener)listener);
           //register a persistency listener
           this.addPersistencyListener((PersistencyListener)listener);
    }
    public void run()
    {
           System.out.println("Hello!");
    }
}
          例如,在 dispatching 之后, mobility 事件被触发, agent 在源控制台打印出如下的语句:
          Before moving…MobilityEvent[DISPATCHING]
        同时,在目的控制台打印出:
        Agent arrived MobilityEvent[ARRIVAL]
        HELLO
 
        为了更好地理解事件监听器是如何工作的,执行以上的 agent cloning dispatching deactivating ,再看看所有控制台打印出的信息。
3 、远程消息
        以下的代码表明 agletA 怎样发送一个远程消息给 agent agletB 。请注意:在发送消息时,必须知道远程 agent agletID ,这样才能够通信。
        package examples.goofy;
import com.ibm.aglet.*;
import java.net.*;
/**
* 克隆一个 agent ,然后发送一个远程 Hello 消息
*/
public class agletA extends Aglet
{
public void run()
{
       try
       {
              //get the aglet context
              AgletCOntext context = this.getAgletContext();
              //create an agletB instance
              AgletProxy toMove = context.createAglet(null,"examples.goofy.agletB",null);
              //save the new aglet ID
              AgletID remoteID = toMove.getAgletID();
              System.out.println("The new agent has ID = "+remoteID);
 
              //migrate the new agent
              String remoteContext = "atp://localhost:5000";
              URL url = new URL(remoteContext);
              toMove.dispatch(url);
              //get the remote proxy
              AgletProxy remoteProxy = context.getAgletProxy(url,remoteID);
              //send a message to the remote agent
              remoteProxy.sendMessage(new Message("HELLO"));
       }
       catch (Exception e)
       {
              System.out.println("Exception "+e);
       }
}
}
 
/**
*agletB
*/
 
package examples.goofy;
import com.ibm.aglet.*;
/**
*Receive a remote message
*/
 
public class agletB extends Aglet
{
public void run()
{
       try
       {
              //get my ID
              AgletID myID = this.getAgletID();
              System.out.println("/nMy ID is "+myID);
       }
       catch (Exception e)
       {
              System.out.println("Exception "+e);
       }
}
//handle the message
public boolean handleMessage(Message msg)
{
       if(msg.sameKind("HELLO"))
       {
              System.out.println("HELLO msg received");
              return true;
       }
       return false;
}
}
       请注意:即使在以上的代码中, getAgletProxy(…) 方法是过时了的,但是对于非过时的方法比如:
       AgletProxy remoteProxy = context.getAgletProxy(remoteID);
是不能工作的,因为它仅仅是在本地 agents 上工作的。 MAF(Mobile Agent Finder) 的使用将能够更好的工作,但是同时,在 Aglets 中如何使用它却没有大量的相关文档。
 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值