ucp_messenger - класс для рассылки сообщений по сети


NAME

ucp_messenger - класс для рассылки сообщений по сети


SYNOPSIS

        long l,rc
        ucp_messanger m

        m=create ucp_messenger  //создаем объект, их может быть много, у каждого - свой поток обработки
        m.cf_init(100)          //размер очереди сообщений - 100 элементов
        //после инициализации поток рассылки сообщений остановлен

        //добавляем сообщение
        rc=m.cf_message_add("ilya","привет!",l)
        //в rc - код завершения, в l - id сообщения в очереди
        if rc<>0 then
                //обработка ошибки cf_err() возвращает код, cf_err_text() - дополнительную информацию
                MessageBox("Информация об ошибке",m.cf_err_text())
        end if

        //добавляем еще одно сообщение
        m.cf_message_add("ilya","все пропало!")

        //есть возможность получить информацию об очереди
        sle_1.text=string(m.cf_count())         //сколько сообщений в очереди
        sle_4.text=string(m.cf_free_slots())    //сколько места свободно

        ...

        //запускаем обработку, все сообщения из очереди будут разосланы
        m.cf_worker_start()
        //выполнение программы продолжается, обработка очереди выполняется отделным потоком...

        ...

        //обработчик можно останавливать
        m.cf_worker_stop()

        ...

        //проверить состояние обработчика можно функцией
        if m.cf_is_suspended() then
                MessageBox("","Приостановлен")
        else
                MessageBox("","Работает")
        end if


DESCRIPTION

Данный класс предназначен для рассылки сетевых сообщений из PB без блокировки основной программы (создается дополнительный поток). При пустой очереди сообщений поток находится в спящем состоянии и не занимает ресурсы процессора. При рассылке собщений выполняется небольшая оптимизация, если сетевое имя не отвечает - из очереди удаляются все сообщения на это имя.

Установка: messenger.pbl - подлючается к проекту, pbmsg.dll - должна быть рядом с .exe или в path.


METHODS

Инициализация.

function integer cf_init ( long al_queue_size )

Выделение ресурсов, создание потока al_queue_size - число элементов в очереди. Возвращает код ошибки.


Управление очередью

function long cf_message_add ( string as_to, string as_text)

Добавить сообщение в очередь. Возвращает код ошибки.

function long cf_free_slots ( )

Вернуть число свободных элементов очереди.

function long cf_count ( )

Вернуть число сообщений в очереди.


Управление потоком

function integer cf_worker_start ( )

Запустить поток. Возвращает код ошибки.

function integer cf_worker_stop ( )

Остановить поток. Возвращает код ошибки.

function boolean cf_is_suspended ( )

Ввозвращает истину, если поток остановлен.


Обработка ошибок

function integer cf_err()

Возвращает (long) код последней ошибки.

function string cf_err_text()

Возвращает (string) описание последней ошибки.

subroutine cf_err_reset()

Сбрасывает флаг ошибки.


Разное

function integer cf_message_send ( string as_to, string as_text )

Отправить сообщение напрямую. Возвращает код ошибки.

function integer cf_option ( string as_option, string as_value )

Установка параметров. Допустимые параметры:

        OEM     кодировка сообщений - OEM
        ANSI    кодировка сообщений - ANSI (по умолчанию)

Для этих параметров значение не указывается, пример:

m.cf_option.(``OEM'',``'')


ERROR CODES

        E_OK        0   без ошибки
        E_W32       1   ошибка Win32 API (cf_err_text сообщит подробности)
        E_NOSLOT    3   нет места в очереди
        E_ID        4   указан недопустимый id для cf_message_cancel
        E_INIT      5   повторный вызов cf_init
        E_NOINIT    6   не была выполнена инициализация вызовом cf_init
        E_MEM       7   нехватает памяти
        E_OPT       8   недопустимый параметр для cf_option
        E_NAME      9   неверное сетевое имя.
        E_PARAM     10  ошибка аргумента


AUTHOR

Copyright (C) Ilya Chelpanov, (chelpanov@mail.ru), 2001

 

   ucp_messenger - класс для рассылки сообщений по сети