7.6 KiB
ErrorsManager
ErrorsManager es una librería que nos permite hacer una gestión de errores mediante códigos de error en base binaria o agrupación de base numérica. La idea es poder trasladar un análisis global de errores entre plataformas de forma simple con el condicionante que ambas plataformas han de conocer estructuralmente el sistema de errores. El propósito de dicho sistema es conseguir un sistema unificado de errores que permita el envío compacto de los mismos evitando un uso innecesario de red.
Funcionamiento
La idea es crear un objeto ErrorsManager para gestionar los errores dentro del código y hacer uso de set, has y process para gestionar los errores, aunque de por sí tenga más funcionalidades.
NOTA: Este manual ordenará los métodos y estructuras conforme su utilidad e importancia fuera del ámbito de la propia librería para uso general.
Constructor
errors_manager:ErrorsManager = new ErrorsManager(inputs:dict[str, any|null])
- alphabet: Alfabeto String o Array de Caracteres.
- base: Entero que representa la máxima base 2 numérica que se usará: 16, 32 o 64, por ejemplo.
El alfabeto no puede contener caracteres iguales, y si los contiene, se encargará de eliminarlos, reduciendo la posibilidad de base.
set
error:int = errors_manager.set(from:int, code:int|list[byte]|str, from:int = 0, bits:int = 0)
error:list[byte]= errors_manager.set(from:list[byte], code:int|list[byte]|str, from:int = 0, bits:int = 0)
error:str = errors_manager.set(from:str, code:int|list[byte]|str, from:int = 0, bits:int = 0)
- error: Código de error original. Puede ser un String, Array de enteros que representan los Hexas o un entero.
- code: Código de error a establecer. Puede ser un String, Array de enteros que representan los Hexas o un entero.
- from: Determina si se quiere desplazar
code. 0 indica que no. - bits: Determina si se pasan a 0 los bits que de
errordesdefrom. 0 indica que no.
El from negativo indica que se cuente desde el final, y el bits negativo que se cuente para atrás. Esto se establece desde ErrorsManager.get_from_bits.
Retorna el resultado de la unión de error con code a partir de las posibles modificaciones de from y bits.
has
has:bool = errors_manager.has(code:int|list[byte]|str)
Determina si un código de error contiene errores o no.
process
errors_messages:list[tuple[int, str]] = errors_manager.process(code:int|list[byte]|str, messages:list[str] = [ ... ])
Permite recoger el conjunto de mensajes conforme al código de error. Cada mensaje irá acompañado de su Bit de posición, de ahí que retorne una lista de tuplas de un valor entero, que es el Bit de posición; y el String, que es el mensaje en cuestión.
[position, message for position:int, message:str in errors_messages]
Si retorna una lista vacía es que no hay errores.
.NET
- Docker Hub del SDK: https://hub.docker.com/r/microsoft/dotnet-sdk
- Git del SDK: https://github.com/dotnet/sdk
Para crear los SLN de la Solución:
#!/bin/bash
docker exec -it anp-dotnet bash
cd CSharp
dotnet new sln -n ErrorsManager
dotnet sln add ErrorsManager.csproj
cd ..
exit
sudo chown -R root:$USER CSharp/ErrorsManager.slnx
Luego hay que pelar el archivo de definición de proyecto ErrorsManager.csproj:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<!-- <OutputType>Library</OutputType> -->
<TargetFrameworks>net10.0;net462</TargetFrameworks>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<RootNamespace>ErrorsManager</RootNamespace>
<AssemblyName>ErrorsManager</AssemblyName>
<EnableDefaultCompileItems>false</EnableDefaultCompileItems>
</PropertyGroup>
<ItemGroup>
<Compile Include="ErrorsManager.cs" />
<Compile Include="Program.cs" />
<Compile Include="Tests.cs" />
</ItemGroup>
</Project>
Instalación del SDK para desarrollo VSCode.
#!/bin/bash
wget https://packages.microsoft.com/config/ubuntu/24.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb
sudo apt update
sudo apt install -y dotnet-sdk-10.0
Luego, instalar el Pluggin Nuget de Visual Studio Code C/C++ DevTools.
Para ejecutar un proyecto .NET desde Docker.
#!/bin/bash
docker exec -it anp-dotnet dotnet run --project /workspace/CSharp/ErrorsManager.csproj -f net10.0
Para compilar DLL primero configurar el archivo de definición de proyecto ErrorsManager.csproj.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<!-- <OutputType>Exe</OutputType> -->
<OutputType>Library</OutputType>
<TargetFrameworks>net10.0;net462</TargetFrameworks>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<RootNamespace>ErrorsManager</RootNamespace>
<AssemblyName>ErrorsManager</AssemblyName>
<EnableDefaultCompileItems>false</EnableDefaultCompileItems>
</PropertyGroup>
<ItemGroup>
<Compile Include="ErrorsManager.cs" />
<!-- <Compile Include="Program.cs" />
<Compile Include="Tests.cs" /> -->
</ItemGroup>
</Project>
Y luego ejecutar:
#!/bin/bash
dotnet build ErrorsManager.csproj -c Release
Objetivos
Leyenda:
- Py: Python
- PHP
- JS: JavaScript/ECMAScript
- MSL: SQLServer/TransactSQL
- MyL: MySQL/MariaDB
- CS: C#/CSharp
- VB: VisualBasic
- Go: Golang
- RS: Rust
- C
- CPP: C++
Tabla de objetivos:
| Objetivo | Py | PHP | JS | MSL | MyS | CS | VB | Go | RS | C | CPP |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Common base | [X] | [ ] | [X] | [ ] | [ ] | [X] | [ ] | [ ] | [ ] | [ ] | [ ] |
| set_alphabet | [X] | [ ] | [X] | [ ] | [ ] | [X] | [ ] | [ ] | [ ] | [ ] | [ ] |
| get_alphabet | [ ] | [ ] | [ ] | [ ] | [ ] | [X] | [ ] | [ ] | [ ] | [ ] | [ ] |
| to_array | [X] | [ ] | [X] | [X] | [ ] | [ ] | [ ] | [ ] | [ ] | ||
| to_integer | [X] | [ ] | [X] | [ ] | [ ] | [X] | [ ] | [ ] | [ ] | [ ] | [ ] |
| to_string | [X] | [ ] | [X] | [ ] | [ ] | [X] | [ ] | [ ] | [ ] | [ ] | [ ] |
| to_string_binary | [X] | [ ] | [X] | [ ] | [ ] | [X] | [ ] | [ ] | [ ] | [ ] | [ ] |
| process | [X] | [ ] | [X] | [ ] | [ ] | [X] | [ ] | [ ] | [ ] | [ ] | [ ] |
| get_bits | [ ] | [ ] | [ ] | [ ] | [ ] | [X] | [ ] | [ ] | [ ] | [ ] | [ ] |
| bitwise | [X] | [ ] | [X] | [ ] | [ ] | [X] | [ ] | [ ] | [ ] | [ ] | [ ] |
| get_from_bits | [ ] | [ ] | [ ] | [ ] | [ ] | [X] | [ ] | [ ] | [ ] | [ ] | [ ] |
| reset | [X] | [ ] | [X] | [ ] | [ ] | [X] | [ ] | [ ] | [ ] | [ ] | [ ] |
| get_range | [ ] | [ ] | [ ] | [ ] | [ ] | [X] | [ ] | [ ] | [ ] | [ ] | [ ] |
| has | [X] | [ ] | [X] | [ ] | [ ] | [X] | [ ] | [ ] | [ ] | [ ] | [ ] |
| clean | [ ] | [ ] | [ ] | [ ] | [ ] | [X] | [ ] | [ ] | [ ] | [ ] | [ ] |
| set | [X] | [ ] | [X] | [ ] | [ ] | [X] | [ ] | [ ] | [ ] | [ ] | [ ] |
NOTA: Los Checkbox indican el estado siendo los siguientes:
- Sin cubrir, está por hacerse.
- [-] Están en desarrollo actualmente.
- Ya está hecho y es usable.
NOTA: Según lenguajes que tenga cierta rigidez, como es el caso de Golang, los nombres de los métodos y atributos pueden cambiar a Camel o Pascal.
- Comprobar
Tests.setconTests.errorsun valor pequeño sobre uno grande o desplazado a la izquierda para ver la sobredimensión.