• Модуль: xmpp
  • Путь к файлу: ~/bitrix/modules/xmpp/classes/factory.php
  • Класс: CXMPPFactory
  • Вызов: CXMPPFactory::__SendMessage
private function __SendMessage($senderId, $receiverId, $messageID, $type, $message, $domain = "")
{
	if (!$this->isInitialized)
		$this->Initialize();

	$receiverId = intval($receiverId);
	if ($receiverId <= 0)
		return false;
	$messageID = intval($messageID);
	if ($messageID <= 0)
		return false;
	if (!in_array($type, array("P", "S")))
		return false;
	if ($message == '')
		return false;

	if (!CXMPPUtility::CheckXmppStatusOnline())
		return false;

	$senderJId = false;
	$receiverJId = false;

	$arUserID = array();
	$arUserID[] = $receiverId;

	$senderId = intval($senderId);
	if ($senderId <= 0)
	{
		if ($senderId != -5)
			return false;

		$senderJId = self::GetSystemJId($domain);
	}
	else
	{
		$arUserID[] = $senderId;
	}

	if(!$arJID = CXMPPUtility::GetJIdByUserId($arUserID, $domain))
		return false;

	if($senderId > 0)
		$senderJId = $arJID[$senderId];

	$receiverJId = $arJID[$receiverId];

	if (!$senderJId)
	{
		CXMPPUtility::Show("Error senderId=".$senderId.", receiverId=".$receiverId.", messageID=".$messageID." - Sender not found", 0);
		return false;
	}

	if (!$receiverJId)
	{
		CXMPPUtility::Show("Error senderId=".$senderId.", receiverId=".$receiverId.", messageID=".$messageID." - Reseiver not found", 0);
		return false;
	}

	$messageType = "chat";
	if ($type == "S")
		$messageType = "normal";

	$arMessage = CXMPPUtility::GetMessageArray($senderJId, $receiverJId, $messageType, $message, $domain);

	$result = false;

	if (CXMPPServer::IsServerStarted())
	{
		$server = CXMPPServer::GetServer();
		$result = $server->Send($receiverJId, $arMessage, $domain);
	}
	else
	{
		$result = CXMPPUtility::SendToServer($arMessage, $domain);
	}

	if ($result === true)
	{
		if (IsModuleInstalled("im") && CModule::IncludeModule("im"))
		{
			if ($type == "S")
			{
				$CIMNotify = new CIMNotify($receiverId);
				$CIMNotify->MarkNotifyRead($messageID);
			}
			else
			{
				$CIMMessage = new CIMMessage($receiverId);
				$CIMMessage->SetReadMessage($senderId);
			}
		}
		else
		{
			CSocNetMessages::MarkMessageRead($receiverId, $messageID);
		}
	}
	else
		CXMPPUtility::Show("Error senderId=".$senderId.", receiverId=".$receiverId.", messageID=".$messageID." - Message was not send", 0);

	return $result;
}