Difference between revisions of "BroadcastChannelSendMessage"

From SunFlurry wiki
Jump to: navigation, search
1>Admin
 
m (1 revision imported)
 
(No difference)

Latest revision as of 11:57, 1 April 2026

  BroadcastChannelSendMessage (Доставка сообщений)
Объект:Функции общего назначения
Статус разработки: Реализована
Тип:Функция
Обращение к БД:Нет
Исключения:Невозможно превратить в число, строку, ошибка сервера
Визуальность:Нет

Функция выполняет отсылку сообщения (состоящего из произвольного числового идентификатора и произвольного текста) всем абонентам, подписанным на канал сообщений, заданный по его имени или идентификатору. Для подписчиков, использующих форму (см. BroadcastChannelSubscribe), сообщения доставляются сразу же (однако, может пройти долгое время, пока форма закончит текущую работу, и даже когда она ожидает действий пользователя, может пройти до нескольких секунд). Доставка будет осуществляться по такому же принципу, как доставляются сообщения BroadcastGlobalMessage. Если форма больше не существует, сообщение для таких подписчиков доставлены не будут. Подписчикам без указания формы, подтребуется вызвать функцию BroadcastChannelReceiveMessage, чтобы забрать первое из сообщений из очереди. Разрешается использовать функцию из потоков, которые не подписаны на канал, для которого происходит отправка. Функцию также можно использовать для каналов, на которые не подписан ни один абонент (в этом случае, сообщение будет проигнорировано). Функция возвращает количество отосланных сообщений (которое совпадает с количеством абонентов канала на момент вызова функции).

Синтаксис

BroadcastChannelSendMessage(<Имя или идентификатор канала (INT,STRING)>,<Код сообщения (INT)>,<Содержимое сообщения (STRING)>):<Количество отосланных сообщений (INT)>

Аргументы

  • <Имя или идентификатор канала (INT,STRING)> - Имя канала для подписки (строка) или его идентификатор (число).
  • <Код сообщения (INT)> - Произвольный код сообщения, коды 1-10000 рекомендуется использовать для нужд проекта, остальные для нужд внешних обработок.
  • <Содержимое сообщения (STRING)> - Произвольный текст сообщения для отправки (строка может содержать международные и любые непечатные символы).

Возвращаемое значение

Возвращает количество отосланных сообщений.

Примеры

//Пример простого отправителя и подписчика в одном фрагменте текста.

  Function Подписчик()
    аКодКанала:=BroadcastChannelSubscribe("Канал");
    аНум:=0;
    While 1 Do
      If not BroadcastChannelReceiveMessage(аКодКанала,100,аНум) Then
        Continue;
      EndIf;
      Message("Получено сообщение с ID "+аНум);
      If аНум=100 Then
        Break;
      EndIf;
    EndDo;
    BroadcastChannelUnsubscribe(аКодКанала);
    Message("Поток закончил работу...");
  EndFunction

Mutex.ExecuteFunctionInSeparateThread("Подписчик",0);

аКодКанала:=BroadcastChannelSubscribe("Канал");
ИдСообщения:=1;
While ИдСообщения<=100 Do
  If BroadcastChannelSendMessage(аКодКанала,ИдСообщения,"")>0 Then
    ИдСообщения:=ИдСообщения+1;
  EndIf;
EndDo;
//Ожидания завершения потока после принятия сообщения 100
//Без этой паузы, поток можен быть завершен форсировано, так как текущий (родительский) поток будет завершен
Sleep(1000);

//Будет выведено:
//Получено сообщение с ID 1
//Получено сообщение с ID 2
//..
//Получено сообщение с ID 100
//Поток закончил работу...