1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2025-08-24 19:49:22 +02:00

RCON: Основа

This commit is contained in:
Anton Titovets
2025-03-16 18:51:02 +03:00
parent 2aee7f2e87
commit 22cb50a6eb
12 changed files with 276 additions and 2 deletions

View File

@@ -247,6 +247,7 @@
СоответствиеЗамен.Вставить("MDB_CString", "mongodb://bayselonarrend:***@127.0.0.1:27017");
СоответствиеЗамен.Вставить("PG_Connection", "postgresql://bayselonarrend:***@127.0.0.1:5432/");
СоответствиеЗамен.Вставить("PG_IP", "127.0.0.1");
СоответствиеЗамен.Вставить("RCON_URL", "127.0.0.1:25565");
Для Каждого Признак Из СоответствиеПризнаковСекретов Цикл

Binary file not shown.

View File

@@ -31,9 +31,9 @@ pub fn cal_func(obj: &mut AddIn, num: usize, params: &mut [Variant]) -> Box<dyn
0 => {
let url = params[0].get_string().unwrap_or("".to_string());
let password = params[0].get_string().unwrap_or("".to_string());
let password = params[1].get_string().unwrap_or("".to_string());
let read_timeout = params[2].get_i32().unwrap_or(0);
let write_timeout = params[2].get_i32().unwrap_or(0);
let write_timeout = params[3].get_i32().unwrap_or(0);
Box::new(methods::connect(obj, &url, &password, read_timeout, write_timeout))
},

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,182 @@
// OneScript: ./OInt/core/Modules/OPI_RCON.os
// Lib: RCON
// CLI: rcon
// 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"
#Область ПрограммныйИнтерфейс
#Область ВыполнениеКоманд
// !NOCLI Открыть соединение
// Открывает новое соединения RCON
//
// Параметры:
// ПараметрыСоединения - Структура Из КлючИЗначение - Параметры соединения. См. СформироватьПараметрыСоединения - params
//
// Возвращаемое значение:
// Произвольный - Объект коннектора или структура с информацией об ошибке
Функция ОткрытьСоединение(Знач ПараметрыСоединения) Экспорт
Если ЭтоКоннектор(ПараметрыСоединения) Тогда
Возврат ПараметрыСоединения;
КонецЕсли;
OPI_ПреобразованиеТипов.ПолучитьКоллекциюКлючИЗначение(ПараметрыСоединения);
МассивОбязательных = СтрРазделить("url,password,read_timeout,write_timeout", ",");
МассивНедостающих = OPI_Инструменты.НайтиОтсутствующиеПоляКоллекции(ПараметрыСоединения, МассивОбязательных);
Если ЗначениеЗаполнено(МассивНедостающих) Тогда
ВызватьИсключение СтрШаблон("Отсутствуют параметры подключения: %1", СтрСоединить(МассивНедостающих));
КонецЕсли;
Коннектор = ПодключитьКомпонентуНаСервере("OPI_RCON");
URL = ПараметрыСоединения["url"];
Пароль = ПараметрыСоединения["password"];
ТаймаутЧтения = ПараметрыСоединения["read_timeout"];
ТаймаутЗаписи = ПараметрыСоединения["write_timeout"];
OPI_ПреобразованиеТипов.ПолучитьСтроку(URL);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Пароль);
OPI_ПреобразованиеТипов.ПолучитьЧисло(ТаймаутЧтения);
OPI_ПреобразованиеТипов.ПолучитьЧисло(ТаймаутЗаписи);
Результат = Коннектор.Connect(URL, Пароль, ТаймаутЧтения, ТаймаутЗаписи);
Результат = OPI_Инструменты.JsonВСтруктуру(Результат, Ложь);
Возврат ?(Результат["result"], Коннектор, Результат);
КонецФункции
// Выполнить команду
// Выполняет команду на сервере
//
// Примечание:
// При передаче параметров соединения, новое соединение будет создано и закрыто в рамках выполнения одной команды.^^
// Для выполнения нескольких команд (в версиях для OS и 1С) рекомендуется использовать заранее созданное соединение (см. ОткрытьСоединение)
//
// Параметры:
// Команда - Строка - Текст команды - exec
// Соединение - Произвольный, Структура Из КлючИЗначение - Соединение или параметры соединения - conn
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - Результат выполнения команды
Функция ВыполнитьКоманду(Знач Команда, Знач Соединение) Экспорт
Если ЭтоКоннектор(Соединение) Тогда
Коннектор = Соединение;
Иначе
Коннектор = ОткрытьСоединение(Соединение);
КонецЕсли;
Если Не ЭтоКоннектор(Коннектор) Тогда
Возврат Коннектор;
КонецЕсли;
OPI_ПреобразованиеТипов.ПолучитьСтроку(Команда);
Результат = Коннектор.Command(Команда);
Результат = OPI_Инструменты.JsonВСтруктуру(Результат);
Возврат Результат;
КонецФункции
// Сформировать параметры соединения
// Формирует коллекцию параметров соединения
//
// Параметры:
// URL - Строка - URL сервера - url
// Пароль - Строка - Пароль для подключения - pass
// ТаймаутЧтения - Число - Таймаут ожидания ответа (в секундах) - rtout
// ТаймаутЗаписи - Число - Таймаут ожидания отправки запроса (в секундах) - wtout
//
// Возвращаемое значение:
// Структура Из КлючИЗначение - Структура параметров соединения
Функция СформироватьПараметрыСоединения(Знач URL, Знач Пароль, Знач ТаймаутЧтения = 30, Знач ТаймаутЗаписи = 30) Экспорт
ПараметрыСоединения = Новый Структура;
OPI_Инструменты.ДобавитьПоле("url" , URL , "Строка", ПараметрыСоединения);
OPI_Инструменты.ДобавитьПоле("password" , Пароль , "Строка", ПараметрыСоединения);
OPI_Инструменты.ДобавитьПоле("read_timeout" , ТаймаутЧтения, "Число" , ПараметрыСоединения);
OPI_Инструменты.ДобавитьПоле("write_timeout", ТаймаутЗаписи, "Число" , ПараметрыСоединения);
Возврат ПараметрыСоединения;
КонецФункции
// Это коннектор !NOCLI
// Проверяет, что значение является объектом внешней компоненты RCON
//
// Параметры:
// Значение - Произвольный - Значение для проверки - value
//
// Возвращаемое значение:
// Булево - Это коннектор
Функция ЭтоКоннектор(Знач Значение) Экспорт
Возврат Строка(ТипЗнч(Значение)) = "AddIn.OPI_RCON.Main";
КонецФункции
#КонецОбласти
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Функция ПодключитьКомпонентуНаСервере(Знач ИмяКомпоненты, Знач Класс = "Main")
Если OPI_Инструменты.ЭтоOneScript() Тогда
ИмяМакета = OPI_Инструменты.КаталогКомпонентOS() + ИмяКомпоненты + ".zip";
Иначе
ИмяМакета = "ОбщийМакет." + ИмяКомпоненты;
КонецЕсли;
ПодключитьВнешнююКомпоненту(ИмяМакета, ИмяКомпоненты, ТипВнешнейКомпоненты.Native);
Компонента = Новый ("AddIn." + ИмяКомпоненты + "." + Класс);
Возврат Компонента;
КонецФункции
#КонецОбласти

View 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="4ed55122-2475-453b-85cf-882e3d62efe1">
<name>OPI_RCON</name>
<synonym>
<key>ru</key>
<value>RCON (ОПИ)</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>

View File

@@ -56,6 +56,7 @@
Разделы.Вставить("Twitter" , 4);
Разделы.Вставить("PostgreSQL" , 5);
Разделы.Вставить("SQLite" , 5);
Разделы.Вставить("RCON" , 5);
Разделы.Вставить("YandexDisk" , 5);
Разделы.Вставить("GoogleWorkspace", 2);
Разделы.Вставить("GoogleCalendar" , 5);
@@ -91,6 +92,7 @@
Разделы.Вставить("Twitter" , СтандартныеЗависимости);
Разделы.Вставить("PostgreSQL" , СтандартныеЗависимости);
Разделы.Вставить("SQLite" , СтандартныеЗависимости);
Разделы.Вставить("RCON" , СтандартныеЗависимости);
Разделы.Вставить("YandexDisk" , СтандартныеЗависимости);
Разделы.Вставить("GoogleWorkspace", СтандартныеЗависимости);
Разделы.Вставить("GoogleCalendar" , ЗависимостиГугл);
@@ -140,6 +142,7 @@
SQLite = "SQLite";
Postgres = "PostgreSQL";
GreenAPI = "GreenAPI";
RCON = "RCON";
ТаблицаТестов = Новый ТаблицаЗначений;
ТаблицаТестов.Колонки.Добавить("Метод");
@@ -285,6 +288,7 @@
НовыйТест(ТаблицаТестов, "GAPI_ОчередьСообщений" , "Очередь сообщений" , GreenAPI);
НовыйТест(ТаблицаТестов, "GAPI_ЖурналыСообщений" , "Журналы сообщений" , GreenAPI);
НовыйТест(ТаблицаТестов, "GAPI_Аккаунт" , "Аккаунт" , GreenAPI);
НовыйТест(ТаблицаТестов, "RC_ВыполнениеКоманд" , "Выполнение команд" , RCON);
Возврат ТаблицаТестов;

View File

@@ -53,6 +53,7 @@
// #Использовать "../../../tools"
// #Использовать "../../../core"
// #Использовать asserts
#Область СлужебныйПрограммныйИнтерфейс
// Для YaxUnit
@@ -2505,6 +2506,22 @@
#КонецОбласти
#Область RCON
Процедура RC_ВыполнениеКоманд() Экспорт
ПараметрыТеста = Новый Структура;
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("RCON_URL", ПараметрыТеста);
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("RCON_Password", ПараметрыТеста);
RCON_СформироватьПараметрыСоединения(ПараметрыТеста);
RCON_ОткрытьСоединение(ПараметрыТеста);
RCON_ВыполнитьКоманду(ПараметрыТеста);
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#КонецОбласти
@@ -19295,6 +19312,64 @@
#КонецОбласти
#Область RCON
Процедура RCON_СформироватьПараметрыСоединения(ПараметрыФункции)
URL = ПараметрыФункции["RCON_URL"];
Пароль = ПараметрыФункции["RCON_Password"];
ТаймаутЗаписи = 20;
ТаймаутЧтения = 20;
Результат = OPI_RCON.СформироватьПараметрыСоединения(URL, Пароль, ТаймаутЧтения, ТаймаутЗаписи);
// END
Результат["URL"] = "127.0.0.1:25565";
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СформироватьПараметрыСоединения", "RCON");
OPI_ПолучениеДанныхТестов.Проверка_Структура(Результат);
КонецПроцедуры
Процедура RCON_ОткрытьСоединение(ПараметрыФункции)
URL = ПараметрыФункции["RCON_URL"];
Пароль = ПараметрыФункции["RCON_Password"];
ТаймаутЗаписи = 20;
ТаймаутЧтения = 20;
ПараметрыСоединения = OPI_RCON.СформироватьПараметрыСоединения(URL, Пароль, ТаймаутЧтения, ТаймаутЗаписи);
Результат = OPI_RCON.ОткрытьСоединение(ПараметрыСоединения);
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОткрытьСоединение", "RCON");
OPI_ПолучениеДанныхТестов.Проверка_Компонента(Результат, "OPI_RCON");
КонецПроцедуры
Процедура RCON_ВыполнитьКоманду(ПараметрыФункции)
URL = ПараметрыФункции["RCON_URL"];
Пароль = ПараметрыФункции["RCON_Password"];
ТаймаутЗаписи = 20;
ТаймаутЧтения = 20;
ПараметрыСоединения = OPI_RCON.СформироватьПараметрыСоединения(URL, Пароль, ТаймаутЧтения, ТаймаутЗаписи);
Соединение = OPI_RCON.ОткрытьСоединение(ПараметрыСоединения);
Команда = "version";
Результат = OPI_RCON.ВыполнитьКоманду(Команда, Соединение);
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ВыполнитьКоманду", "RCON");
OPI_ПолучениеДанныхТестов.Проверка_РезультатИстина(Результат);
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#КонецОбласти

View File

@@ -56,6 +56,7 @@
<commonModules>CommonModule.OPI_Notion</commonModules>
<commonModules>CommonModule.OPI_Ozon</commonModules>
<commonModules>CommonModule.OPI_PostgreSQL</commonModules>
<commonModules>CommonModule.OPI_RCON</commonModules>
<commonModules>CommonModule.OPI_Slack</commonModules>
<commonModules>CommonModule.OPI_SQLite</commonModules>
<commonModules>CommonModule.OPI_S3</commonModules>