BroadcastChannelSendMessage
| 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
//Поток закончил работу...