73 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
// Remote single stepping using RPC (worker)
 | 
						|
// jamsh test-singlestep1.js -- 9001 
 | 
						|
// 9002 9003 ...
 | 
						|
 | 
						|
var N = 1000, C= 10000,  verbose=0;
 | 
						|
function ac(options) {
 | 
						|
  this.options=options;
 | 
						|
  this.sensor=null;
 | 
						|
  this.loops=options.loops;
 | 
						|
  this.act = {
 | 
						|
    start: function () {
 | 
						|
      log('Starting .. '+this.options.msg)
 | 
						|
    },
 | 
						|
    percept: function () {
 | 
						|
      rd.try(0,['SENSOR',_],function (t) {
 | 
						|
        if (t) this.sensor=t[1];
 | 
						|
      })
 | 
						|
    },
 | 
						|
    action : function () {
 | 
						|
      if (this.options.verbose || (this.loops%1000)==0) log(this.loops,this.sensor);
 | 
						|
    },
 | 
						|
    stop: function () {
 | 
						|
      log('Terminating ..')
 | 
						|
      kill()
 | 
						|
    }
 | 
						|
  }
 | 
						|
  
 | 
						|
  this.trans = {
 | 
						|
    start:"percept",
 | 
						|
    percept: function () { 
 | 
						|
      if (this.sensor!=null) return "action";
 | 
						|
      else return "stop";
 | 
						|
    },
 | 
						|
    action: function () {
 | 
						|
      return (this.loops--)==0?"stop":"percept";
 | 
						|
    },
 | 
						|
  }
 | 
						|
  this.next="start";
 | 
						|
}
 | 
						|
var sensor = 0;
 | 
						|
provider(function (pat) {
 | 
						|
  switch (pat[0]) {
 | 
						|
    case 'SENSOR':
 | 
						|
      return [pat[0],sensor];
 | 
						|
      break;
 | 
						|
  }
 | 
						|
});
 | 
						|
var agents=[];
 | 
						|
for(var i=0;i<N;i++) {
 | 
						|
  var ag = create(ac,{
 | 
						|
    loops:C,
 | 
						|
    msg:'with pace '+i,
 | 
						|
    verbose:0
 | 
						|
  },2);
 | 
						|
  agents.push(ag);
 | 
						|
}
 | 
						|
 | 
						|
Rpc.getreq('udp://localhost:'+(args[0]||9000),function (req,src) {
 | 
						|
  switch (req.command) {
 | 
						|
    case 'step':
 | 
						|
      if (verbose) log('Step')
 | 
						|
      step(1,true);
 | 
						|
      return {status:'Ok'}
 | 
						|
      break;
 | 
						|
    case 'sensor':
 | 
						|
      sensor = req.value;
 | 
						|
      break;
 | 
						|
  }
 | 
						|
},{verbose:1})
 | 
						|
 | 
						|
start0();
 | 
						|
 |