1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2026-06-20 09:19:27 +02:00

Скрипт сборки TCP

This commit is contained in:
Anton Titovets
2024-12-12 22:26:33 +03:00
parent 8c8728948d
commit 7b0fde8418
13 changed files with 102 additions and 335 deletions
+1
View File
@@ -21,3 +21,4 @@ target/
.idea/
!oscript.exe
addin.zip
+1 -1
View File
@@ -14,4 +14,4 @@ strip = true # Automatically strip symbols from the binary.
[dependencies]
addin1c = "0.5.0"
native-tls = "0.2.12"
native-tls = "0.2.12"
+7
View File
@@ -0,0 +1,7 @@
<?xml version='1.0' encoding='UTF-8'?>
<bundle xmlns='http://v8.1c.ru/8.2/addin/bundle' name='OPIADDIN'>
<component os='Windows' path='AddIn_x86_windows.dll' type='native' arch='i386' />
<component os='Windows' path='AddIn_x64_windows.dll' type='native' arch='x86_64' />
<component os='Linux' path='AddIn_x86_linux.so' type='native' arch='i386' />
<component os='Linux' path='AddIn_x64_linux.so' type='native' arch='x86_64' />
</bundle>
+62 -1
View File
@@ -1,2 +1,63 @@
@echo off
:: Установить переменную
set LIB_NAME=opi_tcp
set OPENSSL_DIR=C:\msys64\mingw64
set OPENSSL_LIB_DIR=%OPENSSL_DIR%\lib
set OPENSSL_INCLUDE_DIR=%OPENSSL_DIR%\include
:: Перейти в директорию проекта
cd /d "%~dp0"
:: Создать папку для артефактов
set OUTPUT_DIR=artifacts
if not exist "%OUTPUT_DIR%" mkdir "%OUTPUT_DIR%"
:: Сборка для x86_64-pc-windows-msvc
cargo build --release --target x86_64-pc-windows-msvc
cargo zigbuild --release --target x86_64-unknown-linux-gnu
if errorlevel 1 goto :error
:: Сборка для x86_64-unknown-linux-gnu
cargo zigbuild --release --target x86_64-unknown-linux-gnu
if errorlevel 1 goto :error
:: Сборка для i686-pc-windows-msvc
cargo build --release --target i686-pc-windows-msvc
if errorlevel 1 goto :error
:: Сборка для i686-unknown-linux-gnu
cargo zigbuild --release --target i686-unknown-linux-gnu
if errorlevel 1 goto :error
:: Копирование файлов .dll и .so
copy /y target\x86_64-pc-windows-msvc\release\%LIB_NAME%.dll "%OUTPUT_DIR%\AddIn_x64_windows.dll"
if errorlevel 1 goto :error
copy /y target\i686-pc-windows-msvc\release\%LIB_NAME%.dll "%OUTPUT_DIR%\AddIn_x86_windows.dll"
if errorlevel 1 goto :error
copy /y target\x86_64-unknown-linux-gnu\release\lib%LIB_NAME%.so "%OUTPUT_DIR%\AddIn_x64_linux.so"
if errorlevel 1 goto :error
copy /y target\i686-unknown-linux-gnu\release\lib%LIB_NAME%.so "%OUTPUT_DIR%\AddIn_x86_linux.so"
if errorlevel 1 goto :error
copy /y MANIFEST.XML "%OUTPUT_DIR%\MANIFEST.XML"
if errorlevel 1 goto :error
:: Архивация
set ZIP_NAME=addin.zip
powershell -Command "Compress-Archive -Path '%OUTPUT_DIR%\*' -Force -DestinationPath '%ZIP_NAME%'"
if errorlevel 1 goto :error
if exist "%OUTPUT_DIR%" (
rmdir /S /Q "%OUTPUT_DIR%"
)
@echo Build and packaging completed successfully.
exit /b 0
:error
@echo An error occurred during the build or packaging process.
exit /b 1
+11 -1
View File
@@ -25,7 +25,17 @@ impl Connection {
}
/// Отправляет данные
pub fn send(connection: &mut Connection, data: Vec<u8>) -> bool {
pub fn send(connection: &mut Connection, data: Vec<u8>, timeout_ms: i32) -> bool {
match connection {
Connection::Tcp(stream) => {
stream.set_write_timeout(Some(Duration::from_millis(timeout_ms as u64))).ok();
}
Connection::Tls(stream) => {
stream.get_ref().set_write_timeout(Some(Duration::from_millis(timeout_ms as u64))).ok();
}
}
match connection.write(&data) {
Ok(_) => true,
Err(_) => false, // Ошибка при отправке данных
+15 -7
View File
@@ -6,14 +6,15 @@ use methods::Connection;
use std::net::TcpStream;
use native_tls::{TlsConnector};
use crate::component::methods::disconnect;
// МЕТОДЫ КОМПОНЕНТЫ -------------------------------------------------------------------------------
// Синонимы
pub const METHODS: &[&[u16]] = &[
name!("Connect"), // 0
name!("Connect"), // 0
name!("Disconnect"), // 1
name!("Read"), // 2
name!("Write"), // 3
name!("Read"), // 2
name!("Write"), // 3
];
// Число параметров функций компоненты
@@ -22,7 +23,7 @@ pub fn get_params_amount(num: usize) -> usize {
0 => 0,
1 => 0,
2 => 2,
3 => 1,
3 => 2,
_ => 0,
}
}
@@ -30,14 +31,17 @@ pub fn get_params_amount(num: usize) -> usize {
// Соответствие функций Rust функциям компоненты
// Вызовы должны быть обернуты в Box::new
pub fn cal_func(obj: &mut AddIn, num: usize, params: &mut [Variant]) -> Box<dyn getset::ValueType> {
match num {
0 => Box::new(obj.connect()),
1 => {
disconnect(obj);
Box::new(true) // Возвращаем true для обозначения успешного выполнения
},
2 => {
let size = params[0].get_i32().unwrap_or(0);
let size = params[0].get_i32().unwrap_or(0);
let timeout = params[1].get_i32().unwrap_or(0);
if let Some(ref mut connection) = obj.connection {
@@ -47,10 +51,14 @@ pub fn cal_func(obj: &mut AddIn, num: usize, params: &mut [Variant]) -> Box<dyn
}
},
3 => {
let empty_array: [u8; 0] = [];
let data = params[0].get_blob().unwrap_or(&empty_array);
let data = params[0].get_blob().unwrap_or(&empty_array);
let timeout = params[1].get_i32().unwrap_or(0);
if let Some(ref mut connection) = obj.connection {
Box::new(methods::send(connection, data.to_vec()))
Box::new(methods::send(connection, data.to_vec(), timeout))
} else {
Box::new(false) // Если соединения нет, возвращаем false
}
@@ -1,193 +0,0 @@
// OneScript: ./OInt/core/Modules/OPI_MongoDB.os
// Lib: MongoDB
// CLI: mongodb
// MIT License
// Copyright (c) 2023 Anton Tsitavets
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
// https://github.com/Bayselonarrend/OpenIntegrations
// BSLLS:Typo-off
// BSLLS:LatinAndCyrillicSymbolInWord-off
// BSLLS:IncorrectLineBreak-off
// BSLLS:NumberOfOptionalParams-off
// BSLLS:UsingServiceTag-off
// BSLLS:LineLength-off
//@skip-check module-structure-top-region
//@skip-check module-structure-method-in-regions
//@skip-check wrong-string-literal-content
//@skip-check method-too-many-params
//@skip-check constructor-function-return-section
// Раскомментировать, если выполняется OneScript
// #Использовать "../../tools"
#Область ПрограммныйИнтерфейс
#Область УправлениеБазамиДанных
// Получить список баз
// Получает список баз данных
//
// Примечание:
// Метод в документации MongoDB: [listDatabases](@mongodb.com/docs/manual/reference/command/listDatabases/)
//
// Параметры:
// СтрокаПодключения - Строка - Строка подключения к серверу MongoDB - connect
//
// Возвращаемое значение:
// Структура Из КлючИЗначение - сериализованный JSON ответа от сервера MongoDB
Функция ПолучитьСписокБаз(Знач СтрокаПодключения) Экспорт
Клиент = КлиентMongoDB(СтрокаПодключения);
Ответ = Клиент.ListDatabases();
Ответ = OPI_Инструменты.JsonВСтруктуру(Ответ, Ложь);
Возврат Ответ;
КонецФункции
// Получить статистику базы
// Получает информацию о базе данных
//
// Примечание:
// Метод в документации MongoDB: [dbStats](@mongodb.com/docs/manual/reference/command/dbStats/)
//
// Параметры:
// СтрокаПодключения - Строка - Строка подключения к серверу MongoDB - connect
// БазаДанных - Строка - Имя базы данных - db
//
// Возвращаемое значение:
// Структура Из КлючИЗначение - сериализованный JSON ответа от сервера MongoDB
Функция ПолучитьСтатистикуБазы(Знач СтрокаПодключения, Знач БазаДанных) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(БазаДанных);
Клиент = КлиентMongoDB(СтрокаПодключения);
Ответ = Клиент.DatabaseStats(БазаДанных);
Ответ = OPI_Инструменты.JsonВСтруктуру(Ответ, Ложь);
Возврат Ответ;
КонецФункции
// База данных существует
// Проверяет существование базы данных по имени
//
// Параметры:
// СтрокаПодключения - Строка - Строка подключения к серверу MongoDB - connect
// БазаДанных - Строка - Имя базы данных - db
//
// Возвращаемое значение:
// Структура Из КлючИЗначение - сериализованный JSON ответа от сервера MongoDB
Функция БазаДанныхСуществует(Знач СтрокаПодключения, Знач БазаДанных) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(БазаДанных);
Клиент = КлиентMongoDB(СтрокаПодключения);
Ответ = Клиент.DatabaseExists(БазаДанных);
Ответ = OPI_Инструменты.JsonВСтруктуру(Ответ, Ложь);
Возврат Ответ;
КонецФункции
// Удалить базу
// Удаляет базу данных
//
// Примечание:
// Метод в документации MongoDB: [db.dropDatabase](@mongodb.com/docs/manual/reference/method/db.dropDatabase/)
//
// Параметры:
// СтрокаПодключения - Строка - Строка подключения к серверу MongoDB - connect
// БазаДанных - Строка - Имя базы данных - db
//
// Возвращаемое значение:
// Структура Из КлючИЗначение - сериализованный JSON ответа от сервера MongoDB
Функция УдалитьБазу(Знач СтрокаПодключения, Знач БазаДанных) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(БазаДанных);
Клиент = КлиентMongoDB(СтрокаПодключения);
Ответ = Клиент.DropDatabase(БазаДанных);
Ответ = OPI_Инструменты.JsonВСтруктуру(Ответ, Ложь);
Возврат Ответ;
КонецФункции
#КонецОбласти
#Область УправлениеКоллекциями
// Создать коллекцию
// Создает пустую коллекцию в выбранной базе
//
// Примечание:
// Если база с именем, указанным в параметре БазаДанных, отсутствует, то она будет создана
// Метод в документации MongoDB: [db.createCollection](@mongodb.com/docs/manual/reference/method/db.createCollection/)
//
// Параметры:
// СтрокаПодключения - Строка - Строка подключения к серверу MongoDB - connect
// БазаДанных - Строка - Имя базы данных - db
// Наименование - Строка - Имя коллекции - cl
//
// Возвращаемое значение:
// Структура Из КлючИЗначение - сериализованный JSON ответа от сервера MongoDB
Функция СоздатьКоллекцию(Знач СтрокаПодключения, Знач БазаДанных, Знач Наименование) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(БазаДанных);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование);
Клиент = КлиентMongoDB(СтрокаПодключения);
Ответ = Клиент.CreateCollection(БазаДанных, Наименование);
Ответ = OPI_Инструменты.JsonВСтруктуру(Ответ, Ложь);
Возврат Ответ;
КонецФункции
#КонецОбласти
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Функция КлиентMongoDB(Знач СтрокаПодключения)
OPI_ПреобразованиеТипов.ПолучитьСтроку(СтрокаПодключения);
Клиент = OPI_Инструменты.ПолучитьКомпоненту("MongoDB");
Клиент.ConnectionString = СтрокаПодключения;
Возврат Клиент;
КонецФункции
#КонецОбласти
@@ -1,11 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="cb8b083f-acaa-4881-ac1f-669b0eebd1ab">
<name>OPI_MongoDB</name>
<synonym>
<key></key>
<value>OPI mongo DB</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>
@@ -69,7 +69,6 @@
Разделы.Вставить("CDEK" , 5);
Разделы.Вставить("YandexMetrika" , 5);
Разделы.Вставить("S3" , 5);
Разделы.Вставить("MongoDB" , 5);
Возврат Разделы;
@@ -101,7 +100,6 @@
Разделы.Вставить("CDEK" , СтандартныеЗависимости);
Разделы.Вставить("YandexMetrika" , СтандартныеЗависимости);
Разделы.Вставить("S3" , СтандартныеЗависимости);
Разделы.Вставить("MongoDB" , СтандартныеЗависимости);
Возврат Разделы;
@@ -129,7 +127,6 @@
Сдэк = "CDEK";
Метрика = "YandexMetrika";
S3_ = "S3";
Монго = "MongoDB";
ТаблицаТестов = Новый ТаблицаЗначений;
ТаблицаТестов.Колонки.Добавить("Метод");
@@ -261,8 +258,6 @@
НовыйТест(ТаблицаТестов, "AWS_ОбщиеМетоды" , "Общие методы" , S3_);
НовыйТест(ТаблицаТестов, "AWS_РаботаСБакетами" , "Работа с бакетами" , S3_);
НовыйТест(ТаблицаТестов, "AWS_РаботаСОбъектами" , "Работа с объектами" , S3_);
НовыйТест(ТаблицаТестов, "Mongo_УправлениеБазамиДанных" , "Управление базами данных" , Монго);
НовыйТест(ТаблицаТестов, "Mongo_УправлениеКоллекциями" , "Управление коллекциями" , Монго);
Возврат ТаблицаТестов;
@@ -2172,37 +2172,6 @@
#КонецОбласти
#Область MongoDB
Процедура Mongo_УправлениеБазамиДанных() Экспорт
ПараметрыТеста = Новый Структура;
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("MDB_CString", ПараметрыТеста);
СтрокаПодключения = ПараметрыТеста["MDB_CString"];
БазаДанных = "testbase";
Наименование = "testcollection";
OPI_MongoDB.СоздатьКоллекцию(СтрокаПодключения, БазаДанных, Наименование);
MongoDB_ПолучитьСписокБаз(ПараметрыТеста);
MongoDB_ПолучитьСтатистикуБазы(ПараметрыТеста);
MongoDB_БазаДанныхСуществует(ПараметрыТеста);
MongoDB_УдалитьБазу(ПараметрыТеста);
КонецПроцедуры
Процедура Mongo_УправлениеКоллекциями() Экспорт
ПараметрыТеста = Новый Структура;
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("MDB_CString", ПараметрыТеста);
MongoDB_СоздатьКоллекцию(ПараметрыТеста);
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#КонецОбласти
@@ -15681,75 +15650,6 @@
#КонецОбласти
#Область MongoDB
Процедура MongoDB_ПолучитьСписокБаз(ПараметрыФункции)
СтрокаПодключения = ПараметрыФункции["MDB_CString"];
Результат = OPI_MongoDB.ПолучитьСписокБаз(СтрокаПодключения);
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСписокБаз", "MongoDB");
КонецПроцедуры
Процедура MongoDB_ПолучитьСтатистикуБазы(ПараметрыФункции)
СтрокаПодключения = ПараметрыФункции["MDB_CString"];
БазаДанных = "testbase";
Результат = OPI_MongoDB.ПолучитьСтатистикуБазы(СтрокаПодключения, БазаДанных);
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСтатистикуБазы", "MongoDB");
КонецПроцедуры
Процедура MongoDB_БазаДанныхСуществует(ПараметрыФункции)
СтрокаПодключения = ПараметрыФункции["MDB_CString"];
БазаДанных = "testbase";
Результат = OPI_MongoDB.БазаДанныхСуществует(СтрокаПодключения, БазаДанных);
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "БазаДанныхСуществует", "MongoDB");
КонецПроцедуры
Процедура MongoDB_УдалитьБазу(ПараметрыФункции)
СтрокаПодключения = ПараметрыФункции["MDB_CString"];
БазаДанных = "testbase";
Результат = OPI_MongoDB.УдалитьБазу(СтрокаПодключения, БазаДанных);
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УдалитьБазу", "MongoDB");
КонецПроцедуры
Процедура MongoDB_СоздатьКоллекцию(ПараметрыФункции)
СтрокаПодключения = ПараметрыФункции["MDB_CString"];
БазаДанных = "testbase";
Наименование = "testcollection";
Результат = OPI_MongoDB.СоздатьКоллекцию(СтрокаПодключения, БазаДанных, Наименование);
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьКоллекцию", "MongoDB");
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#КонецОбласти
@@ -1,9 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonTemplate xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="70143739-b2c8-46d9-a320-c523b7cba689">
<name>OPI_MongoDB_W</name>
<synonym>
<key></key>
<value>OPI mongo d b W</value>
</synonym>
<templateType>AddIn</templateType>
</mdclass:CommonTemplate>
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonTemplate xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="42f54cff-0a7f-4441-9d1b-72b9f85fac65">
<name>OPI_MongoDB_L</name>
<mdclass:CommonTemplate xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="4c9ebab6-8e20-4690-b509-2e32b293ad75">
<name>OPI_TCPClient</name>
<synonym>
<key></key>
<value>OPI mongo d b L</value>
<key>ru</key>
<value>TCPClient</value>
</synonym>
<templateType>AddIn</templateType>
</mdclass:CommonTemplate>
@@ -39,8 +39,7 @@
<value>https://github.com/Bayselonarrend/OpenIntegrations</value>
</configurationInformationAddress>
<subsystems>Subsystem.OPI_Интеграция</subsystems>
<commonTemplates>CommonTemplate.OPI_MongoDB_W</commonTemplates>
<commonTemplates>CommonTemplate.OPI_MongoDB_L</commonTemplates>
<commonTemplates>CommonTemplate.OPI_TCPClient</commonTemplates>
<commonModules>CommonModule.OPI_Инструменты</commonModules>
<commonModules>CommonModule.OPI_Криптография</commonModules>
<commonModules>CommonModule.OPI_ПреобразованиеТипов</commonModules>
@@ -54,7 +53,6 @@
<commonModules>CommonModule.OPI_GoogleWorkspace</commonModules>
<commonModules>CommonModule.OPI_Neocities</commonModules>
<commonModules>CommonModule.OPI_Ozon</commonModules>
<commonModules>CommonModule.OPI_MongoDB</commonModules>
<commonModules>CommonModule.OPI_Notion</commonModules>
<commonModules>CommonModule.OPI_Slack</commonModules>
<commonModules>CommonModule.OPI_S3</commonModules>