$ace = new AceConnect($key); // управляет трансляциями. заказывает их у Ace и раздает клиентам из pool $streams = new StreamsManager($ace, $pool); // при рефакторинге роль совершенно изменилась и не соответствует имени класса // занимается отрисовкой ncurses интерфейса $EVENTS = new EventController(); $EVENTS->init(' AcePHProxy v.' . ACEPHPROXY_VERSION . ' running on port ' . $port); // мониторим новых клиентов, запускаем для них трансляцию или, если такая запущена, копируем данные из нее // мониторим дисконнекты и убиваем трансляцию, если клиентов больше нет (пока можно сделать ее вечноживой) // мониторим проблемы с трансляцией и делаем попытку ее перезапустить в случае чего $last_check = 0; $ctrlC = false; if (!function_exists('pcntl_signal')) { $EVENTS->error('pcntl function not found. Ctrl+C will not work properly'); } else { $EVENTS->log('Setting up Ctrl+C', EventController::CLR_GREEN); declare (ticks=1000); function signalHandler() { global $ctrlC, $EVENTS; $ctrlC = true; $EVENTS->error('Ctrl+C caught. Exiting'); } pcntl_signal(SIGINT, 'signalHandler'); } // сюда будем писать инфу, выводимую на экран $rows = array(); while (!$ctrlC) { $check_inet = time() - $last_check > 10; // every N sec try {