BroadcastChannelReceiveMessage

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

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

Синтаксис

BroadcastChannelReceiveMessage(<Имя или идентификатор канала (INT,STRING)>,<Ожидать нового сообщения, мс. (INT)>=0,<Код сообщения (INT)>,<Содержимое сообщения (STRING)>,<Отправитель (STRING)>):<Получено новое сообщение (INT)>

Аргументы

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

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

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

Примеры

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

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