public function testFindByKeyAndAdapter() { $adapterType = 1; /** @var CM_Model_StreamChannel_Video $streamChannelOriginal */ $streamChannelOriginal = CMTest_TH::createStreamChannel(null, $adapterType); $streamChannelKey = $streamChannelOriginal->getKey(); $streamChannel = CM_Model_StreamChannel_Abstract::findByKeyAndAdapter($streamChannelKey, $adapterType); $this->assertInstanceOf('CM_Model_StreamChannel_Video', $streamChannel); $this->assertEquals($streamChannelOriginal->getId(), $streamChannel->getId()); $streamChannelOriginal->delete(); $this->assertNull(CM_Model_StreamChannel_Abstract::findByKeyAndAdapter($streamChannelKey, $adapterType)); }
public function synchronize() { $startStampLimit = time() - 3; $status = array(); foreach (CM_Stream_Video::getInstance()->getServers() as $serverId => $wowzaServer) { $singleStatus = CM_Params::decode($this->_fetchStatus($wowzaServer['privateIp']), true); foreach ($singleStatus as $streamName => $publish) { $publish['serverId'] = $serverId; $publish['serverHost'] = $wowzaServer['privateIp']; $status[$streamName] = $publish; } } $streamChannels = $this->_getStreamChannels(); foreach ($status as $streamName => $publish) { /** @var CM_Model_StreamChannel_Abstract $streamChannel */ $streamChannel = CM_Model_StreamChannel_Abstract::findByKeyAndAdapter($streamName, $this->getType()); if (!$streamChannel || !$streamChannel->getStreamPublishs()->findKey($publish['clientId'])) { $this->_stopClient($publish['clientId'], $publish['serverHost']); } foreach ($publish['subscribers'] as $clientId => $subscribe) { if (!$streamChannel || !$streamChannel->getStreamSubscribes()->findKey($clientId)) { $this->_stopClient($clientId, $publish['serverHost']); } } } /** @var CM_Model_StreamChannel_Abstract $streamChannel */ foreach ($streamChannels as $streamChannel) { if (!$streamChannel->hasStreams()) { $streamChannel->delete(); continue; } /** @var CM_Model_Stream_Publish $streamPublish */ $streamPublish = $streamChannel->getStreamPublishs()->getItem(0); if ($streamPublish) { if ($streamPublish->getStart() > $startStampLimit) { continue; } if (!isset($status[$streamChannel->getKey()])) { $this->unpublish($streamChannel->getKey()); } } /** @var CM_Model_Stream_Subscribe $streamSubscribe */ foreach ($streamChannel->getStreamSubscribes() as $streamSubscribe) { if ($streamSubscribe->getStart() > $startStampLimit) { continue; } if (!isset($status[$streamChannel->getKey()]['subscribers'][$streamSubscribe->getKey()])) { $this->unsubscribe($streamChannel->getKey(), $streamSubscribe->getKey()); } } } }
public function testSynchronizeMissingInWowza() { $streamChannel = CMTest_TH::createStreamChannel(); $streamPublish = CMTest_TH::createStreamPublish(null, $streamChannel); $streamSubscribe = CMTest_TH::createStreamSubscribe(null, $streamChannel); $wowza = $this->getMock('CM_Stream_Adapter_Video_Wowza', array('_fetchStatus')); $json = $this->_generateWowzaData(array()); $wowza->expects($this->any())->method('_fetchStatus')->will($this->returnValue($json)); /** @var $wowza CM_Stream_Video */ $wowza->synchronize(); $this->assertEquals($streamChannel, CM_Model_StreamChannel_Abstract::findByKeyAndAdapter($streamChannel->getKey(), $wowza->getType())); $this->assertEquals($streamPublish, CM_Model_Stream_Publish::findByKeyAndChannel($streamPublish->getKey(), $streamChannel)); $this->assertEquals($streamSubscribe, CM_Model_Stream_Subscribe::findByKeyAndChannel($streamSubscribe->getKey(), $streamChannel)); CMTest_TH::timeForward(5); $wowza->synchronize(); $this->assertNull(CM_Model_StreamChannel_Abstract::findByKeyAndAdapter($streamChannel->getKey(), $wowza->getType())); $this->assertNull(CM_Model_Stream_Publish::findByKeyAndChannel($streamPublish->getKey(), $streamChannel)); $this->assertNull(CM_Model_Stream_Subscribe::findByKeyAndChannel($streamSubscribe->getKey(), $streamChannel)); }
public function testFindByKeyAndAdapter() { $adapterType = 1; /** @var CM_Model_StreamChannel_Media $streamChannelOriginal */ $streamChannelOriginal = CMTest_TH::createStreamChannel(null, $adapterType); $streamChannelId = $streamChannelOriginal->getId(); $streamChannelKey = $streamChannelOriginal->getKey(); $streamChannel = CM_Model_StreamChannel_Abstract::findByKeyAndAdapter($streamChannelKey, $adapterType); $this->assertInstanceOf('CM_Model_StreamChannel_Media', $streamChannel); $this->assertEquals($streamChannelOriginal->getId(), $streamChannel->getId()); $streamChannelOriginal->delete(); $this->assertNull(CM_Model_StreamChannel_Abstract::findByKeyAndAdapter($streamChannelKey, $adapterType)); // invalid cache-entry $cacheKey = CM_CacheConst::StreamChannel_Id . '_key' . $streamChannelKey . '_adapterType:' . $adapterType; $cache = CM_Cache_Shared::getInstance(); $cache->set($cacheKey, ['id' => $streamChannelId, 'type' => $adapterType]); $this->assertNull(CM_Model_StreamChannel_Abstract::findByKeyAndAdapter($streamChannelKey, $adapterType)); $this->assertSame(false, $cache->get($cacheKey)); }
public function testSynchronizeMissingInJanus() { $streamChannel = CMTest_TH::createStreamChannel(null, CM_Janus_Service::getTypeStatic()); $streamPublish = CMTest_TH::createStreamPublish(null, $streamChannel); $streamSubscribe = CMTest_TH::createStreamSubscribe(null, $streamChannel); $existingStreamChannel = CMTest_TH::createStreamChannel(null, CM_Janus_Service::getTypeStatic()); $existingStreamPublish = CMTest_TH::createStreamPublish(null, $existingStreamChannel); $existingStreamSubscribe = CMTest_TH::createStreamSubscribe(null, $existingStreamChannel); $emptyStreamChannel = CMTest_TH::createStreamChannel(null, CM_Janus_Service::getTypeStatic()); $location = $this->mockClass('CM_Geo_Point')->newInstanceWithoutConstructor(); $server1 = $this->mockClass('CM_Janus_Server')->newInstance([1, 'key', 'http://mock', 'ws://mock', [], $location]); /** @var CM_Janus_ServerList|\Mocka\AbstractClassTrait $serverList */ $serverList = $this->mockObject('CM_Janus_ServerList'); $serverList->mockMethod('getAll')->set([$server1]); /** @var CM_Janus_HttpApiClient|\Mocka\AbstractClassTrait $httpApiClient */ $httpApiClient = $this->mockClass('CM_Janus_HttpApiClient')->newInstanceWithoutConstructor(); $httpApiClient->mockMethod('fetchStatus')->set([['id' => $existingStreamPublish->getKey(), 'channelName' => $existingStreamChannel->getKey(), 'isPublish' => true], ['id' => $existingStreamSubscribe->getKey(), 'channelName' => $existingStreamChannel->getKey(), 'isPublish' => false]]); $janus = new CM_Janus_Service($serverList, $httpApiClient); $janus->synchronize(); $this->assertEquals($streamChannel, CM_Model_StreamChannel_Abstract::findByKeyAndAdapter($streamChannel->getKey(), $janus->getType())); $this->assertEquals($streamPublish, CM_Model_Stream_Publish::findByKeyAndChannel($streamPublish->getKey(), $streamChannel)); $this->assertEquals($streamSubscribe, CM_Model_Stream_Subscribe::findByKeyAndChannel($streamSubscribe->getKey(), $streamChannel)); $this->assertEquals($existingStreamChannel, CM_Model_StreamChannel_Abstract::findByKeyAndAdapter($existingStreamChannel->getKey(), $janus->getType())); $this->assertEquals($existingStreamPublish, CM_Model_Stream_Publish::findByKeyAndChannel($existingStreamPublish->getKey(), $existingStreamChannel)); $this->assertEquals($existingStreamSubscribe, CM_Model_Stream_Subscribe::findByKeyAndChannel($existingStreamSubscribe->getKey(), $existingStreamChannel)); $this->assertNull(CM_Model_StreamChannel_Abstract::findByKeyAndAdapter($emptyStreamChannel->getKey(), $janus->getType())); CMTest_TH::timeForward(5); $janus->synchronize(); $this->assertNull(CM_Model_StreamChannel_Abstract::findByKeyAndAdapter($streamChannel->getKey(), $janus->getType())); $this->assertNull(CM_Model_Stream_Publish::findByKeyAndChannel($streamPublish->getKey(), $streamChannel)); $this->assertNull(CM_Model_Stream_Subscribe::findByKeyAndChannel($streamSubscribe->getKey(), $streamChannel)); $this->assertEquals($existingStreamChannel, CM_Model_StreamChannel_Abstract::findByKeyAndAdapter($existingStreamChannel->getKey(), $janus->getType())); $this->assertEquals($existingStreamPublish, CM_Model_Stream_Publish::findByKeyAndChannel($existingStreamPublish->getKey(), $existingStreamChannel)); $this->assertEquals($existingStreamSubscribe, CM_Model_Stream_Subscribe::findByKeyAndChannel($existingStreamSubscribe->getKey(), $existingStreamChannel)); }
/** * @param string $streamName * @param string $clientKey */ public function unsubscribe($streamName, $clientKey) { $streamName = (string) $streamName; $clientKey = (string) $clientKey; /** @var CM_Model_StreamChannel_Abstract $streamChannel */ $streamChannel = CM_Model_StreamChannel_Abstract::findByKeyAndAdapter($streamName, $this->getType()); if (!$streamChannel) { return; } $streamSubscribe = $streamChannel->getStreamSubscribes()->findKey($clientKey); if ($streamSubscribe) { $streamSubscribe->delete(); } if (!$streamChannel->hasStreams()) { $streamChannel->delete(); } }
/** * @return CM_Model_StreamChannel_Abstract|null */ public function findStreamChannel() { return CM_Model_StreamChannel_Abstract::findByKeyAndAdapter($this->getKey(), $this->getAdapterType()); }
/** * @param string $streamName * @return CM_Model_StreamChannel_Abstract|null */ public function findStreamChannelByKey($streamName) { return CM_Model_StreamChannel_Abstract::findByKeyAndAdapter($streamName, $this->_adapterType); }