Asterisk.Core.Events 1.0.0

dotnet add package Asterisk.Core.Events --version 1.0.0
                    
NuGet\Install-Package Asterisk.Core.Events -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.Events" 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.Events" Version="1.0.0" />
                    
Directory.Packages.props
<PackageReference Include="Asterisk.Core.Events" />
                    
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.Events --version 1.0.0
                    
#r "nuget: Asterisk.Core.Events, 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.Events@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.Events&version=1.0.0
                    
Install as a Cake Addin
#tool nuget:?package=Asterisk.Core.Events&version=1.0.0
                    
Install as a Cake Tool

Asterisk.Core.Events

El paquete Asterisk.Core.Events proporciona clases de argumentos tipadas y fuertemente estructuradas para representar eventos asíncronos recibidos del Protocolo de Interfaz de Administrador (AMI) de Asterisk.

Este paquete se centra en la limpieza, inmutabilidad y fácil acceso a los datos de los eventos AMI, aprovechando la herencia (DialplanEventArgsBase) y las utilidades de parsing (DialplanParserHelper) que hemos desarrollado.

Características Principales

  • Tipificación Fuerte: Todos los eventos AMI se representan mediante clases EventArgs específicas (ej. NewextenEventArgs, HangupEventArgs, VarSetEventArgs).
  • Herencia y Reutilización: Utiliza la clase base DialplanEventArgsBase para gestionar el parsing y las propiedades comunes de todos los eventos relacionados con el flujo de llamadas y el dialplan (Channel, Uniqueid, Context, etc.).
  • Inmutabilidad: Todas las clases de eventos están diseñadas para ser inmutables, lo que mejora la seguridad en entornos multihilo.
  • Separación de Lógica: Utiliza la composición (DialplanInfo) y helpers estáticos para separar la lógica de parsing compleja (ej. campo Channel, campos prefijados como DestChannel) de las clases de eventos.

Instalación

Instala el paquete a través del Administrador de Paquetes NuGet:

dotnet add package Asterisk.Core.Events

O desde la Consola del Administrador de Paquetes:

Install-Package Asterisk.Core.Events

Clases de Eventos Modeladas

Las siguientes son algunas de las clases de eventos clave proporcionadas en este paquete:

Clase de Evento Clase Base Descripción
DialplanEventArgsBase EventArgs Base para todos los eventos del dialplan (Canal, ID, Contexto, Prioridad).
NewextenEventArgs DialplanEventArgsBase Se dispara cuando se ejecuta una nueva extensión en el dialplan.
VarSetEventArgs DialplanEventArgsBase Indica que una variable del canal ha sido establecida o modificada.
NewstateEventArgs DialplanEventArgsBase Un canal existente cambia de estado (ej. de Ringing a Up).
HangupEventArgs DialplanEventArgsBase Un canal ha finalizado, incluye la causa (Cause y CauseTxt).
DialEndEventArgs EventArgs (Usa DialplanInfo internamente) El proceso de marcación ha finalizado, incluye detalles del destino (DestChannel).
DeviceStateChangeEventArgs EventArgs Indica un cambio en el estado de un dispositivo (ej. un hint de dialplan).

Ejemplo de Uso

Una vez que tengas un listener (escuchador) de eventos AMI configurado, puedes manejar los eventos con seguridad de tipo (type-safety):

// Suponiendo que 'manager' es una instancia de AsteriskManager
manager.EventReceived += (sender, eventArgs) => 
{
    var message = e.Message;

    Console.WriteLine($"Procesando mensaje de evento: {message.Replace("\r", "\\r").Replace("\n", "\\n")}");

    // 1. Análisis: Convierte el mensaje en un diccionario de clave-valor
    var lines = message
        // Usa TerminatorChars, que es una propiedad de ManagerState.
        .Split(TerminatorChars, StringSplitOptions.RemoveEmptyEntries)
        .Select(l => l.Split(new[] { ':' }, 2))
        .Where(kvp => kvp.Length == 2)
        .ToDictionary(kvp => kvp[0].Trim(), kvp => kvp[1].Trim(), StringComparer.OrdinalIgnoreCase);

    // 2. Extracción del tipo de evento
    if (!lines.TryGetValue("Event", out var eventType))
    {
        Console.WriteLine("Advertencia: Mensaje sin campo 'Event'. Disparando evento genérico.");
        return;
    }

    // 3. Despacho/Fábrica: Llama a un método que se encargará de crear y disparar el evento tipado.
};

Ejemplo de Uso (Con Eventos Específicos)

En lugar de suscribirse a un evento genérico que requiere un 'cast' manual, se recomienda suscribirse directamente a los eventos tipados proporcionados por AsteriskManager (siguiendo la estructura del paquete Asterisk.Core.Events).

// Suponiendo que 'manager' es una instancia de AsteriskManager
manager.HangupReceived += OnHangup;
manager.DialEndReceived += OnDialEnd;
manager.VarSetReceived += OnVarSet;

private static void OnHangup(object? sender, HangupEventArgs hangup)
{
    Console.WriteLine($"📞 Colgado: {hangup.ChannelInfo.UniqueId}");
    Console.WriteLine($"Causa: {hangup.Cause} - {hangup.CauseTxt}");
}

private static void OnDialEnd(object? sender, DialEndEventArgs dialEnd)
{
    Console.WriteLine($"🏁 Marcación Finalizada con estado: {dialEnd.DialStatus}");
    Console.WriteLine($"Canal Destino: {dialEnd.DestChannelInfo.ChannelDetails.Technology}");
}

private static void OnVarSet(object? sender, VarSetEventArgs varSet)
{
    Console.WriteLine($"⚙️ Variable establecida: {varSet.Variable} = {varSet.Value}");
}

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.
  • net8.0

    • No dependencies.

NuGet packages (1)

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

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 260 11/10/2025