`
turingfellow
  • 浏览: 135361 次
  • 性别: Icon_minigender_1
  • 来自: 福建省莆田市
社区版块
存档分类
最新评论

jade的消息队列

    博客分类:
  • jade
 
阅读更多
链表实现

package jade.core;

import jade.util.leap.Iterator;
import jade.util.leap.LinkedList;
import jade.util.leap.EnumIterator;

import java.util.Vector;

import jade.lang.acl.ACLMessage;

/**
@author Giovanni Rimassa - Universita` di Parma
@version $Date: 2003/11/11 13:08:30 $ $Revision: 2.6 $
*/
class MessageQueue {

//#MIDP_EXCLUDE_BEGIN
// In MIDP we use Vector instead of jade.util.leap.LinkedList as the latter has been implemented in terms of the first
  private LinkedList list;
//#MIDP_EXCLUDE_END
/*#MIDP_INCLUDE_BEGIN
  private Vector list;
#MIDP_INCLUDE_END*/

  private int maxSize;

  public MessageQueue(int size) {
    maxSize = size;
//#MIDP_EXCLUDE_BEGIN
    list = new LinkedList();
//#MIDP_EXCLUDE_END
/*#MIDP_INCLUDE_BEGIN
    list = new Vector();
#MIDP_INCLUDE_END*/
  }

  public MessageQueue() {
      this(0);
  }

  public boolean isEmpty() {
    return list.isEmpty();
  }

  public void setMaxSize(int newSize) throws IllegalArgumentException {
    if(newSize < 0)
      throw new IllegalArgumentException("Invalid MsgQueue size");
    maxSize = newSize;
  }

  public int getMaxSize() {
    return maxSize;
  }

    /**
     * @return the number of messages
     * currently in the queue
     **/
    public int size() {
return list.size();
    }

  public void addFirst(ACLMessage msg) {
if((maxSize != 0) && (list.size() >= maxSize)) {
//#MIDP_EXCLUDE_BEGIN
list.removeFirst(); // FIFO replacement policy
}
list.addFirst(msg);
//#MIDP_EXCLUDE_END
/*#MIDP_INCLUDE_BEGIN
    list.setElementAt(msg,0);
      } else
          list.insertElementAt(msg,0);
#MIDP_INCLUDE_END*/
  }

  public void addLast(ACLMessage msg) {
    if((maxSize != 0) && (list.size() >= maxSize)){
//#MIDP_EXCLUDE_BEGIN
list.removeFirst(); // FIFO replacement policy
System.err.println("WARNING: a message has been lost by an agent because of the FIFO replacement policy of its message queue.\n Notice that, under some circumstances, this might not be the proper expected behaviour and the size of the queue needs to be increased. Check the method Agent.setQueueSize()");
}
    list.addLast(msg);
//#MIDP_EXCLUDE_END
/*#MIDP_INCLUDE_BEGIN
   list.removeElementAt(0);
    }
    list.addElement(msg);
#MIDP_INCLUDE_END*/
  }

  public ACLMessage removeFirst() {
//#MIDP_EXCLUDE_BEGIN
    return (ACLMessage)list.removeFirst();
//#MIDP_EXCLUDE_END
/*#MIDP_INCLUDE_BEGIN
    ACLMessage msg = (ACLMessage)list.firstElement();
    list.removeElementAt(0);
    return msg;
#MIDP_INCLUDE_END*/
  }

  public boolean remove(ACLMessage item) {
//#MIDP_EXCLUDE_BEGIN
    return list.remove(item);
//#MIDP_EXCLUDE_END
/*#MIDP_INCLUDE_BEGIN
    return list.removeElement(item);
#MIDP_INCLUDE_END*/
  }

  public Iterator iterator() {
//#MIDP_EXCLUDE_BEGIN
    return list.iterator();
//#MIDP_EXCLUDE_END
/*#MIDP_INCLUDE_BEGIN
    return new EnumIterator(list.elements());
#MIDP_INCLUDE_END*/
  }

    //#MIDP_EXCLUDE_BEGIN

    // For persistence service
    private void setMessages(java.util.List l) {
// FIXME: To be implemented
System.out.println(">>> MessageQueue::setMessages() <<<");
    }

    // For persistence service
    private java.util.List getMessages() {
// FIXME: To be implemented
System.out.println(">>> MessageQueue::getMessages() <<<");
return null;
    }

    //#MIDP_EXCLUDE_END


    // For persistence service
    private Long persistentID;

    // For persistence service
    private Long getPersistentID() {
return persistentID;
    }

    // For persistence service
    private void setPersistentID(Long l) {
persistentID = l;
    }

}
分享到:
评论

相关推荐

    acl.rar_ACL_Agent_jade_jade agent_jade java

    在JADE中,每个agent都有一个本地消息队列,用于接收和处理ACL消息。这些消息由消息头(header)、内容(content)和可选附件(attachments)组成。消息头包含了发送者和接收者的地址信息,而内容则包含了用ACL语言...

    jade中文开发指南手册

    - **交互agent的通信**:通过ACL消息来实现代理之间的通信,支持私有消息队列访问等功能。 - **具有图形用户界面(GUI)的Agent**:支持GUI的集成,包括Java GUI并行模式、GUI事件驱动的ACL消息交换等方式。 - **...

    jade平台下的多agent应用指南

    - **ACL消息**: JADE支持FIPA定义的ACL消息格式,包括响应消息、Java序列化以及发送字节序列。还有专门的ACL编码器和消息模板类来处理这些消息。 **Agent行为实现** - **Behaviour类**: 行为是agent的活动单元,...

    JADE 程序员指南

    智能体可以进行内部通信,访问私有消息队列,并且能够与其他智能体进行交互。 4. 图形用户界面(GUI):JADE支持智能体具有图形用户界面,允许开发者创建可以通过图形界面与用户交互的智能体。这些智能体可以响应...

    JADE PROGRAMMER’S GUIDE

    - **私有消息队列**:每个代理都有一个私有消息队列来处理接收到的消息。 - **具有图形用户界面的代理**: - **Java GUI并发模型**:为了在代理中集成图形用户界面,需要理解Java的并发模型,以确保UI线程和其他...

    jade 开发多agent

    - **访问私有消息队列**:每个Agent都有一个私有的消息队列,用于存储接收到的消息。 - **具有图形用户界面(GUI)的Agent**:支持通过Java Swing等工具创建图形界面,以增强用户体验。 - **Java GUI并行模式**:...

    JADE Programmers Guide

    - **代理间通信**: JADE 支持多种通信方式,包括直接消息传递和通过私有队列进行消息交换。 - **私有队列**: 每个代理都有一个私有队列,用于接收其他代理发送的消息。 - **带图形用户界面的代理**: JADE 支持创建...

    jade程序员指南

    - **访问私有消息队列**: 每个代理都有一个私有的消息队列用于处理接收到的消息。 - **具有GUI的Agent**: - **Java GUI并行模式**: 支持代理与GUI组件的并行执行。 - **GUI事件与ACL消息交换**: 可以将GUI事件...

    Visitors-1_jade_java_Visitors_thanzbd_

    每个代理都有自己的消息队列,可以发送、接收和处理消息。这使得系统能够分布式运行,代理可以在不同的网络节点上运行,而无需知道其他代理的具体位置。 项目中的"Visitors"子文件可能包含以下内容: 1. `Agent`类...

    jadex user guide 2007

    例如,如果一个代理需要发送消息,则必须为其定义发送消息的能力。 **5.3 能力的元素** 每个能力都由多个元素组成,这些元素定义了能力的具体行为。例如,一个发送消息的能力可能包含发送消息的方法定义。 **...

    Agent04OneShotBehaviour_jadeagent_legecj_

    2. **初始化行为**:在代理的初始化过程中,你可以创建并添加一次性行为到代理的行为队列。例如: ```java OneShotBehaviour oneShot = new OneShotBehaviour(this) { public void doBehaviour() { // 在这里...

    基于node express快速开发api类后端的框架适用angularjs和ionic等前后端分离的项目源码.zip

    技术栈 base2(mirco kernel) mongoose bluebird res.api 前后端分离实践 前端:moa-frontend 和 moa-h5 public下面的采用nginx做反向代理 其他的采用express+jade精简代码...集成kue队列[需要使用mount-queues插件]

    angular-material-es6-example:示例音乐播放器应用专长。 Sails.js,ES6,Angular(v1.x),Jade,Gulp,Browserify,Babel和Material Design

    队列/播放列表,显示标题,艺术家,专辑 双击队列列表播放选定的歌曲 歌曲播放完毕后,播放队列中的下一首歌曲 播放器状态:当前歌曲标题,艺术家,专辑,经过的时间,持续时间 播放器界面:播放,停止,上一个...

    java-aodv.zip_aodv_aodv in java

    - **数据结构**:路由表、队列和缓存等数据结构的设计至关重要,用于存储和管理路由信息。 - **序列化与反序列化**:将AODV协议消息结构转换为字节流进行传输,再将接收的字节流解析为协议消息对象。 - **错误...

    push-server:推送后台服务器、

    3. **消息队列**:在高并发场景下,使用消息队列(如 RabbitMQ 或者 Redis)可以有效地分发和处理推送任务,避免服务器过载。 4. **错误处理**:在 Node.js 中,良好的错误处理机制至关重要,包括异常捕获和全局...

    使用node.js 制作网站前台后台

    虽然文章内容中并未具体讲解Redis的应用场景,但是可以推测在后台系统中,Redis可能用于缓存数据、实现会话存储或做消息队列等。 总结而言,通过本文我们可以了解到,使用Node.js开发网站前台和后台的过程中,可以...

    iripgea.rar_Windows编程_脑电

    在Windows编程中,理解消息队列、窗口过程、线程管理以及内存管理等核心概念是至关重要的。 接下来,我们聚焦于脑电图分析。脑电图是一种记录大脑电活动的技术,通过在头皮上放置电极,捕捉并记录神经元放电产生的...

    利用Agent实现分布式计算java源代码及jar包

    在Java中,可能使用了如JADE(Java Agent Development Framework)这样的框架来简化Agent的开发。 2. **分布式任务调度**:如何将计算任务分配到各个Agent,确保任务的公平性和效率,可能是项目的一部分。这可能...

    VSCode牛掰的前端编辑器

    前端开发中,有一个非常好用的工具,Visual Studio Code,简称VS code ...VS Code的Azure存储扩展允许您部署静态网站并浏览Azure Blob容器,文件共享,表和队列。按照本教程从VS Code部署Web应用程序到Azure存储。

Global site tag (gtag.js) - Google Analytics