62 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			62 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
								 | 
							
								// Fork, migration, remote signalling
							 | 
						||
| 
								 | 
							
								// Requires test-forkB, too.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Aios.Sig.options.debug.send=true;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								port(DIR.IP('http://localhost:6666'))
							 | 
						||
| 
								 | 
							
								start();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function ag (options) {
							 | 
						||
| 
								 | 
							
								  this.child=null;
							 | 
						||
| 
								 | 
							
								  this.master=null;
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  this.act = {
							 | 
						||
| 
								 | 
							
								    init : function () {
							 | 
						||
| 
								 | 
							
								      this.master=true;
							 | 
						||
| 
								 | 
							
								      log('Starting.');
							 | 
						||
| 
								 | 
							
								      sleep(3000);
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    replicate : function () {
							 | 
						||
| 
								 | 
							
								      log('Replicating...');
							 | 
						||
| 
								 | 
							
								      this.child=fork();
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    migrate : function () {
							 | 
						||
| 
								 | 
							
								      var nodes = link(DIR.IP('%'));
							 | 
						||
| 
								 | 
							
								      log('Migrating to '+nodes[0]);
							 | 
						||
| 
								 | 
							
								      if (nodes.length) moveto(DIR.NODE(nodes[0]));
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    killing : function () {
							 | 
						||
| 
								 | 
							
								      log('Killing child...');
							 | 
						||
| 
								 | 
							
								      kill(this.child);
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    wait : function () {
							 | 
						||
| 
								 | 
							
								      log('Waiting ...');
							 | 
						||
| 
								 | 
							
								      if (this.child) sleep(3000); else sleep(1000);
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    end : function () {
							 | 
						||
| 
								 | 
							
								      log('Terminating.');
							 | 
						||
| 
								 | 
							
								      kill();
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  this.trans = {
							 | 
						||
| 
								 | 
							
								    init      : replicate,
							 | 
						||
| 
								 | 
							
								    replicate : function () { return this.child?wait:migrate },
							 | 
						||
| 
								 | 
							
								    migrate   : wait,
							 | 
						||
| 
								 | 
							
								    killing   : end,
							 | 
						||
| 
								 | 
							
								    wait      : function () { return this.child?killing:wait },
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  this.next=init;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								compile(ag);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								create('ag',{ },2);
							 |