function foo (options) {
  this.producer=options.producer;
  this.data=null;
  this.act = {
    main : function () {
      log('starting',this.producer)
    },
    produce : function () {
      this.data={number:random(1,100)}
      out(['SENSOR',this.data])
      this.data.number++;
      out(['SENSOR',this.data])
    },
    forkme : function () {
      fork({
        producer:false,
        data:null
      });
    },
    consume : function () {
      inp.try(3000, ['SENSOR',_],function (t) {
        this.data=t;
      },true);
    },
    end : function () {
      log('terminate',this.data);
    }
  }
  this.trans = {
    main : produce,
    produce : forkme,
    forkme : function () {
      return this.producer?end:consume
    },
    consume : end,
  }
  this.next=main;
}
compile(foo,{verbose:1})
create('foo',{producer:true})
start()