Exemple #1
0
 /**
  * @param CM_Model_User      $user
  * @param CM_Action_Abstract $action
  * @param CM_Model_Abstract  $model
  * @param mixed|null         $data
  */
 public static function publishAction($user, CM_Action_Abstract $action, CM_Model_Abstract $model, $data = null)
 {
     if (!$user->getOnline()) {
         return;
     }
     $streamChannel = self::getKeyByUser($user);
     parent::publishAction($streamChannel, $action, $model, $data);
 }
Exemple #2
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();
     }
 }
Exemple #3
0
 public function testCreate()
 {
     /** @var CM_Model_StreamChannel_Abstract $streamChannel */
     $streamChannel = CM_Model_StreamChannel_Abstract::createType(CM_Model_StreamChannel_Message::getTypeStatic(), array('key' => 'foo1', 'adapterType' => CM_MessageStream_Adapter_SocketRedis::getTypeStatic()));
     $this->assertInstanceOf('CM_Model_StreamChannel_Message', $streamChannel);
     $this->assertSame('foo1', $streamChannel->getKey());
     $this->assertEquals(CM_MessageStream_Adapter_SocketRedis::getTypeStatic(), $streamChannel->getAdapterType());
     $this->assertSame(time(), $streamChannel->getCreateStamp());
     /** @var CM_Model_StreamChannel_Abstract $channel1 */
     $channel1 = CM_Model_StreamChannel_Abstract::createType(CM_Model_StreamChannel_Message::getTypeStatic(), ['key' => 'foo', 'adapterType' => CM_MessageStream_Adapter_SocketRedis::getTypeStatic()]);
     /** @var CM_Model_StreamChannel_Abstract $channel2 */
     $channel2 = CM_Model_StreamChannel_Abstract::createType(CM_Model_StreamChannel_Message::getTypeStatic(), ['key' => 'foo', 'adapterType' => CM_MessageStream_Adapter_SocketRedis::getTypeStatic()]);
     $this->assertInstanceOf('CM_Model_StreamChannel_Message', $channel1);
     $this->assertInstanceOf('CM_Model_StreamChannel_Message', $channel2);
     $this->assertSame($channel1->getId(), $channel2->getId());
     $this->assertSame($channel1->getCreateStamp(), $channel2->getCreateStamp());
 }
Exemple #4
0
 public function testCreate()
 {
     $streamChannel = CM_Model_StreamChannel_Abstract::createType(CM_Model_StreamChannel_Message::getTypeStatic(), array('key' => 'foo1', 'adapterType' => CM_MessageStream_Adapter_SocketRedis::getTypeStatic()));
     $this->assertInstanceOf('CM_Model_StreamChannel_Message', $streamChannel);
     try {
         CM_Model_StreamChannel_Abstract::createType(CM_Model_StreamChannel_Message::getTypeStatic(), array('key' => 'foo1', 'adapterType' => CM_MessageStream_Adapter_SocketRedis::getTypeStatic()));
         $this->fail();
     } catch (CM_Db_Exception $e) {
         $this->assertContains('Duplicate entry', $e->getMessage());
     }
     CM_Model_StreamChannel_Abstract::createType(CM_Model_StreamChannel_Message::getTypeStatic(), array('key' => 'foo1', 'adapterType' => 2));
 }
Exemple #5
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());
         }
     }
 }