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();
							 | 
						||
| 
								 | 
							
								
							 |