} } $tmp_set = array(); foreach ($state['channels_known'] as $pair) { $tmp_set = array_merge($tmp_set, $pair); } $tmp_set = array_unique($tmp_set); $diff = array_diff($tmp_set, $state['proc_known']); if (empty($diff)) { echo sprintf("process %s knows the communication graph \n", $state['name']); } } return $state; } } $scheduler = new Scheduler(); $a = $scheduler->spawn('Process', array('a')); $b = $scheduler->spawn('Process', array('b')); $c = $scheduler->spawn('Process', array('c')); $d = $scheduler->spawn('Process', array('d')); $e = $scheduler->spawn('Process', array('e')); $f = $scheduler->spawn('Process', array('f')); $g = $scheduler->spawn('Process', array('g')); $h = $scheduler->spawn('Process', array('h')); $scheduler->send($a, new Message('neighbors', array($b, $h))); $scheduler->send($b, new Message('neighbors', array($a, $c))); $scheduler->send($c, new Message('neighbors', array($b, $d))); $scheduler->send($d, new Message('neighbors', array($c, $e))); $scheduler->send($e, new Message('neighbors', array($d, $f))); $scheduler->send($f, new Message('neighbors', array($e, $g))); $scheduler->send($g, new Message('neighbors', array($f, $h)));
return array('server' => $args['count_server']); } public function receive() { return array('count'); } public function handle_count($msg, $state) { echo sprintf("%s: got count %d\n", $this->self(), $msg); sleep(2); $next = rand(0, 2); switch ($next) { case 0: $this->send($state['server'], new Message('incr', rand(1, 20))); break; case 1: $this->send($state['server'], new Message('decr', rand(1, 20))); break; case 2: $this->send($state['server'], new Message('get_count', array('sender' => $this->self()))); break; } return $state; } } $scheduler = new Scheduler(); $counter = $scheduler->spawn('Counter', array()); $scheduler->spawn('CounterClient', array('count_server' => $counter)); $scheduler->spawn('CounterClient', array('count_server' => $counter)); $scheduler->spawn('CounterClient', array('count_server' => $counter)); $scheduler->run();