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

	$maxPayload = CPullOptions::GetMaxPayload() - 200;
	$maxMessages = CPullOptions::GetMaxMessagesPerRequest();

	$currentMessageBatch = [];
	$currentBatchSize = 0;

	foreach ($messages as $message)
	{
		$messageSize = static::getMessageSize($message);
		if($currentBatchSize + $messageSize >= $maxPayload || count($currentMessageBatch) >= $maxMessages)
		{
			// finalize current request and start a new one
			$incomingMessagesRequest = new ProtobufIncomingMessagesRequest();
			$incomingMessagesRequest->setMessagesList(new MessageCollection($currentMessageBatch));
			$request = new ProtobufRequest();
			$request->setIncomingMessages($incomingMessagesRequest);
			$result[] = $request;

			$currentMessageBatch = [];
			$messageSize = 0;
		}

		// add the request to the current batch
		$currentMessageBatch[] = $message;
		$currentBatchSize += $messageSize;
	}

	if(!empty($currentMessageBatch))
	{
		$incomingMessagesRequest = new ProtobufIncomingMessagesRequest();
		$incomingMessagesRequest->setMessagesList(new MessageCollection($currentMessageBatch));
		$request = new ProtobufRequest();
		$request->setIncomingMessages($incomingMessagesRequest);
		$result[] = $request;
	}

	return $result;
}