UNPKG

agent-prototype

Version:

an extendable agent for building multi agent systems

105 lines (65 loc) 2.1 kB
# agent-prototype an extendable agent for building multi agent systems in javascript using prototypal inheritance. ## `methods` you must provide an event emitter via the constructor which is used as a global communication bus between agents. ##### `listen(handler)` 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) ``` ## `extending example` 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) ``` ## `topics` * actors * multi agent systems ## `installation` ```sh npm i agent-prototype ```