Mon 21 Jul 22:43:21 CEST 2025

This commit is contained in:
sbosse 2025-07-21 23:13:59 +02:00
parent 0e8e0bf421
commit 13b3775131

67
js/demo/jamlibex1.js Normal file
View File

@ -0,0 +1,67 @@
// A simple two-agent system playing ping-pong
// and communicating by exchanging tuples
var Jam = process.release?require('./jamlib.debug'):require('jamlib');
var util = require('util');
// Create the JAM and JAM world consisting of one logical node
var JAM = Jam.Jam({
nocp:true, // Disable check-pointing (only useful with known agent behaviour)
print:function (msg) {console.log(msg+'\n');},
verbose:0,
});
JAM.init();
JAM.start();
// The agent class template (constructor function)
var PingPongClass = function (pingMe) {
/* Body variables */
this.pingMe=pingMe; // What to do next
/* Activities */
this.act = {
init: function () {
/* Initilization */
log('init '+(this.pingMe?'ping':'pong'));
},
ping: function () {
// Send request
log('ping');
out(['PING',me()]);
// sleep random time (blocks this activity)
sleep(random(50,500));
},
pong: function () {
// Send reply
log('pong');
out(['PONG',me()]);
// sleep random time (blocks this activity)
sleep(random(50,500));
},
wait: function () {
if (this.pingMe)
// Wait for reply
inp(['PONG',_],function (t) {this.pingMe=false});
else
// Wait for request
inp(['PING',_],function (t) {this.pingMe=true});
}
};
this.trans = {
init: function () {return this.pingMe?ping:wait},
ping: 'wait',
pong: function () {return this.pingMe?ping:wait},
wait: function () {return this.pingMe?pong:wait},
};
this.on = {
error: function (e,error) {log('Exception '+e+': '+error)}
}
this.next='init';
}
// Analyze agent class template
print(JAM.analyze(PingPongClass,{level:2,classname:'PingPongClass',verbose:1}).report);
// Start agents
var a1 = JAM.createAgent(PingPongClass,[true],1);
var a2 = JAM.createAgent(PingPongClass,[false],1);