Asterisk.Core.Actions 1.0.0

dotnet add package Asterisk.Core.Actions --version 1.0.0
                    
NuGet\Install-Package Asterisk.Core.Actions -Version 1.0.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Asterisk.Core.Actions" Version="1.0.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Asterisk.Core.Actions" Version="1.0.0" />
                    
Directory.Packages.props
<PackageReference Include="Asterisk.Core.Actions" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Asterisk.Core.Actions --version 1.0.0
                    
#r "nuget: Asterisk.Core.Actions, 1.0.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Asterisk.Core.Actions@1.0.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Asterisk.Core.Actions&version=1.0.0
                    
Install as a Cake Addin
#tool nuget:?package=Asterisk.Core.Actions&version=1.0.0
                    
Install as a Cake Tool

Asterisk.Core.Actions

Asterisk.Core.Actions es la capa fundamental de la biblioteca que contiene las clases para todas las Acciones de Interfaz del Administrador de Asterisk (AMI).

Cada clase de acción representa un comando AMI específico (ej., Login, Originate, Ping) y actúa como un contenedor de la lógica para:

  1. Estructurar los campos de datos (parámetros) para ser enviados al servidor AMI.
  2. Definir el tipo de respuesta tipada (TResponse) que se espera recibir del servidor.
  3. Serializar la acción en el formato de texto plano requerido por el protocolo AMI.

Arquitectura y Dependencias

Este paquete es la capa central y depende de los paquetes que definen las estructuras de datos básicas:

Paquete Propósito Uso en Actions
Asterisk.Core.Responses Define los objetos de respuesta (LoginResponse, OriginateResponse). Es el tipo genérico (TResponse) utilizado en MessageBase<TResponse>.

Clase Base: MessageBase<TResponse>

Todas las acciones heredan de la clase abstracta MessageBase<TResponse>, la cual proporciona la siguiente funcionalidad central:

  • Identificación: Genera y mantiene el ActionID único.
  • Sincronización: Contiene el AutoResetEvent para el manejo de llamadas AMI síncronas.
  • Contrato de Respuesta: Define el método abstracto OnResponse(Dictionary<string, string> args) que cada acción debe implementar para convertir la respuesta del servidor en su objeto tipado (TResponse).
  • Eventos: Expone el evento ResponseReceived tipado.

Uso Básico

Para definir y enviar una acción, solo necesitas instanciar la clase correspondiente. La acción se encarga de formatear la solicitud.

1. Inicialización de Acciones

La mayoría de las acciones se inicializan directamente.

using Asterisk.Core.Actions;
using Asterisk.Core.Responses;
using System.Threading;

// Ping Action: No requiere parámetros
var pingAction = new PingAction(); 

// Logoff Action: Cierra la conexión
var logoffAction = new LogoffAction();

2. Acciones con Lógica de Negocio (Login)

La acción Login es un ejemplo donde la clase encapsula la lógica de protocolo (hashing MD5).

using System.Net.Sockets;
using System.Text;

// 1. Obtener el Challenge del servidor
var challengeAction = new ChallengeAction();
// ... (lógica de envío) ...
ChallengeResponse challengeResponse = // ... (obtener respuesta) ...

// 2. Crear la acción de Login usando el Challenge para calcular la Key
var loginAction = new LoginAction("username", "secret");

// 3. Asignar el Challenge (el setter calcula automáticamente el hash MD5)
loginAction.Key = challengeResponse.Challenge; 

// 4. La acción está lista para ser enviada
// byte[] amiMessage = loginAction.ToBytes(); 

3. Implementación de una Acción Personalizada

Si necesitas crear una acción AMI que no existe en el paquete, heredas de la clase base:

using System.Collections.Generic;

public class MyCustomAction : MessageBase<MyCustomResponse>
{
    public override string Action { get; } = "MyCustomCommand";
    public string CustomField { get; set; } = "Value";

    // Implementa la propiedad Fields para indicar los campos a enviar (sin Action/ActionID)
    public override IReadOnlyList<KeyValuePair<string, string>> Fields => 
        new List<KeyValuePair<string, string>> 
        { 
            new ("CustomField", CustomField) 
        }.AsReadOnly();

    // Implementa la deserialización de la respuesta
    protected override void OnResponse(Dictionary<string, string> args)
    {
        // Lógica de parsing aquí
        bool success = args.TryGetValue("Response", out var resp) && resp.StartsWith("Success");
        _response = new MyCustomResponse(success);

        ResponseReceived?.Invoke(this, _response);

        // Comprueba si este manejador está asociado con un evento de sincronización (operación síncrona).
        if (AutoEvent != null)
            // Si hay un AutoResetEvent, llama a 'Set()'. Esto libera al hilo que llamó a 'WaitOne()' 
            // previamente, permitiéndole continuar su ejecución y recuperar la respuesta.
            AutoEvent.Set();
    }
}

Contribución

¡Las contribuciones son bienvenidas! Si deseas añadir nuevas clases de respuesta o mejorar la documentación, por favor, abre un issue o envía una pull request a nuestro repositorio.


Licencia

Distribuido bajo la licencia MIT.

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on Asterisk.Core.Actions:

Package Downloads
Asterisk.Core.Manager

Biblioteca que define las clases principales de orquestación, conexión, estado y parsing para la biblioteca Asterisk Manager Interface (AMI).

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.0 263 11/10/2025