• Модуль: pull
  • Путь к файлу: ~/bitrix/modules/pull/lib/protobuftransport.php
  • Класс: BitrixPullProtobufTransport
  • Вызов: ProtobufTransport::convertMessage
static function convertMessage(array $channels, array $event)
{
	$result = [];

	$extra = is_array($event['extra']) ? $event['extra'] : [];

	$body = Common::jsonEncode(array(
		'module_id' => $event['module_id'],
		'command' => $event['command'],
		'params' => $event['params'] ?: [],
		'extra' => $extra
	));

	// for statistics
	$messageType = "{$event['module_id']}_{$event['command']}";
	$messageType = preg_replace("/[^w]/", "", $messageType);

	$maxChannelsPerRequest = CPullOptions::GetMaxChannelsPerRequest();
	$receivers = [];
	foreach ($channels as $channel)
	{
		$receiver = new ProtobufReceiver();
		$receiver->setIsPrivate(true);
		$receiver->setId(hex2bin($channel));
		$receivers[] = $receiver;

		if(count($receivers) === $maxChannelsPerRequest)
		{
			$message = new ProtobufIncomingMessage();
			$message->setReceiversList(new MessageCollection($receivers));
			$message->setExpiry($event['expiry']);
			$message->setBody($body);
			$message->setType($messageType); // for statistics

			$result[] = $message;
			$receivers = [];
		}
	}

	if(count($receivers) > 0)
	{
		$message = new ProtobufIncomingMessage();
		$message->setReceiversList(new MessageCollection($receivers));
		$message->setExpiry($event['expiry']);
		$message->setBody($body);
		$message->setType($messageType); // for statistics

		$result[] = $message;
	}

	return $result;
}