1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2025-03-29 21:57:16 +02:00

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

This commit is contained in:
Anton Titovets 2024-12-15 21:21:57 +03:00
parent 110a95f120
commit 19e9c41c5d
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 // Адрес - Строка - Адрес и порт для подключения - address
// МаксимальныйРазмер - Число - Максимальный размер данных. 0 > без ограничений - size // Данные - Строка, ДвоичныеДанные - Данные или текст для отправки - data
// Таймаут - Число - Таймаут ожидания данных - timeout // ОтветСтрокой - Булево - Признак получения ответа как строки - string
// Строкой - Булево - Истина > возвращает строку, Ложь > двоичные данные - string
// Кодировка - Строка - Кодировка получаемых данных - enc
// //
// Возвращаемое значение: // Возвращаемое значение:
// Строка, ДвоичныеДанные - Полученные данные // ДвоичныеДанные, Строка - ответ на запрос
Функция ПодключитьсяИПолучитьДанные(Знач Адрес Функция ОбработатьЗапрос(Знач Адрес, Знач Данные = "", Знач ОтветСтрокой = Истина) Экспорт
, Знач МаксимальныйРазмер = 0
, Знач Таймаут = 5000
, Знач Строкой = Истина
, Знач Кодировка = "UTF-8") Экспорт
OPI_ПреобразованиеТипов.ПолучитьБулево(Строкой); OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Данные, Истина);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Кодировка); OPI_ПреобразованиеТипов.ПолучитьБулево(ОтветСтрокой);
Соединение = ОткрытьСоединение(Адрес); Соединение = ОткрытьСоединение(Адрес);
Если Не ЗначениеЗаполнено(Соединение) Тогда Результат = ОтправитьДвоичныеДанные(Соединение, Данные);
ВызватьИсключение "Не удалось создать Соединение";
КонецЕсли;
Сообщение = ПрочитатьДвоичныеДанные(Соединение, МаксимальныйРазмер, Таймаут); Если Результат Тогда
Ответ = ПрочитатьДвоичныеДанные(Соединение, , Символы.ПС);
Ответ = ?(ОтветСтрокой, ПолучитьСтрокуИзДвоичныхДанных(Ответ), Ответ);
Иначе
Ответ = "OPI: Не удалось отправить сообщение";
Ответ = ?(ОтветСтрокой, Ответ, ПолучитьДвоичныеДанныеИзСтроки(Ответ));
Если Строкой Тогда
Сообщение = ПолучитьСтрокуИзДвоичныхДанных(Сообщение, Кодировка);
КонецЕсли; КонецЕсли;
ЗакрытьСоединение(Соединение); ЗакрытьСоединение(Соединение);
Возврат Сообщение; Возврат Ответ;
КонецФункции КонецФункции

View File

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

View File

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

View File

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