Lib_binsock - библиотека для работы с сокетами в трех режимах:
-побайтно(прием/передача)
-прием/передача массивов бинарных данных
-InputStream(Resource)
Обновление. В версии 1.1 добавлена функция flush для немедленной отправки данных
Библиотека содержит следующие функции:
procedure debug_register(idx:integer);
Устанавливает библиотеке идентификатор, который будет передаваться
в обработчик ошибок (о нем ниже) в случае возникновения исключительной ситуации(Exception).
procedure enable_debug(flag:integer);
Включает/отключает режим отладки.
flag = 1 - включить
flag = -1 - выключить
По умолчанию отладка отключена.
Если отладка включена, то в случае возникновения ошибки
вызывается процедура-обработчик, определенная в главной программе, например:
//sender - числовой идентификатор библиотеки, присваиваемый с помощью debug_register
//exception - системное сообщение об ошибке
//errstr - дополнительное сообщение (указанное при компиляции библиотеки)
//code - код ошибки (указанный при компиляции библиотеки)
procedure onerror(sender:Integer;exception:string;errstr:string;code:integer);
//Имя процедуры, порядок и тип параметров должны быть соблюдены !
begin
cmOK:=CreateCommand('OK',CM_OK,1);
ShowAlert('Error #'+IntegerToString(code),'Exception: '+exception+chr(10)+chr(13)+'ErrorString: '+errstr, LoadImage('/icon.png'),ALERT_ERROR);
delay(20000);
ShowForm;
end;
Параметр code может иметь следующие значения:
int ERR_OPENERROR = 0; - ошибка открытия сокета
int ERR_CLOSEERROR = 1; - ошибка закрытия сокета
int ERR_AVAILERROR = 2; - ошибка при определении размера буфера
int ERR_READERROR = 3; - ошибка получения данных
int ERR_WRITEERROR = 4; - ошибка отправки данных
Внимание!
В случае, если отладка включена, обработчик должен присутствовать обязательно,
иначе возможен сбой в работе мидлета; если отладка отключена, обработчик объявлять не обязательно.
function open(url:string):integer;
Открывает соединение с адресом url.
Формат url стандартный:
socket://url:port
Возвращает 1 в случае успеха, иначе возвращает -1 и передает в обработчик сообщение об ошибке ERR_OPENERROR.
procedure close;
Закрывает соединение.
В случае неудачи передает в обработчик сообщение об ошибке ERR_CLOSEERROR.
function available:integer;
Возвращает размер доступных для приема данных.
В случае неудачи возвращает -1 и передает в обработчик сообщение об ошибке ERR_AVAILERROR.
function read_byte:integer;
Возвращает следующий байт данных из буфера приема, в случае неудачи возвращает -1 и передает в обработчик сообщение об ошибке ERR_READERROR.
function write_byte(data:integer):integer;
Записывает в буфер передачи байт data.
Возвращает 1 в случае успеха, иначе возвращает -1 и передает ошибку ERR_WRITEERROR.
function get_in_stream:resource;
Возвращает поток resource для подключения.
function write_bin(data:string):integer;
Записывает массив байт data в поток передачи.
Возвращает 1 в случае успеха, иначе возвращает -1 и передает ошибку ERR_WRITEERROR.
function read_bin(len:integer):string;
Возвращает массив байт из входящего потока.
В случае неудачи возвращает null и передает в обработчик сообщение ERR_READERROR.
function rx_count:integer;
Возвращает количество принятых данных.
function tx_count:integer;
Возвращает размер принятых данных.
function flush:integer; c версии 1.1
Инициирует немедленную отправку данных на сервер
Возвращает 1 в случае успеха, иначе возвращает -1 и передает в обработчик сообщение об ошибке
ERR_FLUSHERROR.
Внимание!
---------
Библиотека требует доступа к сети
Проверено на Motorola L9.
Отправку данных проверить не смог, но должно работать.
P.S. Предлагаю всем разработчикам в своих новых библиотеках (еще лучше и старые переделать) использовать такой же принцип обработки ошибок. Чуть позже опишу принцип подробнее. Основная идея состоит в том, чтобы использовать общий обработчик для обработки ошибок от всех библиотек.