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