Esempio n. 1
0
 /**
  * @param string $channel
  * @param string $clientKey
  * @throws CM_Exception_Invalid
  */
 protected function _unsubscribe($channel, $clientKey)
 {
     $channelData = CM_Model_StreamChannel_Message::extractStatusChannelData($channel);
     $channelKey = $channelData['key'];
     $channelType = $channelData['type'];
     $streamChannel = CM_Model_StreamChannel_Message::findByKeyAndAdapter($channelKey, $this->getType());
     if (!$streamChannel) {
         return;
     }
     if ($streamChannel->getType() != $channelType) {
         throw new CM_Exception_Invalid('StreamChannel type `' . $streamChannel->getType() . '` doesn\'t match expected value `' . $channelType . '`');
     }
     $streamChannelSubscribe = $streamChannel->getStreamSubscribes()->findKey($clientKey);
     if ($streamChannelSubscribe) {
         $streamChannelSubscribe->delete();
     }
     if ($streamChannel->getStreamSubscribes()->getCount() === 0) {
         $streamChannel->delete();
     }
 }
Esempio n. 2
0
 /**
  * @param array $status
  */
 private function _testSynchronize($status)
 {
     $adapter = $this->getMockBuilder('CM_MessageStream_Adapter_SocketRedis')->disableOriginalConstructor()->setMethods(array('_fetchStatus'))->getMock();
     $adapter->expects($this->any())->method('_fetchStatus')->will($this->returnValue($status));
     /** @var $adapter CM_MessageStream_Adapter_SocketRedis */
     $adapter->synchronize();
     $streamChannels = new CM_Paging_StreamChannel_AdapterType($adapter->getType());
     $this->assertSame(count($status), $streamChannels->getCount());
     /** @var $streamChannel CM_Model_StreamChannel_Message */
     foreach ($streamChannels as $streamChannel) {
         $this->assertInstanceOf('CM_Model_StreamChannel_Message', $streamChannel);
         $channel = $streamChannel->getKey() . ':' . CM_Model_StreamChannel_Message::getTypeStatic();
         $this->assertSame(count($status[$channel]['subscribers']), $streamChannel->getStreamSubscribes()->getCount());
     }
     foreach ($status as $channel => $channelData) {
         list($channelKey, $channelType) = explode(':', $channel);
         $streamChannel = CM_Model_StreamChannel_Message::findByKeyAndAdapter($channelKey, $adapter->getType());
         $this->assertInstanceOf('CM_Model_StreamChannel_Message', $streamChannel);
         foreach ($channelData['subscribers'] as $clientKey => $subscriberData) {
             $subscribe = CM_Model_Stream_Subscribe::findByKeyAndChannel($clientKey, $streamChannel);
             $this->assertInstanceOf('CM_Model_Stream_Subscribe', $subscribe);
             $this->assertSameTime(time() - CM_MessageStream_Adapter_SocketRedis::SYNCHRONIZE_DELAY - 1, $subscribe->getStart());
         }
     }
 }