1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2025-08-10 22:41:43 +02:00

Дополнение словарей

This commit is contained in:
Anton Titovets
2025-01-23 10:10:29 +03:00
parent 2652d0cf44
commit ae0a2bac4a
6 changed files with 4990 additions and 4844 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -105,6 +105,10 @@
OPI_ПреобразованиеТипов.ПолучитьЧисло(Таймаут);
OPI_ПреобразованиеТипов.ПолучитьЧисло(МаксимальныйРазмер);
Если ТипЗнч(Соединение) = Тип("Строка") Тогда
Соединение = ОткрытьСоединение(Соединение);
КонецЕсли;
Если ТипЗнч(Маркер) = Тип("Строка") Тогда
Маркер = ПолучитьДвоичныеДанныеИзСтроки(Маркер);
Иначе
@@ -157,6 +161,10 @@
// Булево - Признак успешного выполнения
Функция ОтправитьДвоичныеДанные(Знач Соединение, Знач Данные, Знач Таймаут = 5000) Экспорт
Если ТипЗнч(Соединение) = Тип("Строка") Тогда
Соединение = ОткрытьСоединение(Соединение);
КонецЕсли;
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Данные);
OPI_ПреобразованиеТипов.ПолучитьЧисло(Таймаут);
@@ -244,7 +252,7 @@
OPI_ПреобразованиеТипов.ПолучитьЧисло(Порт);
OPI_ПреобразованиеТипов.ПолучитьБулево(Запустить);
TCPСервер = ПодключитьКомпонентуНаСервере("OPI_TCPServer");
TCPСервер = ПодключитьКомпонентуНаСервере("OPI_TCPServer", "Server");
TCPСервер.Port = Порт;
Если Запустить Тогда
@@ -285,96 +293,6 @@
КонецФункции
// Ожидать подключение !NOCLI
// Блокирует выполнение программы до появления нового подключения
//
// Параметры:
// TCPСервер - Произвольный - TCP сервер. См. СоздатьСервер - srv
// Таймаут - Число - Максимальное время ожидания подключений. 0 > бесконечно - timeout
//
// Возвращаемое значение:
// Структура Из КлючИЗначение - Структура с идентификатором нового подключения или ошибкой
Функция ОжидатьПодключение(Знач TCPСервер, Знач Таймаут = 0) Экспорт
Если Не ЭтоСервер(TCPСервер) Тогда
ВызватьИсключение "Переданное значение не является TCP-сервером!";
КонецЕсли;
OPI_ПреобразованиеТипов.ПолучитьЧисло(Таймаут);
Результат = TCPСервер.Wait(Таймаут);
ОбработатьРезультат(Результат);
Возврат Результат;
КонецФункции
// Получить данные !NOCLI
// Получает данные из потока существующего соединения
//
// Параметры:
// TCPСервер - Произвольный - TCP сервер. См. СоздатьСервер - srv
// IDПодключения - Строка, Число - ID активного подключения. См. ОжидатьПодключение - conn
// МаксимальныйРазмер - Число - Максимальный размер данных. 0 > до конца потока - maxsize
//
// Возвращаемое значение:
// Структура Из КлючИЗначение, ДвоичныеДанные - Двоичные данные при успехе или структура с описанием ошибки
Функция ПолучитьДанные(Знач TCPСервер, Знач IDПодключения, Знач МаксимальныйРазмер = 0) Экспорт
Если Не ЭтоСервер(TCPСервер) Тогда
ВызватьИсключение "Переданное значение не является TCP-сервером!";
КонецЕсли;
OPI_ПреобразованиеТипов.ПолучитьСтроку(IDПодключения);
OPI_ПреобразованиеТипов.ПолучитьЧисло(МаксимальныйРазмер);
Данные = TCPСервер.Receive(IDПодключения, МаксимальныйРазмер);
Если ТипЗнч(Данные) = Тип("Строка") Тогда
Попытка
Результат = OPI_Инструменты.JsonВСтруктуру(Данные, Ложь);
Исключение
Результат = Новый Структура("result,error", Ложь, Данные);
КонецПопытки;
Иначе
Результат = Данные;
КонецЕсли;
//@skip-check constructor-function-return-section
Возврат Результат;
КонецФункции
// Отправить данные !NOCLI
// Отправляет данные клиенту по идентификатору подключения
//
// Параметры:
// TCPСервер - Произвольный - TCP сервер. См. СоздатьСервер - srv
// IDПодключения - Строка, Число - ID активного подключения. См. ОжидатьПодключение - conn
// Данные - ДвоичныеДанные - Данные для отправки - data
//
// Возвращаемое значение:
// Структура Из КлючИЗначение - Информация о выполнении
Функция ОтправитьДанные(Знач TCPСервер, Знач IDПодключения, Знач Данные) Экспорт
Если Не ЭтоСервер(TCPСервер) Тогда
ВызватьИсключение "Переданное значение не является TCP-сервером!";
КонецЕсли;
OPI_ПреобразованиеТипов.ПолучитьСтроку(IDПодключения);
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Данные);
Результат = TCPСервер.Send(IDПодключения, Данные);
ОбработатьРезультат(Результат);
//@skip-check constructor-function-return-section
Возврат Результат;
КонецФункции
// Отключить сервер !NOCLI
// Останавливает запущенный сервер
//
@@ -398,28 +316,27 @@
КонецФункции
// Закрыть входящее соединение !NOCLI
// Закрывает существующее соединение по идентификатору
// Ожидать входящие соединения !NOCLI
// Блокирует выполнение программы до появления нового подключения
//
// Параметры:
// TCPСервер - Произвольный - TCP сервер. См. СоздатьСервер - srv
// IDПодключения - Строка, Число - ID активного подключения. См. ОжидатьПодключение - conn
// TCPСервер - Произвольный - TCP сервер. См. СоздатьСервер - srv
// Таймаут - Число - Максимальное время ожидания подключений. 0 > бесконечно - timeout
//
// Возвращаемое значение:
// Структура Из КлючИЗначение - Информация о выполнении
Функция ЗакрытьВходящееСоединение(Знач TCPСервер, Знач IDПодключения) Экспорт
// Структура Из КлючИЗначение - Структура с идентификатором нового подключения или ошибкой
Функция ОжидатьВходящиеСоединения(Знач TCPСервер, Знач Таймаут = 0) Экспорт
Если Не ЭтоСервер(TCPСервер) Тогда
ВызватьИсключение "Переданное значение не является TCP-сервером!";
КонецЕсли;
OPI_ПреобразованиеТипов.ПолучитьСтроку(IDПодключения);
OPI_ПреобразованиеТипов.ПолучитьЧисло(Таймаут);
Результат = TCPСервер.Close(IDПодключения);
Результат = TCPСервер.Wait(Таймаут);
ОбработатьРезультат(Результат);
//@skip-check constructor-function-return-section
Возврат Результат;
КонецФункции
@@ -451,7 +368,7 @@
КонецФункции
// Актуализировать входящие соединения
// Актуализировать входящие соединения !NOCLI
// Удаляет неактивные соединения из пула
//
// Параметры:
@@ -484,7 +401,102 @@
// Булево - Это сервер
Функция ЭтоСервер(Знач Значение) Экспорт
Возврат Строка(ТипЗнч(Значение)) = "AddIn.OPI_TCPServer.Main";
Возврат Строка(ТипЗнч(Значение)) = "AddIn.OPI_TCPServer.Server";
КонецФункции
#КонецОбласти
#Область МетодыОбработкиСоединений
// Получить запрос !NOCLI
// Получает данные из потока существующего соединения
//
// Параметры:
// IDПодключения - Строка, Число - ID активного подключения. См. ОжидатьПодключение - conn
// МаксимальныйРазмер - Число - Максимальный размер данных. 0 > до конца потока - maxsize
// TCPОбработчик - Произвольный - TCP сервер или пустое значение при обособленной обоработке - hnd
//
// Возвращаемое значение:
// Структура Из КлючИЗначение, ДвоичныеДанные - Двоичные данные при успехе или структура с описанием ошибки
Функция ПолучитьЗапрос(Знач IDПодключения, Знач МаксимальныйРазмер = 0, Знач TCPОбработчик = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(IDПодключения);
OPI_ПреобразованиеТипов.ПолучитьЧисло(МаксимальныйРазмер);
Если Не ЭтоСерверИлиОбработчик(TCPОбработчик) Тогда
TCPОбработчик = ПодключитьКомпонентуНаСервере("OPI_TCPServer", "Handler");
КонецЕсли;
Данные = TCPОбработчик.Receive(IDПодключения, МаксимальныйРазмер);
Если ТипЗнч(Данные) = Тип("Строка") Тогда
Попытка
Результат = OPI_Инструменты.JsonВСтруктуру(Данные, Ложь);
Исключение
Результат = Новый Структура("result,error", Ложь, Данные);
КонецПопытки;
Иначе
Результат = Данные;
КонецЕсли;
//@skip-check constructor-function-return-section
Возврат Результат;
КонецФункции
// Отправить ответ !NOCLI
// Отправляет данные клиенту по идентификатору подключения
//
// Параметры:
// IDПодключения - Строка, Число - ID активного подключения. См. ОжидатьПодключение - conn
// Данные - ДвоичныеДанные - Данные для отправки - data
// TCPОбработчик - Произвольный - TCP сервер или пустое значение при обособленной обоработке - hnd
//
// Возвращаемое значение:
// Структура Из КлючИЗначение - Информация о выполнении
Функция ОтправитьОтвет(Знач IDПодключения, Знач Данные, Знач TCPОбработчик = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(IDПодключения);
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Данные);
Если Не ЭтоСерверИлиОбработчик(TCPОбработчик) Тогда
TCPОбработчик = ПодключитьКомпонентуНаСервере("OPI_TCPServer", "Handler");
КонецЕсли;
Результат = TCPОбработчик.Send(IDПодключения, Данные);
ОбработатьРезультат(Результат);
//@skip-check constructor-function-return-section
Возврат Результат;
КонецФункции
// Закрыть входящее соединение !NOCLI
// Закрывает существующее соединение по идентификатору
//
// Параметры:
// IDПодключения - Строка, Число - ID активного подключения. См. ОжидатьПодключение - conn
// TCPОбработчик - Произвольный - TCP сервер или пустое значение при обособленной обоработке - hnd
//
// Возвращаемое значение:
// Структура Из КлючИЗначение - Информация о выполнении
Функция ЗакрытьВходящееСоединение(Знач IDПодключения, Знач TCPОбработчик = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(IDПодключения);
Если Не ЭтоСерверИлиОбработчик(TCPОбработчик) Тогда
TCPОбработчик = ПодключитьКомпонентуНаСервере("OPI_TCPServer", "Handler");
КонецЕсли;
Результат = TCPОбработчик.Close(IDПодключения);
ОбработатьРезультат(Результат);
//@skip-check constructor-function-return-section
Возврат Результат;
КонецФункции
@@ -509,6 +521,13 @@
КонецФункции
Функция ЭтоСерверИлиОбработчик(Знач Значение)
Возврат Строка(ТипЗнч(Значение)) = "AddIn.OPI_TCPServer.Server"
Или Строка(ТипЗнч(Значение)) = "AddIn.OPI_TCPServer.Handler";
КонецФункции
Процедура ОбработатьРезультат(Результат)
Попытка

View File

@@ -213,6 +213,8 @@
// Соответствие из Строка - Соответствие данных с результатом проверки в поле passed
Функция ОбработатьДанныеTMA(Знач СтрокаДанных, Знач Токен) Экспорт
#Если Сервер Тогда
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(СтрокаДанных);
@@ -280,6 +282,10 @@
СоответствиеВозврата.Вставить("passed", Ответ);
Возврат СоответствиеВозврата;
#Иначе
Возврат Неопределено;
#КонецЕсли
КонецФункции

View File

@@ -16454,24 +16454,90 @@
КонецПроцедуры
Процедура TCP_ОжидатьПодключение(ПараметрыФункции) Экспорт
Процедура TCP_ОжидатьВходящиеСоединения(ПараметрыФункции) Экспорт
// -- Тестовый запрос для сервера
КлючКлиента = Новый УникальныйИдентификатор;
Сообщение = "Тестовая отправка данных на сервер";
ПараметрыКлиента = Новый Массив;
ПараметрыКлиента.Добавить("127.0.0.1:7788"); // Наш сервер
ПараметрыКлиента.Добавить(Сообщение); // Тестовая строка
ПараметрыКлиента.Добавить("UTF-8"); // Кодировка
ПараметрыКлиента.Добавить("20000"); // Таймаут, чтобы успеть запустить сервер
// Отправка тестового запроса через клиентские методы TCP
ФоновоеКлиента = ФоновыеЗадания.Выполнить("OPI_TCP.ОтправитьСтроку", ПараметрыКлиента, КлючКлиента);
TCPСервер = OPI_TCP.СоздатьСервер(7788, Истина);
// --
TCPСервер = OPI_TCP.СоздатьСервер(7788, Истина);
НовоеПодключение = OPI_TCP.ОжидатьВходящиеСоединения(TCPСервер, 20);
Если НовоеПодключение["result"] Тогда
Подключение = НовоеПодключение["connection"]["id"];
МассивПараметровОбработки = Новый Массив;
МассивПараметровОбработки.Добавить(Подключение); // Строка: "1:7788"
ФоновоеОбработки = ФоновыеЗадания.Выполнить("OPI_Тесты.TCP_ОбработатьПодключение", МассивПараметровОбработки);
TCP_ОбработатьПодключение(Подключение);
КонецЕсли;
Отключение = OPI_TCP.ОтключитьСервер(TCPСервер);
// END
ЗаданиеКлиента = ФоновоеКлиента.ОжидатьЗавершенияВыполнения();
ЗаданиеОбработки = ФоновоеОбработки.ОжидатьЗавершенияВыполнения();
Для Н = 1 По 5 Цикл
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(TCPСервер, "ОжидатьВходящиеСоединения (сервер)", "TCP");
OPI_ПолучениеДанныхТестов.Проверка_Компонента(TCPСервер, "AddIn.OPI_TCPServer.Server");
НовоеПодключение = OPI_TCP.ОжидатьПодключение(TCPСервер, 20);
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(НовоеПодключение, "ОжидатьВходящиеСоединения", "TCP");
OPI_ПолучениеДанныхТестов.Проверка_РезультатИстина(НовоеПодключение);
Если НовоеПодключение["result"] Тогда
Подключение = НовоеПодключение["connection"];
Иначе
Продолжить;
КонецЕсли;
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Подключение, "ОжидатьВходящиеСоединения (подключение)", "TCP");
OPI_ПолучениеДанныхТестов.Проверка_Строка(Подключение, "7788:1");
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Отключение, "ОжидатьВходящиеСоединения (отвключение)", "TCP");
OPI_ПолучениеДанныхТестов.Проверка_РезультатИстина(Отключение);
Состояние = Строка(ЗаданиеКлиента.Состояние);
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Состояние, "ОжидатьВходящиеСоединения (фоновое)", "TCP");
OPI_ПолучениеДанныхТестов.Проверка_Строка(Состояние, "Задание выполнено");
КонецПроцедуры
Ответ = OPI_TCP.ОтправитьДанные(TCPСервер, Подключение, ПолучитьДвоичныеДанныеИзСтроки("Yo"));
Закрытие = OPI_TCP.ЗакрытьВходящееСоединение(TCPСервер, Подключение);
Процедура TCP_ОбработатьПодключение(Подключение) Экспорт
// Подключение - Строка: "1:7788"
ЗапросДвочиные = OPI_TCP.ПолучитьЗапрос(Подключение);
ЗапросТекст = ПолучитьСтрокуИзДвоичныхДанных(ЗапросДвочиные);
ОтправкаОтвета = OPI_TCP.ОтправитьОтвет(Подключение, ПолучитьДвоичныеДанныеИзСтроки("Yo"));
ЗакрытиеПодключения = OPI_TCP.ЗакрытьВходящееСоединение(Подключение);
// END
Сообщение = "Тестовая отправка данных на сервер";
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Сообщение, "ОжидатьВходящиеСоединения (сообщение)", "TCP");
OPI_ПолучениеДанныхТестов.Проверка_Строка(ЗапросТекст, Сообщение);
КонецЦикла;
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(ОтправкаОтвета, "ОжидатьВходящиеСоединения (ответ)", "TCP");
OPI_ПолучениеДанныхТестов.Проверка_РезультатИстина(ОтправкаОтвета);
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(ЗакрытиеПодключения, "ОжидатьВходящиеСоединения (закрытие)", "TCP");
OPI_ПолучениеДанныхТестов.Проверка_РезультатИстина(ЗакрытиеПодключения);
КонецПроцедуры

View File

@@ -2097,6 +2097,12 @@
ОжидаетЧто(Результат["data"].Количество()).Равно(0);
КонецПроцедуры
Процедура Проверка_РезультатИстина(Знач Результат) Экспорт
ОжидаетЧто(Результат["result"]).Равно(Истина);
КонецПроцедуры
#КонецОбласти
#КонецОбласти
@@ -2133,9 +2139,9 @@
КонецФункции
Функция ПолучитьОбщийМодуль(Знач Имя)
Модуль = Вычислить(Имя);
Возврат Модуль;
КонецФункции

View File

@@ -2245,7 +2245,7 @@
ПараметрыТеста = Новый Структура;
TCP_ОжидатьПодключение(ПараметрыТеста);
TCP_ОжидатьВходящиеСоединения(ПараметрыТеста);
КонецПроцедуры
@@ -16454,7 +16454,7 @@
КонецПроцедуры
Процедура TCP_ОжидатьПодключение(ПараметрыФункции) Экспорт
Процедура TCP_ОжидатьВходящиеСоединения(ПараметрыФункции) Экспорт
// -- Тестовый запрос для сервера
@@ -16497,21 +16497,21 @@
ЗаданиеОбработки = ФоновоеОбработки.ОжидатьЗавершенияВыполнения();
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(TCPСервер, "ОжидатьПодключение (сервер)", "TCP");
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(TCPСервер, "ОжидатьВходящиеСоединения (сервер)", "TCP");
OPI_ПолучениеДанныхТестов.Проверка_Компонента(TCPСервер, "AddIn.OPI_TCPServer.Server");
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(НовоеПодключение, "ОжидатьПодключение", "TCP");
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(НовоеПодключение, "ОжидатьВходящиеСоединения", "TCP");
OPI_ПолучениеДанныхТестов.Проверка_РезультатИстина(НовоеПодключение);
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Подключение, "ОжидатьПодключение (подключение)", "TCP");
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Подключение, "ОжидатьВходящиеСоединения (подключение)", "TCP");
OPI_ПолучениеДанныхТестов.Проверка_Строка(Подключение, "7788:1");
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Отключение, "ОжидатьПодключение (отвключение)", "TCP");
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Отключение, "ОжидатьВходящиеСоединения (отключение)", "TCP");
OPI_ПолучениеДанныхТестов.Проверка_РезультатИстина(Отключение);
Состояние = Строка(ЗаданиеКлиента.Состояние);
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Состояние, "ОжидатьПодключение (фоновое)", "TCP");
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Состояние, "ОжидатьВходящиеСоединения (фоновое)", "TCP");
OPI_ПолучениеДанныхТестов.Проверка_Строка(Состояние, "Задание выполнено");
КонецПроцедуры
@@ -16530,13 +16530,13 @@
Сообщение = "Тестовая отправка данных на сервер";
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Сообщение, "ОжидатьПодключение (сообщение)", "TCP");
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Сообщение, "ОжидатьВходящиеСоединения (сообщение)", "TCP");
OPI_ПолучениеДанныхТестов.Проверка_Строка(ЗапросТекст, Сообщение);
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(ОтправкаОтвета, "ОжидатьПодключение (ответ)", "TCP");
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(ОтправкаОтвета, "ОжидатьВходящиеСоединения (ответ)", "TCP");
OPI_ПолучениеДанныхТестов.Проверка_РезультатИстина(ОтправкаОтвета);
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(ЗакрытиеПодключения, "ОжидатьПодключение (закрытие)", "TCP");
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(ЗакрытиеПодключения, "ОжидатьВходящиеСоединения (закрытие)", "TCP");
OPI_ПолучениеДанныхТестов.Проверка_РезультатИстина(ЗакрытиеПодключения);
КонецПроцедуры