Перейти к основному содержимому

Инициализировать клиентский поток

Инициализирует новый клиентский поток

Функция ИнициализироватьКлиентскийПоток(Знач Соединение, Знач Сервис, Знач Метод, Знач Таймаут = 10000) Экспорт

ПараметрCLI опцияТипОбяз.Назначение
Соединение-ПроизвольныйОбъект соединения
Сервис-СтрокаИмя сервиса
Метод-СтрокаИмя метода
Таймаут-ЧислоТаймаут (в мс)
Возвращаемое значение

Соответствие Из КлючИЗначение - Результат обработки

Предупреждение

NOCLI: данный метод недоступен для использования в CLI версии

Пример использования для 1С:Предприятие/OneScript
Адрес = "https://grpcb.in:9001";

Proto1 = "https://hut.openintegrations.dev/test_data/grpcbin_with_import.proto"; // Строка, путь к файлу или URL
Proto2 = "https://hut.openintegrations.dev/test_data/mt.proto"; // Строка, путь к файлу или URL

Схемы = Новый Соответствие;
Схемы.Вставить("main.proto" , Proto1); // Основной
Схемы.Вставить("my_types.proto", Proto2); // Для импорта в основной

Параметры = OPI_GRPC.ПолучитьПараметрыСоединения(Адрес, Схемы);
Tls = OPI_GRPC.ПолучитьНастройкиTls(Истина);

Сервис = "grpcbin.GRPCBin";
Метод = "DummyClientStream";

Соединение = OPI_GRPC.ОткрытьСоединение(Параметры, Tls);

Если Не OPI_GRPC.ЭтоКоннектор(Соединение) Тогда
ВызватьИсключение Соединение["error"];
КонецЕсли;

МассивСтрок = Новый Массив;
МассивСтрок.Добавить("one");
МассивСтрок.Добавить("two");
МассивСтрок.Добавить("three");

Данные = Новый Соответствие;
Данные.Вставить("f_string" , "Test message");
Данные.Вставить("f_int32" , 123);
Данные.Вставить("f_bool" , Истина);
Данные.Вставить("f_strings", МассивСтрок);
Данные.Вставить("f_sub" , Новый Структура("f_string", "Nested value"));

Результат = OPI_GRPC.ИнициализироватьКлиентскийПоток(Соединение, Сервис, Метод); // <---

Если Не Результат["result"] Тогда
ВызватьИсключение Результат["error"];
Иначе
IDПотока = Результат["streamId"];
КонецЕсли;

ФинальноеСообщение = Неопределено;

Счетчик = 0;
Пока Истина Цикл

ТекущаяОтправка = OPI_GRPC.ОтправитьСообщение(Соединение, IDПотока, Данные);
Счетчик = Счетчик + 1;

Если Не ТекущаяОтправка["result"] Тогда

Ошибка = ТекущаяОтправка["error"];

Если Ошибка = "Timeout" Тогда
Продолжить;
ИначеЕсли Ошибка = "Closed" Тогда
ФинальноеСообщение = OPI_GRPC.ПолучитьСообщение(Соединение, IDПотока);
Прервать;
Иначе
ВызватьИсключение СтрШаблон("%1 (отправлено сообщений %2)", Ошибка, Счетчик);
КонецЕсли;

Иначе

Если Счетчик = 10 Тогда
Завершение = OPI_GRPC.ЗавершитьОтправку(Соединение, IDПотока);
ФинальноеСообщение = OPI_GRPC.ПолучитьСообщение(Соединение, IDПотока);
Прервать;
КонецЕсли;

КонецЕсли;

КонецЦикла;
Результат
{
"message": {
"f_bool": true,
"f_bools": [],
"f_bytes": {
"BYTES": ""
},
"f_bytess": [],
"f_enum": "ENUM_0",
"f_enums": [],
"f_float": 0,
"f_floats": [],
"f_int32": 123,
"f_int32s": [],
"f_int64": 0,
"f_int64s": [],
"f_string": "Test message",
"f_strings": [
"one",
"two",
"three"
],
"f_sub": {
"f_string": "Nested value"
},
"f_subs": []
},
"result": true
}