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