// - TODO определять отвалившийся клиент. тут только по таймауту // - TODO классы исключений и коды ошибок // - TODO для торрентов из нескольких видеофайлов (сезон сериала например) выдавать меню (плейлист) define('ACEPHPROXY_VERSION', '0.6.2'); require_once dirname(__FILE__) . '/class.client_pool.php'; require_once dirname(__FILE__) . '/class.stream_client.php'; require_once dirname(__FILE__) . '/class.stream_unit.php'; require_once dirname(__FILE__) . '/class.ace_connect.php'; require_once dirname(__FILE__) . '/class.ncurses_ui.php'; require_once dirname(__FILE__) . '/class.streams_mgr.php'; mb_internal_encoding('UTF-8'); // создаем коннект к acestream, запускаем клиентский сокет // изначально был этот ключ $key = 'n51LvQoTlJzNGaFxseRK-uvnvX-sD4Vm5Axwmc4UcoD-jruxmKsuJaH0eVgE'; // создает сокет сервера трансляций и управляет коннектами клиентов к демону $pool = new ClientPool('0.0.0.0', $port = 8001); // получает PID и выдает ссылку на трансляцию $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');
/** * @dataProvider hasDocumentDataProvider */ public function testHasDocument($collection1Data, $collection2Data, $isEquals) { $clientPool = new ClientPool(array('server1' => array('dsn' => 'someDsn1'), 'server2' => array('dsn' => 'someDsn2'))); $collection1 = $clientPool->get($collection1Data[0])->getDatabase($collection1Data[1])->getCollection($collection1Data[2]); $collection2 = $clientPool->get($collection2Data[0])->getDatabase($collection2Data[1])->getCollection($collection2Data[2]); $document = $collection1->createDocument(); $this->assertEquals($isEquals, $collection2->hasDocument($document)); }
public function testGet_DsnNotSpecified() { $pool = new ClientPool(array('connect1' => array('defaultDatabase' => 'db2', 'mapping' => array('db1' => array('col1' => '\\Sokil\\Mongo\\Collection1', 'col2' => '\\Sokil\\Mongo\\Collection2'), 'db2' => array('col1' => '\\Sokil\\Mongo\\Collection3', 'col2' => '\\Sokil\\Mongo\\Collection4'))))); $this->assertEquals(Client::DEFAULT_DSN, $pool->get('connect1')->getDsn()); }