1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2024-12-27 02:43:54 +02:00

TCP: Обработать запрос

This commit is contained in:
Anton Titovets 2024-12-15 21:21:57 +03:00
parent fd628d98be
commit 1556e87119
6 changed files with 5949 additions and 5944 deletions

File diff suppressed because it is too large Load Diff

View File

@ -194,48 +194,40 @@
КонецФункции
// Подключиться и получить данные
// Создает соединение и читает данные до конца или по ограничениям
//
// Примечание:
// При работе с бесконечным потоком входящих данных обязательно указание параметра МаксимальныйРазмер, так как^^
// бесконечное получение данных может привести к зависанию
// При закрытии соединения, ошибке или обнаружении EOF чтение завершается в любом случае
// ОбработатьЗапрос
// Отправляет одиночный запрос на указанный адрес и получает ответ, используя стандартные настройки
//
// Параметры:
// Адрес - Строка - Адрес и порт для подключения - address
// МаксимальныйРазмер - Число - Максимальный размер данных. 0 > без ограничений - size
// Таймаут - Число - Таймаут ожидания данных - timeout
// Строкой - Булево - Истина > возвращает строку, Ложь > двоичные данные - string
// Кодировка - Строка - Кодировка получаемых данных - enc
// Данные - Строка, ДвоичныеДанные - Данные или текст для отправки - data
// ОтветСтрокой - Булево - Признак получения ответа как строки - string
//
// Возвращаемое значение:
// Строка, ДвоичныеДанные - Полученные данные
Функция ПодключитьсяИПолучитьДанные(Знач Адрес
, Знач МаксимальныйРазмер = 0
, Знач Таймаут = 5000
, Знач Строкой = Истина
, Знач Кодировка = "UTF-8") Экспорт
// ДвоичныеДанные, Строка - ответ на запрос
Функция ОбработатьЗапрос(Знач Адрес, Знач Данные = "", Знач ОтветСтрокой = Истина) Экспорт
OPI_ПреобразованиеТипов.ПолучитьБулево(Строкой);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Кодировка);
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Данные, Истина);
OPI_ПреобразованиеТипов.ПолучитьБулево(ОтветСтрокой);
Соединение = ОткрытьСоединение(Адрес);
Если Не ЗначениеЗаполнено(Соединение) Тогда
ВызватьИсключение "Не удалось создать Соединение";
КонецЕсли;
Результат = ОтправитьДвоичныеДанные(Соединение, Данные);
Сообщение = ПрочитатьДвоичныеДанные(Соединение, МаксимальныйРазмер, Таймаут);
Если Результат Тогда
Ответ = ПрочитатьДвоичныеДанные(Соединение, , Символы.ПС);
Ответ = ?(ОтветСтрокой, ПолучитьСтрокуИзДвоичныхДанных(Ответ), Ответ);
Иначе
Ответ = "OPI: Не удалось отправить сообщение";
Ответ = ?(ОтветСтрокой, Ответ, ПолучитьДвоичныеДанныеИзСтроки(Ответ));
Если Строкой Тогда
Сообщение = ПолучитьСтрокуИзДвоичныхДанных(Сообщение, Кодировка);
КонецЕсли;
ЗакрытьСоединение(Соединение);
Возврат Сообщение;
Возврат Ответ;
КонецФункции

View File

@ -37,7 +37,7 @@
#Использовать "./internal"
#Область СлужебныйПрограммныйИнтерфейс
Процедура ПолучитьДвоичныеДанные(Значение) Экспорт
Процедура ПолучитьДвоичныеДанные(Значение, Знач Безусловно = Ложь) Экспорт
Если Значение = Неопределено Тогда
Возврат;
@ -69,7 +69,14 @@
КонецЕсли;
Исключение
Если Безусловно Тогда
Значение = OPI_Инструменты.ЧислоВСтроку(Значение);
Значение = ПолучитьДвоичныеДанныеИзСтроки(Значение);
Иначе
ВызватьИсключение "Ошибка получения двоичных данных из параметра: " + ОписаниеОшибки();
КонецЕсли;
КонецПопытки;
КонецПроцедуры

View File

@ -194,48 +194,40 @@
КонецФункции
// Подключиться и получить данные
// Создает соединение и читает данные до конца или по ограничениям
//
// Примечание:
// При работе с бесконечным потоком входящих данных обязательно указание параметра МаксимальныйРазмер, так как^^
// бесконечное получение данных может привести к зависанию
// При закрытии соединения, ошибке или обнаружении EOF чтение завершается в любом случае
// ОбработатьЗапрос
// Отправляет одиночный запрос на указанный адрес и получает ответ, используя стандартные настройки
//
// Параметры:
// Адрес - Строка - Адрес и порт для подключения - address
// МаксимальныйРазмер - Число - Максимальный размер данных. 0 > без ограничений - size
// Таймаут - Число - Таймаут ожидания данных - timeout
// Строкой - Булево - Истина > возвращает строку, Ложь > двоичные данные - string
// Кодировка - Строка - Кодировка получаемых данных - enc
// Данные - Строка, ДвоичныеДанные - Данные или текст для отправки - data
// ОтветСтрокой - Булево - Признак получения ответа как строки - string
//
// Возвращаемое значение:
// Строка, ДвоичныеДанные - Полученные данные
Функция ПодключитьсяИПолучитьДанные(Знач Адрес
, Знач МаксимальныйРазмер = 0
, Знач Таймаут = 5000
, Знач Строкой = Истина
, Знач Кодировка = "UTF-8") Экспорт
// ДвоичныеДанные, Строка - Ответ на запрос
Функция ОбработатьЗапрос(Знач Адрес, Знач Данные = "", Знач ОтветСтрокой = Истина) Экспорт
OPI_ПреобразованиеТипов.ПолучитьБулево(Строкой);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Кодировка);
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Данные, Истина);
OPI_ПреобразованиеТипов.ПолучитьБулево(ОтветСтрокой);
Соединение = ОткрытьСоединение(Адрес);
Если Не ЗначениеЗаполнено(Соединение) Тогда
ВызватьИсключение "Не удалось создать Соединение";
КонецЕсли;
Результат = ОтправитьДвоичныеДанные(Соединение, Данные);
Сообщение = ПрочитатьДвоичныеДанные(Соединение, МаксимальныйРазмер, Таймаут);
Если Результат Тогда
Ответ = ПрочитатьДвоичныеДанные(Соединение, , Символы.ПС);
Ответ = ?(ОтветСтрокой, ПолучитьСтрокуИзДвоичныхДанных(Ответ), Ответ);
Иначе
Ответ = "OPI: Не удалось отправить сообщение";
Ответ = ?(ОтветСтрокой, Ответ, ПолучитьДвоичныеДанныеИзСтроки(Ответ));
Если Строкой Тогда
Сообщение = ПолучитьСтрокуИзДвоичныхДанных(Сообщение, Кодировка);
КонецЕсли;
ЗакрытьСоединение(Соединение);
Возврат Сообщение;
Возврат Ответ;
КонецФункции

View File

@ -37,7 +37,7 @@
// #Использовать "./internal"
#Область СлужебныйПрограммныйИнтерфейс
Процедура ПолучитьДвоичныеДанные(Значение) Экспорт
Процедура ПолучитьДвоичныеДанные(Значение, Знач Безусловно = Ложь) Экспорт
Если Значение = Неопределено Тогда
Возврат;
@ -69,7 +69,14 @@
КонецЕсли;
Исключение
Если Безусловно Тогда
Значение = OPI_Инструменты.ЧислоВСтроку(Значение);
Значение = ПолучитьДвоичныеДанныеИзСтроки(Значение);
Иначе
ВызватьИсключение "Ошибка получения двоичных данных из параметра: " + ОписаниеОшибки();
КонецЕсли;
КонецПопытки;
КонецПроцедуры