Exemple #1
0
 public function testFetchStatus()
 {
     $serverList = new CM_Janus_ServerList();
     foreach ([1, 5] as $serverId) {
         $server = $this->mockClass('CM_Janus_Server')->newInstanceWithoutConstructor();
         $server->mockMethod('getId')->set($serverId);
         /** @var CM_Janus_Server $server */
         $serverList->addServer($server);
     }
     $httpApiClient = $this->mockClass('CM_Janus_HttpApiClient')->newInstanceWithoutConstructor();
     $httpApiClient->mockMethod('fetchStatus')->set(function (CM_Janus_Server $server) {
         switch ($server->getId()) {
             case 1:
                 return [['id' => 'stream-foo', 'channelName' => 'channel-foo', 'isPublish' => false]];
             case 5:
                 return [['id' => 'stream-bar', 'channelName' => 'channel-bar', 'isPublish' => false], ['id' => 'stream-zoo', 'channelName' => 'channel-zoo', 'isPublish' => false]];
         }
     });
     /** @var CM_Janus_HttpApiClient $httpApiClient */
     $janus = new CM_Janus_Service($serverList, $httpApiClient);
     /** @var CM_Janus_Stream[] $streams */
     $streams = $this->callProtectedMethod($janus, '_fetchStatus');
     $this->assertContainsOnlyInstancesOf('CM_Janus_Stream', $streams);
     $this->assertCount(3, $streams);
     $this->assertSame($serverList->getById(1), $streams[0]->getServer());
     $this->assertSame('stream-foo', $streams[0]->getStreamKey());
     $this->assertSame('channel-foo', $streams[0]->getStreamChannelKey());
     $this->assertSame($serverList->getById(5), $streams[1]->getServer());
     $this->assertSame('stream-bar', $streams[1]->getStreamKey());
     $this->assertSame('channel-bar', $streams[1]->getStreamChannelKey());
     $this->assertSame($serverList->getById(5), $streams[2]->getServer());
     $this->assertSame('stream-zoo', $streams[2]->getStreamKey());
     $this->assertSame('channel-zoo', $streams[2]->getStreamChannelKey());
 }
Exemple #2
0
 /**
  * @param array $servers
  * @return CM_Janus_Service
  * @throws CM_Exception_Invalid
  */
 public function createService(array $servers)
 {
     $serverList = new CM_Janus_ServerList();
     foreach ($servers as $serverId => $serverConfig) {
         $iceServerList = isset($serverConfig['iceServerList']) ? $serverConfig['iceServerList'] : null;
         if (empty($serverConfig['pluginList'])) {
             throw new CM_Exception_Invalid('Server pluginList is empty');
         }
         $serverList->addServer(new CM_Janus_Server($serverId, $serverConfig['key'], $serverConfig['httpAddress'], $serverConfig['webSocketAddress'], $serverConfig['pluginList'], new CM_Geo_Point($serverConfig['coordinates']['latitude'], $serverConfig['coordinates']['longitude']), $iceServerList));
     }
     $httpClient = new GuzzleHttp\Client();
     $appName = CM_App::getInstance()->getName();
     $contextFormatter = new CM_Log_ContextFormatter_Cargomedia($appName);
     $httpApiClient = new CM_Janus_HttpApiClient($httpClient, $contextFormatter);
     $janus = new CM_Janus_Service($serverList, $httpApiClient);
     return $janus;
 }
Exemple #3
0
 public function testGetForIdentifier()
 {
     $serverList = new CM_Janus_ServerList();
     $serverClass = $this->mockClass('CM_Janus_Server');
     for ($i = 0; $i < 100; $i++) {
         /** @var CM_Janus_Server $server */
         $server = $serverClass->newInstanceWithoutConstructor();
         $serverList->addServer($server);
     }
     $id = rand(0, 1000);
     $server1 = $serverList->getForIdentifier($id);
     for ($i = 0; $i < 10; $i++) {
         $this->assertSame($server1, $serverList->getForIdentifier($id));
     }
     $id++;
     $server2 = $serverList->getForIdentifier($id);
     $this->assertNotSame($server1, $server2);
 }
Exemple #4
0
 /**
  * @param CM_Model_Stream_Abstract $stream
  * @throws CM_Exception_Invalid
  * @throws CM_Janus_StopStreamError
  */
 protected function _stopStream(CM_Model_Stream_Abstract $stream)
 {
     /** @var $streamChannel CM_Model_StreamChannel_Media */
     $streamChannel = $stream->getStreamChannel();
     $server = $this->_serverList->getById($streamChannel->getServerId());
     $result = $this->_httpApiClient->stopStream($server, $stream->getKey());
     if (array_key_exists('error', $result)) {
         throw new CM_Janus_StopStreamError($result['error']);
     }
 }