mirror of
https://github.com/Bayselonarrend/OpenIntegrations.git
synced 2024-12-27 02:43:54 +02:00
Начало оснастки TCP
This commit is contained in:
parent
ae6ea71c16
commit
2d01fc160b
@ -116,6 +116,7 @@
|
|||||||
МассивИсключаемыхРасширений.Добавить(".dll");
|
МассивИсключаемыхРасширений.Добавить(".dll");
|
||||||
МассивИсключаемыхРасширений.Добавить(".so");
|
МассивИсключаемыхРасширений.Добавить(".so");
|
||||||
МассивИсключаемыхРасширений.Добавить(".exe");
|
МассивИсключаемыхРасширений.Добавить(".exe");
|
||||||
|
МассивИсключаемыхРасширений.Добавить(".zip");
|
||||||
|
|
||||||
Для Каждого ФайлПроекта Из ВсеФайлы Цикл
|
Для Каждого ФайлПроекта Из ВсеФайлы Цикл
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
16
src/addins/tcp/Cargo.lock
generated
16
src/addins/tcp/Cargo.lock
generated
@ -2,6 +2,14 @@
|
|||||||
# It is not intended for manual editing.
|
# It is not intended for manual editing.
|
||||||
version = 4
|
version = 4
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "OPI_TCPClient"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"addin1c",
|
||||||
|
"native-tls",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "addin1c"
|
name = "addin1c"
|
||||||
version = "0.5.0"
|
version = "0.5.0"
|
||||||
@ -165,14 +173,6 @@ dependencies = [
|
|||||||
"vcpkg",
|
"vcpkg",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "opi_tcp"
|
|
||||||
version = "0.1.0"
|
|
||||||
dependencies = [
|
|
||||||
"addin1c",
|
|
||||||
"native-tls",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pkg-config"
|
name = "pkg-config"
|
||||||
version = "0.3.31"
|
version = "0.3.31"
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "opi_tcp"
|
name = "OPI_TCPClient"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
|
BIN
src/addins/tcp/OPI_TCPClient.zip
Normal file
BIN
src/addins/tcp/OPI_TCPClient.zip
Normal file
Binary file not shown.
@ -1,7 +1,7 @@
|
|||||||
@echo off
|
@echo off
|
||||||
|
|
||||||
:: Установить переменную
|
:: Установить переменную
|
||||||
set LIB_NAME=opi_tcp
|
set LIB_NAME=OPI_TCPClient
|
||||||
set OPENSSL_DIR=C:\msys64\mingw64
|
set OPENSSL_DIR=C:\msys64\mingw64
|
||||||
set OPENSSL_LIB_DIR=%OPENSSL_DIR%\lib
|
set OPENSSL_LIB_DIR=%OPENSSL_DIR%\lib
|
||||||
set OPENSSL_INCLUDE_DIR=%OPENSSL_DIR%\include
|
set OPENSSL_INCLUDE_DIR=%OPENSSL_DIR%\include
|
||||||
@ -47,10 +47,15 @@ copy /y MANIFEST.XML "%OUTPUT_DIR%\MANIFEST.XML"
|
|||||||
if errorlevel 1 goto :error
|
if errorlevel 1 goto :error
|
||||||
|
|
||||||
:: Архивация
|
:: Архивация
|
||||||
set ZIP_NAME=addin.zip
|
powershell -Command "Compress-Archive -Path '%OUTPUT_DIR%\*' -Force -DestinationPath '%LIB_NAME%.zip'"
|
||||||
powershell -Command "Compress-Archive -Path '%OUTPUT_DIR%\*' -Force -DestinationPath '%ZIP_NAME%'"
|
|
||||||
if errorlevel 1 goto :error
|
if errorlevel 1 goto :error
|
||||||
|
|
||||||
|
copy /y "%LIB_NAME%.zip" "../../ru/OInt/addins/%LIB_NAME%.zip"
|
||||||
|
copy /y "%LIB_NAME%.zip" "../../en/OInt/addins/%LIB_NAME%.zip"
|
||||||
|
|
||||||
|
copy /y "%LIB_NAME%.zip" "../../ru/OPI/src/CommonTemplates/%LIB_NAME%/Template.addin"
|
||||||
|
copy /y "%LIB_NAME%.zip" "../../en/OPI/src/CommonTemplates/%LIB_NAME%/Template.addin"
|
||||||
|
|
||||||
if exist "%OUTPUT_DIR%" (
|
if exist "%OUTPUT_DIR%" (
|
||||||
rmdir /S /Q "%OUTPUT_DIR%"
|
rmdir /S /Q "%OUTPUT_DIR%"
|
||||||
)
|
)
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
use std::io::{Read, Write};
|
use std::io::{Read, Write};
|
||||||
use std::net::TcpStream;
|
use std::net::TcpStream;
|
||||||
use native_tls::TlsStream;
|
use native_tls::TlsStream;
|
||||||
use std::time::Duration;
|
use std::time::{Duration, Instant};
|
||||||
|
|
||||||
pub enum Connection {
|
pub enum Connection {
|
||||||
Tcp(TcpStream),
|
Tcp(TcpStream),
|
||||||
@ -43,25 +43,42 @@ pub fn send(connection: &mut Connection, data: Vec<u8>, timeout_ms: i32) -> bool
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Считывает данные
|
/// Считывает данные
|
||||||
pub fn receive(connection: &mut Connection, buffer_size: i32, timeout_ms: i32) -> Vec<u8> {
|
pub fn receive(
|
||||||
|
connection: &mut Connection,
|
||||||
|
buffer_size: i32,
|
||||||
|
timeout_ms: i32,
|
||||||
|
max_data_size: i32,
|
||||||
|
max_duration_ms: i32,
|
||||||
|
) -> Vec<u8> {
|
||||||
|
|
||||||
let mut result = Vec::new();
|
let mut result = Vec::new();
|
||||||
let mut buffer = vec![0u8; buffer_size as usize];
|
let mut buffer = vec![0u8; buffer_size as usize];
|
||||||
|
let start_time = Instant::now();
|
||||||
|
|
||||||
match connection {
|
// Если max_duration_ms > 0, устанавливаем таймаут только если он не установлен
|
||||||
Connection::Tcp(stream) => {
|
if max_duration_ms > 0 {
|
||||||
stream.set_read_timeout(Some(Duration::from_millis(timeout_ms as u64))).ok();
|
match connection {
|
||||||
}
|
Connection::Tcp(stream) => {
|
||||||
Connection::Tls(stream) => {
|
stream.set_read_timeout(Some(Duration::from_millis(timeout_ms as u64))).ok();
|
||||||
stream.get_ref().set_read_timeout(Some(Duration::from_millis(timeout_ms as u64))).ok();
|
}
|
||||||
|
Connection::Tls(stream) => {
|
||||||
|
stream.get_ref().set_read_timeout(Some(Duration::from_millis(timeout_ms as u64))).ok();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
|
// Проверяем ограничения, если они заданы
|
||||||
|
if (max_data_size > 0 && result.len() >= max_data_size as usize) ||
|
||||||
|
(max_duration_ms > 0 && start_time.elapsed() > Duration::from_millis(max_duration_ms as u64)) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
match connection.read(&mut buffer) {
|
match connection.read(&mut buffer) {
|
||||||
Ok(0) => break, // Конец данных (EOF)
|
Ok(0) => break, // EOF - конец данных
|
||||||
Ok(size) => result.extend_from_slice(&buffer[..size]),
|
Ok(size) => result.extend_from_slice(&buffer[..size]),
|
||||||
Err(ref e) if e.kind() == std::io::ErrorKind::WouldBlock => break, // Нет данных
|
Err(ref e) if e.kind() == std::io::ErrorKind::WouldBlock => break, // Таймаут
|
||||||
Err(e) => break, // Любая другая ошибка
|
Err(_) => break, // Любая другая ошибка
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -69,6 +86,7 @@ pub fn receive(connection: &mut Connection, buffer_size: i32, timeout_ms: i32) -
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Закрывает соединение
|
/// Закрывает соединение
|
||||||
pub fn disconnect(add_in: &mut crate::component::AddIn) {
|
pub fn disconnect(add_in: &mut crate::component::AddIn) -> bool {
|
||||||
add_in.connection = None;
|
add_in.connection = None;
|
||||||
|
true
|
||||||
}
|
}
|
@ -22,7 +22,7 @@ pub fn get_params_amount(num: usize) -> usize {
|
|||||||
match num {
|
match num {
|
||||||
0 => 0,
|
0 => 0,
|
||||||
1 => 0,
|
1 => 0,
|
||||||
2 => 2,
|
2 => 4,
|
||||||
3 => 2,
|
3 => 2,
|
||||||
_ => 0,
|
_ => 0,
|
||||||
}
|
}
|
||||||
@ -43,9 +43,11 @@ pub fn cal_func(obj: &mut AddIn, num: usize, params: &mut [Variant]) -> Box<dyn
|
|||||||
|
|
||||||
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);
|
let timeout = params[1].get_i32().unwrap_or(0);
|
||||||
|
let maxsize = params[2].get_i32().unwrap_or(0);
|
||||||
|
let maxduration = params[3].get_i32().unwrap_or(0);
|
||||||
|
|
||||||
if let Some(ref mut connection) = obj.connection {
|
if let Some(ref mut connection) = obj.connection {
|
||||||
Box::new(methods::receive(connection, size, timeout))
|
Box::new(methods::receive(connection, size, timeout, maxsize, maxduration))
|
||||||
} else {
|
} else {
|
||||||
Box::new(Vec::<u8>::new()) // Если соединения нет, возвращаем пустой массив
|
Box::new(Vec::<u8>::new()) // Если соединения нет, возвращаем пустой массив
|
||||||
}
|
}
|
||||||
@ -75,7 +77,7 @@ pub fn cal_func(obj: &mut AddIn, num: usize, params: &mut [Variant]) -> Box<dyn
|
|||||||
// Синонимы
|
// Синонимы
|
||||||
pub const PROPS: &[&[u16]] = &[
|
pub const PROPS: &[&[u16]] = &[
|
||||||
name!("Address"),
|
name!("Address"),
|
||||||
name!("SSL")
|
name!("SSL"),
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
||||||
|
Binary file not shown.
Binary file not shown.
BIN
src/en/OInt/addins/OPI_TCPClient.zip
Normal file
BIN
src/en/OInt/addins/OPI_TCPClient.zip
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
src/ru/OInt/addins/OPI_TCPClient.zip
Normal file
BIN
src/ru/OInt/addins/OPI_TCPClient.zip
Normal file
Binary file not shown.
158
src/ru/OInt/core/Modules/OPI_TCP.os
Normal file
158
src/ru/OInt/core/Modules/OPI_TCP.os
Normal file
@ -0,0 +1,158 @@
|
|||||||
|
// OneScript: ./OInt/core/Modules/OPI_TCP.os
|
||||||
|
// Lib: TCP
|
||||||
|
// CLI: tcp
|
||||||
|
|
||||||
|
// 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
|
||||||
|
|
||||||
|
// Раскомментировать, если выполняется OneScript
|
||||||
|
#Использовать "../../tools"
|
||||||
|
|
||||||
|
#Область ПрограммныйИнтерфейс
|
||||||
|
|
||||||
|
#Область TCPКлиент
|
||||||
|
|
||||||
|
// !NOCLI
|
||||||
|
// Открыть соединение
|
||||||
|
// Создает TCP/TLS соединение
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Адрес - Строка - Адрес и порт для подключения - address
|
||||||
|
// SSL - Булево - Признак использования защищенного соединения - ssl
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Неопределено, Произвольный - Возвращает объект TCP клиента при успешном подключении или неопределено
|
||||||
|
Функция ОткрытьСоединение(Знач Адрес, Знач SSL = Ложь) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Адрес);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьБулево(SSL);
|
||||||
|
|
||||||
|
TCPКлиент = OPI_Инструменты.ПолучитьКомпоненту("OPI_TCPClient");
|
||||||
|
|
||||||
|
TCPКлиент.Address = Адрес;
|
||||||
|
TCPКлиент.SSL = SSL;
|
||||||
|
|
||||||
|
Успех = TCPКлиент.Connect();
|
||||||
|
|
||||||
|
Возврат ?(Успех, TCPКлиент, Неопределено);
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// !NOCLI
|
||||||
|
// Закрыть соединение
|
||||||
|
// Явно закрывает созданное ранее соединение
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Соединение - Произвольный - Соединение, см. ОткрытьСоединение - tcp
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Булево - всегда возвращает Истина
|
||||||
|
Функция ЗакрытьСоединение(Знач Соединение) Экспорт
|
||||||
|
Возврат Соединение.Disconnect();
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// !NOCLI
|
||||||
|
// Получить данные
|
||||||
|
// Читает данные из указанного соединения
|
||||||
|
//
|
||||||
|
// Примечание:
|
||||||
|
// При установке параметров Таймаут и Размер в 0, чтение производится до окончания сообщения
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Соединение - Произвольный - Соединение, см. ОткрытьСоединение - tcp
|
||||||
|
// Таймаут - Число - Время чтения данных (сек). 0 > до конца сообщения - timeout
|
||||||
|
// Размер - Число - Максимальный размер данных. 0 > без ограничений - size
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// ДвоичныеДанные - Полученные данные
|
||||||
|
Функция ПолучитьДанные(Знач Соединение, Знач Таймаут = 0, Знач Размер = 0) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьЧисло(Таймаут);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьЧисло(Размер);
|
||||||
|
|
||||||
|
Возврат Соединение.Read(1024, 150, Таймаут, Размер);
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Подключиться и получить данные
|
||||||
|
// Создает соединение и читает данные до конца или по ограничениям
|
||||||
|
//
|
||||||
|
// Примечание:
|
||||||
|
// При установке параметров Таймаут и Размер в 0, чтение производится до окончания сообщения
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Адрес - Строка - Адрес и порт для подключения - address
|
||||||
|
// SSL - Булево - Признак использования защищенного соединения - ssl
|
||||||
|
// Таймаут - Число - Время чтения данных (сек). 0 > до конца сообщения - timeout
|
||||||
|
// Размер - Число - Максимальный размер данных. 0 > без ограничений - size
|
||||||
|
// Строкой - Булево - Истина > возвращает строку, Ложь > двоичные данные - string
|
||||||
|
// Кодировка - Строка - Кодировка получаемых данных - enc
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Строка, ДвоичныеДанные - Полученные данные
|
||||||
|
Функция ПодключитьсяИПолучитьДанные(Знач Адрес
|
||||||
|
, Знач SSL = Ложь
|
||||||
|
, Знач Таймаут = 0
|
||||||
|
, Знач Размер = 0
|
||||||
|
, Знач Строкой = Истина
|
||||||
|
, Знач Кодировка = "UTF-8") Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьБулево(Строкой);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Кодировка);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьЧисло(Размер);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьЧисло(Таймаут);
|
||||||
|
|
||||||
|
Соединение = ОткрытьСоединение(Адрес, SSL);
|
||||||
|
|
||||||
|
Если Не ЗначениеЗаполнено(Соединение) Тогда
|
||||||
|
ВызватьИсключение "Не удалось создать Соединение";
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Сообщение = ПолучитьДанные(Соединение, Таймаут, Размер);
|
||||||
|
|
||||||
|
Если Строкой Тогда
|
||||||
|
Сообщение = ПолучитьСтрокуИзДвоичныхДанных(Сообщение);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
ЗакрытьСоединение(Соединение);
|
||||||
|
|
||||||
|
Возврат Сообщение;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#КонецОбласти
|
@ -12,6 +12,7 @@
|
|||||||
<module name="OPI_Ozon" file="core/Modules/OPI_Ozon.os"/>
|
<module name="OPI_Ozon" file="core/Modules/OPI_Ozon.os"/>
|
||||||
<module name="OPI_S3" file="core/Modules/OPI_S3.os"/>
|
<module name="OPI_S3" file="core/Modules/OPI_S3.os"/>
|
||||||
<module name="OPI_Slack" file="core/Modules/OPI_Slack.os"/>
|
<module name="OPI_Slack" file="core/Modules/OPI_Slack.os"/>
|
||||||
|
<module name="OPI_TCP" file="core/Modules/OPI_TCP.os"/>
|
||||||
<module name="OPI_Telegram" file="core/Modules/OPI_Telegram.os"/>
|
<module name="OPI_Telegram" file="core/Modules/OPI_Telegram.os"/>
|
||||||
<module name="OPI_Twitter" file="core/Modules/OPI_Twitter.os"/>
|
<module name="OPI_Twitter" file="core/Modules/OPI_Twitter.os"/>
|
||||||
<module name="OPI_Viber" file="core/Modules/OPI_Viber.os"/>
|
<module name="OPI_Viber" file="core/Modules/OPI_Viber.os"/>
|
||||||
|
@ -1528,19 +1528,6 @@
|
|||||||
|
|
||||||
КонецФункции
|
КонецФункции
|
||||||
|
|
||||||
Функция КаталогКомпонентOS() Экспорт
|
|
||||||
|
|
||||||
КаталогПрограммы = СтрЗаменить(КаталогПрограммы(), "\", "/");
|
|
||||||
|
|
||||||
ЭлементыПути = СтрРазделить(КаталогПрограммы, "/");
|
|
||||||
ЭлементыПути.Удалить(ЭлементыПути.ВГраница());
|
|
||||||
|
|
||||||
КаталогКомпонент = СтрСоединить(ЭлементыПути, "/") + "/lib/oint/addins/";
|
|
||||||
|
|
||||||
Возврат КаталогКомпонент;
|
|
||||||
|
|
||||||
КонецФункции
|
|
||||||
|
|
||||||
#Область РаботаСВнешнимиКомпонентами
|
#Область РаботаСВнешнимиКомпонентами
|
||||||
|
|
||||||
Функция ИнициализироватьВнешнююКомпоненту(Знач ИмяКомпоненты, Знач Класс, Компонента)
|
Функция ИнициализироватьВнешнююКомпоненту(Знач ИмяКомпоненты, Знач Класс, Компонента)
|
||||||
@ -1556,25 +1543,26 @@
|
|||||||
|
|
||||||
Функция ПодключитьКомпонентуНаСервере(Знач ИмяКомпоненты)
|
Функция ПодключитьКомпонентуНаСервере(Знач ИмяКомпоненты)
|
||||||
|
|
||||||
ЭтоWindows = ЭтоWindows();
|
|
||||||
|
|
||||||
Если ЭтоWindows() Тогда
|
|
||||||
Постфикс = "_W";
|
|
||||||
Расширение = ".dll";
|
|
||||||
Иначе
|
|
||||||
Постфикс = "_L";
|
|
||||||
Расширение = ".so";
|
|
||||||
КонецЕсли;
|
|
||||||
|
|
||||||
ИмяМакета = ИмяКомпоненты + Постфикс;
|
|
||||||
|
|
||||||
Если ЭтоOneScript() Тогда
|
Если ЭтоOneScript() Тогда
|
||||||
ИмяМакета = КаталогКомпонентOS() + ИмяМакета + Расширение;
|
ИмяМакета = КаталогКомпонентOS() + ИмяМакета + ".zip";
|
||||||
Иначе
|
Иначе
|
||||||
ИмяМакета = "ОбщийМакет." + ИмяМакета;
|
ИмяМакета = "ОбщийМакет." + ИмяМакета;
|
||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
|
|
||||||
Возврат ПодключитьВнешнююКомпоненту(ИмяМакета, ИмяКомпоненты, ТипВнешнейКомпоненты.Native);
|
Возврат ПодключитьВнешнююКомпоненту(ИмяМакета, ИмяКомпоненты);
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция КаталогКомпонентOS() Экспорт
|
||||||
|
|
||||||
|
КаталогПрограммы = СтрЗаменить(КаталогПрограммы(), "\", "/");
|
||||||
|
|
||||||
|
ЭлементыПути = СтрРазделить(КаталогПрограммы, "/");
|
||||||
|
ЭлементыПути.Удалить(ЭлементыПути.ВГраница());
|
||||||
|
|
||||||
|
КаталогКомпонент = СтрСоединить(ЭлементыПути, "/") + "/lib/oint/addins/";
|
||||||
|
|
||||||
|
Возврат КаталогКомпонент;
|
||||||
|
|
||||||
КонецФункции
|
КонецФункции
|
||||||
|
|
||||||
|
158
src/ru/OPI/src/CommonModules/OPI_TCP/Module.bsl
Normal file
158
src/ru/OPI/src/CommonModules/OPI_TCP/Module.bsl
Normal file
@ -0,0 +1,158 @@
|
|||||||
|
// OneScript: ./OInt/core/Modules/OPI_TCP.os
|
||||||
|
// Lib: TCP
|
||||||
|
// CLI: tcp
|
||||||
|
|
||||||
|
// 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
|
||||||
|
|
||||||
|
// Раскомментировать, если выполняется OneScript
|
||||||
|
// #Использовать "../../tools"
|
||||||
|
|
||||||
|
#Область ПрограммныйИнтерфейс
|
||||||
|
|
||||||
|
#Область TCPКлиент
|
||||||
|
|
||||||
|
// !NOCLI
|
||||||
|
// Открыть соединение
|
||||||
|
// Создает TCP/TLS соединение
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Адрес - Строка - Адрес и порт для подключения - address
|
||||||
|
// SSL - Булево - Признак использования защищенного соединения - ssl
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Неопределено, Произвольный - Возвращает объект TCP клиента при успешном подключении или неопределено
|
||||||
|
Функция ОткрытьСоединение(Знач Адрес, Знач SSL = Ложь) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Адрес);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьБулево(SSL);
|
||||||
|
|
||||||
|
TCPКлиент = OPI_Инструменты.ПолучитьКомпоненту("OPI_TCPClient");
|
||||||
|
|
||||||
|
TCPКлиент.Address = Адрес;
|
||||||
|
TCPКлиент.SSL = SSL;
|
||||||
|
|
||||||
|
Успех = TCPКлиент.Connect();
|
||||||
|
|
||||||
|
Возврат ?(Успех, TCPКлиент, Неопределено);
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// !NOCLI
|
||||||
|
// Закрыть соединение
|
||||||
|
// Явно закрывает созданное ранее соединение
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Соединение - Произвольный - Соединение, см. ОткрытьСоединение - tcp
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Булево - всегда возвращает Истина
|
||||||
|
Функция ЗакрытьСоединение(Знач Соединение) Экспорт
|
||||||
|
Возврат Соединение.Disconnect();
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// !NOCLI
|
||||||
|
// Получить данные
|
||||||
|
// Читает данные из указанного соединения
|
||||||
|
//
|
||||||
|
// Примечание:
|
||||||
|
// При установке параметров Таймаут и Размер в 0, чтение производится до окончания сообщения
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Соединение - Произвольный - Соединение, см. ОткрытьСоединение - tcp
|
||||||
|
// Таймаут - Число - Время чтения данных (сек). 0 > до конца сообщения - timeout
|
||||||
|
// Размер - Число - Максимальный размер данных. 0 > без ограничений - size
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// ДвоичныеДанные - Полученные данные
|
||||||
|
Функция ПолучитьДанные(Знач Соединение, Знач Таймаут = 0, Знач Размер = 0) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьЧисло(Таймаут);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьЧисло(Размер);
|
||||||
|
|
||||||
|
Возврат Соединение.Read(1024, 150, Таймаут, Размер);
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Подключиться и получить данные
|
||||||
|
// Создает соединение и читает данные до конца или по ограничениям
|
||||||
|
//
|
||||||
|
// Примечание:
|
||||||
|
// При установке параметров Таймаут и Размер в 0, чтение производится до окончания сообщения
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Адрес - Строка - Адрес и порт для подключения - address
|
||||||
|
// SSL - Булево - Признак использования защищенного соединения - ssl
|
||||||
|
// Таймаут - Число - Время чтения данных (сек). 0 > до конца сообщения - timeout
|
||||||
|
// Размер - Число - Максимальный размер данных. 0 > без ограничений - size
|
||||||
|
// Строкой - Булево - Истина > возвращает строку, Ложь > двоичные данные - string
|
||||||
|
// Кодировка - Строка - Кодировка получаемых данных - enc
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Строка, ДвоичныеДанные - Полученные данные
|
||||||
|
Функция ПодключитьсяИПолучитьДанные(Знач Адрес
|
||||||
|
, Знач SSL = Ложь
|
||||||
|
, Знач Таймаут = 0
|
||||||
|
, Знач Размер = 0
|
||||||
|
, Знач Строкой = Истина
|
||||||
|
, Знач Кодировка = "UTF-8") Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьБулево(Строкой);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Кодировка);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьЧисло(Размер);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьЧисло(Таймаут);
|
||||||
|
|
||||||
|
Соединение = ОткрытьСоединение(Адрес, SSL);
|
||||||
|
|
||||||
|
Если Не ЗначениеЗаполнено(Соединение) Тогда
|
||||||
|
ВызватьИсключение "Не удалось создать Соединение";
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Сообщение = ПолучитьДанные(Соединение, Таймаут, Размер);
|
||||||
|
|
||||||
|
Если Строкой Тогда
|
||||||
|
Сообщение = ПолучитьСтрокуИзДвоичныхДанных(Сообщение);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
ЗакрытьСоединение(Соединение);
|
||||||
|
|
||||||
|
Возврат Сообщение;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#КонецОбласти
|
11
src/ru/OPI/src/CommonModules/OPI_TCP/OPI_TCP.mdo
Normal file
11
src/ru/OPI/src/CommonModules/OPI_TCP/OPI_TCP.mdo
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="ed305045-7f7e-4dae-b254-e1e1bdb32293">
|
||||||
|
<name>OPI_TCP</name>
|
||||||
|
<synonym>
|
||||||
|
<key>ru</key>
|
||||||
|
<value>TCP</value>
|
||||||
|
</synonym>
|
||||||
|
<server>true</server>
|
||||||
|
<externalConnection>true</externalConnection>
|
||||||
|
<clientOrdinaryApplication>true</clientOrdinaryApplication>
|
||||||
|
</mdclass:CommonModule>
|
@ -1528,19 +1528,6 @@
|
|||||||
|
|
||||||
КонецФункции
|
КонецФункции
|
||||||
|
|
||||||
Функция КаталогКомпонентOS() Экспорт
|
|
||||||
|
|
||||||
КаталогПрограммы = СтрЗаменить(КаталогПрограммы(), "\", "/");
|
|
||||||
|
|
||||||
ЭлементыПути = СтрРазделить(КаталогПрограммы, "/");
|
|
||||||
ЭлементыПути.Удалить(ЭлементыПути.ВГраница());
|
|
||||||
|
|
||||||
КаталогКомпонент = СтрСоединить(ЭлементыПути, "/") + "/lib/oint/addins/";
|
|
||||||
|
|
||||||
Возврат КаталогКомпонент;
|
|
||||||
|
|
||||||
КонецФункции
|
|
||||||
|
|
||||||
#Область РаботаСВнешнимиКомпонентами
|
#Область РаботаСВнешнимиКомпонентами
|
||||||
|
|
||||||
Функция ИнициализироватьВнешнююКомпоненту(Знач ИмяКомпоненты, Знач Класс, Компонента)
|
Функция ИнициализироватьВнешнююКомпоненту(Знач ИмяКомпоненты, Знач Класс, Компонента)
|
||||||
@ -1556,25 +1543,26 @@
|
|||||||
|
|
||||||
Функция ПодключитьКомпонентуНаСервере(Знач ИмяКомпоненты)
|
Функция ПодключитьКомпонентуНаСервере(Знач ИмяКомпоненты)
|
||||||
|
|
||||||
ЭтоWindows = ЭтоWindows();
|
|
||||||
|
|
||||||
Если ЭтоWindows() Тогда
|
|
||||||
Постфикс = "_W";
|
|
||||||
Расширение = ".dll";
|
|
||||||
Иначе
|
|
||||||
Постфикс = "_L";
|
|
||||||
Расширение = ".so";
|
|
||||||
КонецЕсли;
|
|
||||||
|
|
||||||
ИмяМакета = ИмяКомпоненты + Постфикс;
|
|
||||||
|
|
||||||
Если ЭтоOneScript() Тогда
|
Если ЭтоOneScript() Тогда
|
||||||
ИмяМакета = КаталогКомпонентOS() + ИмяМакета + Расширение;
|
ИмяМакета = КаталогКомпонентOS() + ИмяМакета + ".zip";
|
||||||
Иначе
|
Иначе
|
||||||
ИмяМакета = "ОбщийМакет." + ИмяМакета;
|
ИмяМакета = "ОбщийМакет." + ИмяМакета;
|
||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
|
|
||||||
Возврат ПодключитьВнешнююКомпоненту(ИмяМакета, ИмяКомпоненты, ТипВнешнейКомпоненты.Native);
|
Возврат ПодключитьВнешнююКомпоненту(ИмяМакета, ИмяКомпоненты);
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция КаталогКомпонентOS() Экспорт
|
||||||
|
|
||||||
|
КаталогПрограммы = СтрЗаменить(КаталогПрограммы(), "\", "/");
|
||||||
|
|
||||||
|
ЭлементыПути = СтрРазделить(КаталогПрограммы, "/");
|
||||||
|
ЭлементыПути.Удалить(ЭлементыПути.ВГраница());
|
||||||
|
|
||||||
|
КаталогКомпонент = СтрСоединить(ЭлементыПути, "/") + "/lib/oint/addins/";
|
||||||
|
|
||||||
|
Возврат КаталогКомпонент;
|
||||||
|
|
||||||
КонецФункции
|
КонецФункции
|
||||||
|
|
||||||
|
Binary file not shown.
@ -56,6 +56,7 @@
|
|||||||
<commonModules>CommonModule.OPI_Notion</commonModules>
|
<commonModules>CommonModule.OPI_Notion</commonModules>
|
||||||
<commonModules>CommonModule.OPI_Slack</commonModules>
|
<commonModules>CommonModule.OPI_Slack</commonModules>
|
||||||
<commonModules>CommonModule.OPI_S3</commonModules>
|
<commonModules>CommonModule.OPI_S3</commonModules>
|
||||||
|
<commonModules>CommonModule.OPI_TCP</commonModules>
|
||||||
<commonModules>CommonModule.OPI_Telegram</commonModules>
|
<commonModules>CommonModule.OPI_Telegram</commonModules>
|
||||||
<commonModules>CommonModule.OPI_Twitter</commonModules>
|
<commonModules>CommonModule.OPI_Twitter</commonModules>
|
||||||
<commonModules>CommonModule.OPI_Viber</commonModules>
|
<commonModules>CommonModule.OPI_Viber</commonModules>
|
||||||
|
Loading…
Reference in New Issue
Block a user