agent-prototype
Version:
an extendable agent for building multi agent systems
105 lines (65 loc) • 2.1 kB
Markdown
for building multi agent systems in javascript using prototypal inheritance.
you must provide an event emitter via the constructor which is used as a global communication bus between agents.
listen for messages on the bus (event emitter), accepts a function handler.
##### `shout(message)`
send a message to the communication bus, message can be an object or string.
##### `spawn(bus)`
spawn a new agent, optionally provide a communication bus (event emitter).
## `messages`
Internally the agent uses the event emitter... with the following convention. To send a
message from the *outside* just make sure to emit to the `message` channel and use the
sender property to let others know who you are!
```js
bus.emit('message', {
sender: 'custom',
message: 'hello from example!'
})
bus.on('message', console.log) // hear *ALL* messages in the system
```
## `example`
```js
var EventEmitter = require('events').EventEmitter
var bus = new EventEmitter()
var agentPrototype = require('agent-prototype')
var a = new agentPrototype(bus)
var b = new agentPrototype(bus)
a.listen(console.log)
b.listen(console.log)
setInterval(function () {
var number = Math.round(Math.random()*11)
bus.emit('message', { message: number, sender: 'environment' })
}, 1300)
```
This example shows how to add custom methods and extend the prototype.
```js
var agentPrototype = require('agent-prototype')
var EventEmitter = require('events').EventEmitter
var bus = new EventEmitter()
var a = new agentPrototype (bus)
agentPrototype.prototype.custom = function () {
return Math.random()
}
a.listen(function (data) {
console.log('.', data.message)
if (Math.random()>0.9) a.shout('hello world! from '+a.id)
})
setInterval(function () {
bus.emit('message', {
message: Math.random(),
sender: 'environment'
})
console.log('..', a.custom())
}, 120)
bus.on('message', console.log)
```
* actors
* multi agent systems
```sh
npm i agent-prototype
```
an extendable agent