104 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			104 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| global.TOP='/home/sbosse/proj/jam/js';
 | |
| require(TOP+'/top/module')([process.cwd(),TOP]);
 | |
| var Io = Require('com/io');
 | |
| var Aios = Require('jam/aios');
 | |
| 
 | |
| 
 | |
| var ac = function (param1,param2) {
 | |
|   //var self=this;
 | |
|   // Data State
 | |
|   this.delta={x:0,y:2};
 | |
|   this.radius=1;
 | |
|   this.param1=param1;
 | |
|   this.param2=param2;
 | |
|   this.x=0;
 | |
|   this.list=[];
 | |
| 
 | |
|   this.inbound = function(nextdir) {
 | |
|     log(this.delta.y);
 | |
|     switch (nextdir) {
 | |
|       case DIR.NORTH: return this.delta.y<=this.radius;
 | |
|       case DIR.SOUTH: return this.delta.y>=-this.radius;
 | |
|       case DIR.WEST: return this.delta.x>=-this.radius;
 | |
|       case DIR.EAST: return this.delta.x<=this.radius;
 | |
|     }  
 | |
|     return false;
 | |
|   };
 | |
| 
 | |
|   // Activities
 | |
|   this.init = function () {
 | |
|     var res;
 | |
|     this.x=this.param1;
 | |
|     log('init '+this.inbound(DIR.NORTH));
 | |
|     out(['worker',this.param1*5]);
 | |
|     inp(['worker',any],function (t) {this.x=t[1];});
 | |
|   };
 | |
|   this.end = function () {
 | |
|     log('finalize');
 | |
|   };
 | |
|   this.act1 = function () {
 | |
|     log('act1');
 | |
|     log(this.x)
 | |
|     this.x=this.x+1;
 | |
|     this.list.push(this.x);
 | |
|     L(
 | |
|       function () {log (' in loop init'); this.x=5;},
 | |
|       function () {log (' in loop cond'); return this.x < 7},
 | |
|       function () {log (' in loop next'); this.x++;},
 | |
|       [
 | |
|         function() {log('in loop '+this.x)}
 | |
|       ]
 | |
|     );
 | |
|   };
 | |
|   this.act2 = function () {
 | |
|     log('act2');
 | |
|     log(this.x)
 | |
|     this.x=this.x-5;
 | |
|     trans.add('act2',function(){ return (this.x>10)?'act4':'act3';});
 | |
|   };
 | |
|   this.act3 = function () {
 | |
|     log('act3');
 | |
|     //while (1) {};
 | |
|     this.x=0;
 | |
|     for(var i=0;i<10000000;i++) {this.x++};
 | |
|     //this.x=this.param2;
 | |
|   };
 | |
| 
 | |
| 
 | |
|   this.on = {
 | |
|     error: function (e) {
 | |
|       log('Caught exception '+e);
 | |
|     },
 | |
|     exit : function () {
 | |
|       log('Terminating.');
 | |
|     }
 | |
|   };
 | |
|  // Transition network
 | |
|   this.trans = {
 | |
|     init: function () {
 | |
|       return 'act1'; 
 | |
|     },
 | |
|     act1: function () {
 | |
|       if (this.x>1) return 'act2'; 
 | |
|     },
 | |
|     act2: function () {
 | |
|       if (this.param1==1) return 'act3';
 | |
|     },
 | |
|     act4: function () {
 | |
|       return 'end';
 | |
|     },
 | |
|     end: function () {
 | |
|     
 | |
|     }
 | |
|   }
 | |
|   // Control State
 | |
|   this.next='init';
 | |
| }
 | |
| var world = Aios.World.World([]);
 | |
| var node = Aios.Node.Node({id:'myfirstnode'});
 | |
| world.add(node);
 | |
| 
 | |
| var agent1 = Aios.Code.create(ac,[1,1]);
 | |
| console.log(agent1);
 | |
| Aios.schedule(agent1);
 |